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 に答える