NetXMS Support Forum

English Support => General Support => Topic started by: Thomas on May 20, 2022, 02:34:39 PM

Title: Exchange Build number (long format)
Post by: Thomas on May 20, 2022, 02:34:39 PM
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



Title: Re: Exchange Build number (long format)
Post by: Victor Kirhenshtein on May 22, 2022, 07:28:33 PM
Hi,

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

Best regards,
Victor
Title: Re: Exchange Build number (long format)
Post by: Thomas on May 23, 2022, 03:15:11 PM
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?
Title: Re: Exchange Build number (long format)
Post by: Victor Kirhenshtein on May 23, 2022, 03:33:05 PM
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
Title: Re: Exchange Build number (long format)
Post by: Thomas on May 23, 2022, 06:15:46 PM
OK but powershell output beginns ever wither a blank line i have no idea how do i get rid of that
Title: Re: Exchange Build number (long format)
Post by: Victor Kirhenshtein on May 24, 2022, 10:36:28 AM
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