我一直在努力获得PowerShell运行Psexec。 它适用于单行命令。 但我需要调用SCOM通过Psexec将服务器置于维护模式…
$output = .\pstools\PsExec.exe \\scomserver-u $user -p $password -wc:\scom -h "c:\scom\agentmm.exe servertoputinmaintenancemode 4 Automated Maintenance Mode Now +45m"
我已经试图在每句话后加引号,但它帮助..我得到这个错误
PsExec v1.98 – 远程执行进程Copyright(C)2001-2010 Mark Russinovich Sysinternals – www.sysinternals.com
句柄无效。
连接到scomservername …在scomservername上启动PsExec服务…在scomservername上连接PsExec服务…在scomservername上与PsExec服务进行通信时出错:
我编写了以下函数在远程服务器上启动进程:
Function StartRemote { param([string] $computer = $(Read-Host "Computername"), [string] $cmd = $(Read-Host "Commandline")) $remoteProcess = "" | Select-Object ProcessID, ComputerName, ` ReturnValue, ReturnMsg, Cmd $remoteProcess.ComputerName = $computer $remoteProcess.Cmd = $cmd $mc = New-Object System.Management.ManagementClass ` "\\$computer\root\cimv2:Win32_Process" $result = $mc.create($cmd) $remoteProcess.ReturnValue = [int]$result.ReturnValue $remoteProcess.ProcessID = $result.ProcessId switch($remoteProcess.ReturnValue) { 0 { $remoteProcess.ReturnMsg = "OK" } 2 { $remoteProcess.ReturnMsg = "Access denied" } 3 { $remoteProcess.ReturnMsg = "Insufficient privilege" } 8 { $remoteProcess.ReturnMsg = "Unknown failure" } 9 { $remoteProcess.ReturnMsg = "Path not found" } 21 { $remoteProcess.ReturnMsg = "Invalid parameter" } } return $remoteProcess }
它需要computername和你的命令行作为一个string,一定要转义额外的引号,并返回一个自定义对象的信息关于你的过程:
PoSH> StartRemote -computer TEST-VM -cmd "gpupdate /force" ProcessID : 6992 ComputerName : TEST-VM ReturnValue : 0 ReturnMsg : OK Cmd : gpupdate /force
也许你可以修改它来允许替代凭据。 希望这是有帮助的。
你可能想确保在cmd.exe中相同的命令行工作正常。 Powershell有一个稍微不同的参数parsing命令行的规则。