我很难理解为什么这些命令在远程运行时会失败。这是我通过“远程”主机通过invoke-command和通过invoke-command直接执行命令的示例运行。后一组失败。
PS C:\Users\guy\Downloads\zabbix_agent> & 'C:\Program Files\Zabbix\zabbix_agentd.exe' "--start"
zabbix_agentd.exe [16608]: service [Zabbix Agent] started successfully
PS C:\Users\guy\Downloads\zabbix_agent> $?
True
PS C:\Users\guy\Downloads\zabbix_agent> & 'C:\Program Files\Zabbix\zabbix_agentd.exe' "--stop"
zabbix_agentd.exe [20428]: service [Zabbix Agent] stopped successfully
PS C:\Users\guy\Downloads\zabbix_agent> $?
True
PS C:\Users\guy\Downloads\zabbix_agent> invoke-command -scriptblock { & "C:\Program Files\Zabbix\zabbix_agentd.exe" "--start" }
zabbix_agentd.exe [10976]: service [Zabbix Agent] started successfully
PS C:\Users\guy\Downloads\zabbix_agent> $?
True
PS C:\Users\guy\Downloads\zabbix_agent> invoke-command -scriptblock { & "C:\Program Files\Zabbix\zabbix_agentd.exe" "--stop" }
zabbix_agentd.exe [17096]: service [Zabbix Agent] stopped successfully
PS C:\Users\guy\Downloads\zabbix_agent> $?
True
PS C:\Users\guy\Downloads\zabbix_agent> invoke-command -computername 127.0.0.1 -scriptblock { & "C:\Program Files\Zabbix\zabbix_agentd.exe" "--start" }
zabbix_agentd.exe [8508]: service [Zabbix Agent] started successfully
+ CategoryInfo : NotSpecified: (zabbix_agentd.e...ed successfully:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : 127.0.0.1
PS C:\Users\guy\Downloads\zabbix_agent> $?
False
PS C:\Users\guy\Downloads\zabbix_agent> invoke-command -computername 127.0.0.1 -scriptblock { & "C:\Program Files\Zabbix\zabbix_agentd.exe" "--stop" }
zabbix_agentd.exe [12384]: service [Zabbix Agent] stopped successfully
+ CategoryInfo : NotSpecified: (zabbix_agentd.e...ed successfully:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : 127.0.0.1
PS C:\Users\guy\Downloads\zabbix_agent> $?
False
PS C:\Users\guy\Downloads\zabbix_agent> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 16299 666
PS C:\Users\guy\Downloads\zabbix_agent>
程序运行不应该完全一样吗?我注意到程序仍然可以正确执行,但是它们会以某种方式产生此看似虚假的错误。我不认为这是环境问题。
我还应该说,如果我将“ --help”选项传递给zabbix_agentd.exe而不是“ --start”或“ --stop”,它似乎可以正常工作;我得到一个显示帮助文本的字符串,没有错误。
编辑:一个潜在的线索可能是zabbix_agentd.exe(莫名其妙地)将其成功消息发送到stderr。 Windows的远程运行程序可能只是将任何此类输出解释为故障迹象,并做出相应的反应。我正在玩,但是快速的2>&1似乎无法解决问题。
编辑:可能还值得注意的是,zabbix_agentd.exe成功返回正确的0。
PS C:\Users\guy\Downloads\zabbix_agent> invoke-command -computername 127.0.0.1 -scriptblock { & "C:\Program Files\Zabbix\zabbix_agentd.exe" "--start"; $LASTEXITCODE };
zabbix_agentd.exe [19564]: service [Zabbix Agent] started successfully
+ CategoryInfo : NotSpecified: (zabbix_agentd.e...ed successfully:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : 127.0.0.1
0
PS C:\Users\guy\Downloads\zabbix_agent>
答案 0 :(得分:-1)
powershell似乎会自动将任何stderr输出转换为ErrorRecord对象。这也发生在本地,但不会例外:
PS C:\Users\guy\Downloads\zabbix_agent> & 'C:\Program Files\Zabbix\zabbix_agentd.exe' "--start"
zabbix_agentd.exe [19948]: service [Zabbix Agent] started successfully
PS C:\Users\guy\Downloads\zabbix_agent>
---
PS C:\Users\guy\Downloads\zabbix_agent> ( & 'C:\Program Files\Zabbix\zabbix_agentd.exe' "--start" 2>&1 ).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ErrorRecord System.Object
PS C:\Users\guy\Downloads\zabbix_agent>
我在Zabbix源代码中确认,它只是打印到stderr,而没有做任何更奇特的事情。
远程运行时,powershell不会显示文本版本,而是显示整个异常对象。
因此,错误始终存在,但实际上并不可见。
答案 1 :(得分:-2)
如果只想使用布尔值,请添加'return $?'到您的脚本块。
$returnedBoolean = invoke-command -computername 127.0.0.1 -scriptblock {
& "C:\Program Files\Zabbix\zabbix_agentd.exe" "--stop"
return $?
}
$returnedBoolean