web-dev-qa-db-ja.com

PowerShellを使用してリモートコンピューターでプログラムを実行する

PowerShellを使用してリモートマシンでプログラムを実行するにはどうすればよいですか?

5

これを行うクールな新しい方法は WinRM を使用することです。私はこのデモをWindows Server 2008 R2で見たことがありますが、他のWindowsオペレーティングシステム用のpowershell v2とWinRMのダウンロードがあります。

これを行うためのそれほどクールではない(または新しい)方法は psexec を使用することですが、これはpowershellではありませんが、powershell-esque構文を使用して呼び出す方法は確かにあります。

7
Nick Kavadias

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"
3
Jeffery Hicks

ここ は、psexec/powershellリンクです。

1
Mike Shepard

興味深いことに、これを使用してリモートコンピューターでメモ帳を実行しましたが、表示されませんでした。タスクマネージャーを確認したところ、呼び出しで返されたプロセスIDは確かにそこにありました。

Windowsは、これはセキュリティの概念であり、プロセスは非表示で、またはバックグラウンドで実行されると述べています。

1
user59075

このコードは私がバットファイルをリモートで実行するのを助けました、うまくいけばこれは将来誰かを助けるでしょう。このスクリプトの上部にある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
1
SSH This

RE:ニックの答え

はい、PowerShell v2(WinRM 2.0)はServer 2008 R2およびWindows 7にバンドルされています。ダウンレベルバージョンは、XP、Vista、2003および2008で間もなく利用可能になる予定です。

WMIを使用してリモートのものを実行することもできますが、コンソールとやり取りする必要があります。これは実行可能な方法ではありません。

0
Marco Shaw