Exchange Build number (long format)

Started by Thomas, May 20, 2022, 02:34:39 PM

Previous topic - Next topic

Thomas

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




Victor Kirhenshtein

Hi,

you should use $$ to insert $ into command, as it is start of command argument ($1, $2, etc.).

Best regards,
Victor

Thomas

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?

Victor Kirhenshtein

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

Thomas

OK but powershell output beginns ever wither a blank line i have no idea how do i get rid of that

Victor Kirhenshtein

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