Start-Process无法执行psexec.exe

时间:2014-09-18 19:54:35

标签: powershell psexec start-process

我有一个使用Invoke-Expression在Powershell ISE中执行psexec的工作脚本

<# $password is encrypted password, need to unencrypt to pass it to psexec #>

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$str =  [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)

$enable_command = "D:\PSTools\PsExec.exe $comp -u Administrator -p $str -accepteula powershell.exe c:\share\ps_enable.ps1"

Invoke-Expression $enable_command

我不想使用Invoke-Expression,因为它会将数据(包括PLAINTEXT密码)输出到Powershell ISE控制台。但是这个带有Start-Process的脚本不起作用

<# $password is encrypted password, need to unencrypt to pass it to psexec #>

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$str =  [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)

Start-Process -FilePath D:\PSTools\PsExec.exe -ArgumentList '$comp', '-u', 'Administrator', '-p', '$str', '-accepteula', 'powershell.exe', 'c:\share\ps_enable.ps1'

如何解决?

1 个答案:

答案 0 :(得分:1)

如何在变量中捕获Invoke-Expression,或将其传递给Out-Null?

$CmdOutput = Invoke-Expression $enable_command

Invoke-Expression $enable_command | Out-Null

编辑:好的,我忘记了PSExec喜欢使用StdErr作为显示其中某些文本的方法,并且这些部分不会被捕获。你可以做的是将StdErr重定向到StdOut,然后管道输出Out-Null或按照建议捕获它。试试这个:

$CmdOutput = Invoke-Expression $enable_command 2>&1