1

我有使用 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'

怎么修?

4

1 回答 1

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
于 2014-09-18T20:15:31.427 回答