Hi,
After Update to Version 4.X the old dosent work
Netxms config:
ExternalParameter = EXVersion:"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" "C:\Script\EXVersion.ps1"
Script: Get-Command Exsetup.exe | ForEach FileVersionInfo |fl Productversion
No Version Information.
After Searching i use this:
ExternalParameterShellExec = ExchangePatchNumber:pwsh -Command { Get-Command Exsetup.exe | ForEach {$_.FileVersionInfo} }
Value: forEach' is not recognized as an internal or external command
Debug log:
2022.05.20 13:11:46.415 *D* [exec               ] RunExternal called for "ExchangePatchNumber" "Spwsh -Command { Get-Command Exsetup.exe | ForEach {$_.FileVersionInfo} }"
2022.05.20 13:11:46.415 *D* [exec               ] RunExternal: command line is "pwsh -Command { Get-Command Exsetup.exe | ForEach {_.FileVersionInfo} }"
2022.05.20 13:11:46.423 *D* [procexec           ] ProcessExecutor::execute(): process "CMD.EXE /C pwsh -Command { Get-Command Exsetup.exe | ForEach {_.FileVersionInfo} }" started
2022.05.20 13:11:46.467 *D* [procexec           ] ProcessExecutor::readOutput(): stopped on GetOverlappedResult (The pipe has been ended.)
2022.05.20 13:11:46.467 *D* [comm.cs.1          ] GetMetricValue("ExchangePatchNumber"): 0 (SUCCESS) value = "'ForEach' is not recognized as an internal or external command,"
If I understand correctly then he leaves the variable $ ( 022.05.20 13:11:46.423 *D* [procexec           ] ProcessExecutor::execute(): process "CMD.EXE /C pwsh -Command { Get-Command Exsetup.exe | ForEach {_.FileVersionInfo} }" started) out and that's why the error occurs?
In Powershell the Command works
Any ideas about it?
Thanks
			
			
			
				Hi,
you should use $$ to insert $ into command, as it is start of command argument ($1, $2, etc.).
Best regards,
Victor
			
			
			
				Hello Victor,
Thanks for your answer.. This woks..
But in NetXMS the Value is emty....
Log:
2022.05.23 14:07:23.515 *D* [procexec           ] ProcessExecutor::execute(): process "CMD.EXE /C powershell -Command "& { Get-Command Exsetup.exe | ForEach {$_.FileVersionInfo} }"" started
2022.05.23 14:07:23.746 *D* [procexec           ] ProcessExecutor::readOutput(): stopped on GetOverlappedResult (The pipe has been ended.)
2022.05.23 14:07:23.746 *D* [comm.cs.1          ] GetMetricValue("ExchangePatchNumber"): 0 (SUCCESS) value = ""
CMD out:
C:\>CMD.EXE /C powershell -Command "& { Get-Command Exsetup.exe | ForEach {$_.FileVersionInfo} }"
ProductVersion   FileVersion      FileName
--------------   -----------      --------
15.02.1118.007   15.02.1118.007   D:\Program Files\Microsoft\Exchange Server\V15\bin\ExSetup.exe
Is the problem here that only the first line is output and the value is actually in the 3 line?
Do you have an idea how I can fix this?
			
			
			
				Yes, only first line is taken as value of external parameter. You have to format output in your script so it return required value in first line.
Best regards,
Victor
			
			
			
				OK but powershell output beginns ever wither a blank line i have no idea how do i get rid of that
			
			
			
				Not each output of powershell begins with empty line, only this specific command does. You can filter output further, probably from powershell itself as well, but I don't know how (not using it). However, command line pipe should work as well (I assume you are interested in line with version number):
ExternalParameterShellExec = ExchangePatchNumber:pwsh -Command { Get-Command Exsetup.exe | ForEach {$_.FileVersionInfo} } | find "ExSetup.exe"
Best regards,
Victor