1
花了我整整一个早上试图找到我的返回值出现乱码的位置。现在我终于找到了地方,但我仍然不知道为什么。功能如下:包含进程的函数返回一个乱码值
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
[email protected]("/acceptEULA",$Remote,"-s",$Command)
$Process.Start()
$Process.WaitForExit()
$result = $Process.ExitCode
return $result
} else {
...
}
}
有什么奇怪的是,我可以在一个调试器,通过这一步,看着一切工作正常。该命令运行时,$ result被返回代码填充,但调用函数接收True后附加到返回代码(例如True0成功)。我甚至试图覆盖返回值,只是说
return "false"
调用函数收到“Truefalse”。我只能说,它与$ Process运行相关。如果我注释掉$ Process.Start(),则返回代码正常工作。有人请保存我的理智。
谢谢基思,现在我不必把所有的钱花在罗迦身上,以挽救我即将退出的头发!在这个环节也有很好的阅读。尤其是在这里应用并开始的部分“我在PowerShell新闻组上一次又一次地看到了这个问题......” – ASTX813 2012-01-13 21:41:58