Eu escrevi a seguinte função para iniciar um processo em um servidor remoto:
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
}
Requer o nome do computador e sua linha de comando como uma string, evite aspas adicionais e retorna um objeto personalizado com informações sobre o processo:
PoSH> StartRemote -computer TEST-VM -cmd "gpupdate /force"
ProcessID : 6992
ComputerName : TEST-VM
ReturnValue : 0
ReturnMsg : OK
Cmd : gpupdate /force
Talvez você possa modificá-lo para permitir credenciais alternativas. Espero que isso seja útil.