首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含进程的函数返回乱码值

包含进程的函数返回乱码值
EN

Stack Overflow用户
提问于 2012-01-14 04:42:57
回答 1查看 230关注 0票数 1

我花了整个上午试图找出我的返回值哪里乱码了。现在我终于找到了地方,我仍然不知道为什么。函数如下所示:

代码语言:javascript
复制
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 )。我甚至试着重写返回值,只是说

代码语言:javascript
复制
 return "false"

调用函数收到“Truefalse”。我所能说的就是它与$Process running有关。如果我注释掉$Process.Start(),返回代码将正常工作。谁来救救我吧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-14 05:03:24

$Process.Start()返回一个布尔值,如果成功则为True。请记住,PowerShell中函数的行为与标准编程语言不同。PowerShell函数“返回”或更准确地说是“输出”任何未被变量捕获或重定向到文件或Out-Null的命令输出。在这种情况下,将开始行更改为:

代码语言:javascript
复制
[void]$Process.Start()

代码语言:javascript
复制
$Process.Start() | Out-Null

有关更深层次的解释,请查看this blog post

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8856975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档