2011-09-06 34 views
2

你们中的任何人都可能知道为什么这不起作用吗?通过startprocess执行scriptblock

Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit -Command & `"{$outvar1 = 4+4; `"out: $outvar1`"}`"" -Wait 

这样做的最终目的是,我可以通过添加-Credential选项来运行脚本块作为另一个用户。但我不能让这个简单的脚本块工作。 非常感谢。 Chris。

+0

任何理由你不使用'调用命令'可以使用指定的凭据在本地或远程运行脚本块(请参阅[help](http://technet.microsoft.com/zh-cn/library/dd347578.aspx)中的示例2)? – Richard

+0

嗨,那么事实是,即时执行AutoSPInstaller脚本时,在行2056 AutoSPInstallerFunctions.ps1有一个错误。我试图复制它的功能,原来的路线是; \t \t Start-Process $ PSHOME \ powershell.exe -Credential $ FarmCredential -ArgumentList“-Command Start-Process $ PSHOME \ powershell.exe -ArgumentList'”'$ ScriptFile'' -Verb Runas“-Wait – chris

+0

其中script文件是前面生成的脚本的路径和文件名称 – chris

回答

2

这里是工作的财产以后:

PS C:\> Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output `$outvar1`"}`"" -Wait 

-ArgumentList是strinds $ outvar的数组被解释,所以我用`$ outvar

+0

太棒了,然后在我们刚刚转义特殊字符之前添加一些文本,现在我明白了。欢呼开始进程$ PSHOME \ powershell.exe -ArgumentList“ - 无退出”,“ - 命令'”&{'$ outvar1 = 4 + 4; ''write-output'“Hello:''''$ outvar1'”}'“”-Wait – chris

+4

仅供参考,我更愿意使用'$ p =开始 - 进程... -PassThru;等待进程$ p.id -Timeout xxx'。为防止启动的进程挂起,我的脚本将不会挂起超过指定的超时时间。 –