Glowie
Glowie

Reputation: 2309

Start-Process cannot execute psexec.exe

I have working script that use Invoke-Expression to execute psexec in Powershell ISE

<# $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

I don't want to use Invoke-Expression because it outputs data, including PLAINTEXT password onto Powershell ISE console. But this script with Start-Process doesn't work

<# $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'

How to fix?

Upvotes: 1

Views: 1685

Answers (1)

TheMadTechnician
TheMadTechnician

Reputation: 36297

How about just capturing the Invoke-Expression in a variable, or piping it to Out-Null?

$CmdOutput = Invoke-Expression $enable_command

or

Invoke-Expression $enable_command | Out-Null

Edit: Ok, I forgot that PSExec likes to use StdErr as a method for displaying some of it's text, and that portion would not be captured by these. What you can do is redirect StdErr to StdOut, and either pipe to Out-Null or capture it as suggested. Try this:

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

Upvotes: 1

Related Questions