我花了整个上午试图找出我的返回值哪里乱码了。现在我终于找到了地方,我仍然不知道为什么。函数如下所示:
function Run-RemoteCommand {
param(...) # params are $Remote (host) $Command $Credentials $Quiet (optional switch)
if($Quiet) {
$Process = New-Object System.Diagnostics.Process
$Process.StartInfo.UseShellExecute=$false
$Process.StartInfo.Domain=$Credentials.GetNetworkCredential().Domain
$Process.StartInfo.UserName=$Credentials.GetNetworkCredential().UserName
$Process.StartInfo.Password=$Credentials.Password
$Process.StartInfo.WindowStyle="Hidden"
$Process.StartInfo.FileName=$PSExec
$Process.StartInfo.Arguments=@("/acceptEULA",$Remote,"-s",$Command)
$Process.Start()
$Process.WaitForExit()
$result = $Process.ExitCode
return $result
} else {
...
}
}奇怪的是,我可以在调试器中一步一步地完成这一过程,并看到一切工作正常。命令运行时,$result会填充返回代码,但调用函数会收到附加在返回代码后面的True (例如成功时为True0 )。我甚至试着重写返回值,只是说
return "false"调用函数收到“Truefalse”。我所能说的就是它与$Process running有关。如果我注释掉$Process.Start(),返回代码将正常工作。谁来救救我吧。
发布于 2012-01-14 05:03:24
$Process.Start()返回一个布尔值,如果成功则为True。请记住,PowerShell中函数的行为与标准编程语言不同。PowerShell函数“返回”或更准确地说是“输出”任何未被变量捕获或重定向到文件或Out-Null的命令输出。在这种情况下,将开始行更改为:
[void]$Process.Start()或
$Process.Start() | Out-Null有关更深层次的解释,请查看this blog post。
https://stackoverflow.com/questions/8856975
复制相似问题