by seanthehulk at 2012-10-04 11:04:12
I am in the process of converting some of my server side VBScripts to PowerShell. One of these scripts copies a file down to the remote machine and then uses psexec to remotely execute that file with the administrator context.by JeffH at 2012-10-04 13:07:34
So I have a couple questions.
Why is it when I execute something like nslookup I get back an array of strings. But when I execute psexec, I can’t seem to capture what its writing to the console?
Secondly, is there a way to replicate VBScripts WshShell.Run Method where bWaitOnReturn = False? If I can’t capture and parse what PSExec is doing, then I would rather just fire it off and hope all goes well.
Is there any way to not have the console capture what psexec is doing?
Is there a better way to execute psexec then Invoke-Expression?
What I am currently doing:
$strCMD = "psexec.exe -accepteula -s -d \$strFQDN C:\Windows$strClientFolder$strServerFile"
Invoke-Expression -Command $strCMD
An Environment Disclaimer:
We still have many Windows XP Machines and PowerShell has unfortunately not been deployed to them.
Thank you
Powershell remoting would definitely be easier, if you could deploy PS v2 to the XP boxes, but that doesn’t sound likely. I haven’t tried PSExec in PowerShell but it may be that it doesn’t write to StdOut. The only thing I can think for you to try is using Start-Process. In the mean time, I’ll have to play with PSExec in PowerShell.by JeffH at 2012-10-04 13:13:39
Using Invoke-Expression I was able to at least save the console output.by JeffH at 2012-10-04 13:18:42
invoke-expression "c:\scripts\psexec \jdhit-dc01 ipconfig" | out-file c:\work\out.txt
You could parse the text file I guess then.
Actually, this also works:by JeffH at 2012-10-04 13:28:51
c:\scripts\psexec \jdhit-dc01 ipconfig | out-file c:\work\b.txt
Finally, depending on what you need to do with the results, you might be able to do it directly from the output.
PS C:> $results = c:\scripts\psexec \jdhit-dc01 nbtstat -n | where {$_ -match "Unique"} | foreach {$data = $.Trim().Split() | where {$} ; New-Object psobject -property @{Name=$data[0];Type=$data[1]}}
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
Starting nbtstat on jdhit-dc01... jdhit-dc01...
nbtstat exited on jdhit-dc01 with error code 0.
PS C:>
PS C:> $results
Name Type
---- ----
JDHIT-DC01 <00>
JDHIT-DC01 <20>
JDHITSOLUTIONS <1B>