Как я могу выполнить программу на удаленном компьютере с помощью PowerShell?
Новый классный способ сделать это - использовать WinRM. Я видел эту демонстрацию на Windows Server 2008 R2, хотя есть загрузка с PowerShell v2 и WinRM для других операционных систем Windows.
Не очень крутой (или новый) способ сделать это - использовать psexec, который не является PowerShell, но я уверен, что есть способ вызвать его с помощью синтаксиса в стиле PowerShell.
Вы также можете использовать WMI и удаленно запускать процесс. Он не будет интерактивным, и вам придется верить, что он закончится сам по себе. Для этого на удаленном компьютере не требуется ничего, кроме открытых портов для WMI.
Function New-RemoteProcess {
Param([string]$computername=$env:computername,
[string]$cmd=$(Throw "You must enter the full path to the command which will create the process.")
)
$ErrorActionPreference="SilentlyContinue"
Trap {
Write-Warning "There was an error connecting to the remote computer or creating the process"
Continue
}
Write-Host "Connecting to $computername" -ForegroundColor CYAN
Write-Host "Process to create is $cmd" -ForegroundColor CYAN
[wmiclass]$wmi="\\$computername\root\cimv2:win32_process"
#bail out if the object didn't get created
if (!$wmi) {return}
$remote=$wmi.Create($cmd)
if ($remote.returnvalue -eq 0) {
Write-Host "Successfully launched $cmd on $computername with a process id of" $remote.processid -ForegroundColor GREEN
}
else {
Write-Host "Failed to launch $cmd on $computername. ReturnValue is" $remote.ReturnValue -ForegroundColor RED
}
}
Пример использования:
New-RemoteProcess -comp "puck" -cmd "c:\windows\notepad.exe"
Достаточно интересно, что я использовал это для запуска блокнота на удаленном компьютере, и он не появился. Я проверил диспетчер задач, и идентификатор процесса, который вернул вызов, действительно присутствует!
Windows заявила, что это была концепция безопасности, и процесс будет работать скрыто / или в фоновом режиме!
Вотссылка psexec / powershell.
Этот код помог мне удаленно выполнить bat-файл, надеюсь, это поможет кому-то в будущем. Вам нужно будет заменить переменные creds и ComputerName в верхней части этого скрипта.
$Username = "username"
$Password = "password"
$ComputerName = "remote.machine.hostname"
$Script = {C:\test.bat > C:\remotelog 2>&1}
#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord
#Create session object with this
$Session = New-PSSession -ComputerName $ComputerName -credential $Cred
#Invoke-Command
$Job = Invoke-Command -Session $Session -Scriptblock $Script -AsJob
$Null = Wait-Job -Job $Job
#Close Session
Remove-PSSession -Session $Session
RE: Ответ Ника
Да, PowerShell v2 (с WinRM 2.0) входит в состав Server 2008 R2 и Windows 7. Вскоре должна быть доступна более ранняя версия для XP, Vista, 2003 и 2008.
У вас всегда есть возможность использовать WMI также для удаленного запуска, но он должен взаимодействовать с консолью, что не будет жизнеспособным методом.