powershell 中的 PSEXEC

powershell 中的 PSEXEC

我一直在努力让 powershell 运行 Psexec。它对于单行命令来说运行良好。但我需要调用 SCOM 以通过 Psexec 将服务器置于维护模式...

    $output = .\pstools\PsExec.exe \\scomserver-u $user -p $password -w c:\scom -h "c:\scom\agentmm.exe servertoputinmaintenancemode 4 Automated Maintenance Mode Now +45m"

我尝试在每句话后加上引号,但没有用。我收到此错误

PsExec v1.98 - 远程执行进程版权所有 (C) 2001-2010 Mark Russinovich Sysinternals - www.sysinternals.com

句柄无效。

正在连接到 scomservername...正在启动 scomservername 上的 PsExec 服务...正在连接 scomservername 上的 PsExec 服务...与 scomservername 上的 PsExec 服务通信时出错:

答案1

我编写了以下函数来在远程服务器上启动一个进程:

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
 }

它需要计算机名称和命令行作为字符串,确保转义额外的引号,并返回一个包含有关您的进程的信息的自定义对象:

PoSH> StartRemote -computer TEST-VM -cmd "gpupdate /force"

ProcessID    : 6992
ComputerName : TEST-VM
ReturnValue  : 0
ReturnMsg    : OK
Cmd          : gpupdate /force

也许您可以修改它以允许其他凭据。希望这对您有所帮助。

答案2

您可能希望确保相同的命令行在 cmd.exe 中正常工作。Powershell 对命令行的参数解析规则略有不同。

相关内容