web-dev-qa-db-ja.com

PowerShellを使用して管理者権限を持つリモートマシンでコマンドを実行する方法

PowerShellを使用して、管理者権限を持つリモートマシンでコマンドを実行するにはどうすればよいですか(例:管理者として実行)。

これまで私は試しました

start-process powershell.exe -verb runas -argumentlists ".\test.ps1"

これは失敗しています。

5
rakesh

リモートコマンドの実行

Invoke-Commandコマンドレットを使用して、リモートマシンでコマンドを実行します。構文は次のとおりです。

Invoke-Command -ScriptBlock <COMMAND> -ComputerName <COMPUTER> -credential <USERNAME>

COMMANDは実行するコマンド、COMPUTERはリモートマシンのホスト名、USERNAMEはコマンドを実行するアカウントのユーザー名です。パスワードの入力を求められます。

リモートセッションの開始

Enter-PSSessionコマンドレットを使用して、Invoke-CommandのSessionパラメーターを使用して複数のコマンドを実行できるリモートPowerShellセッションを開始します。

Enter-PSSession -ComputerName <COMPUTER> -Credential <USERNAME>

ソース: http://www.howtogeek.com/117192/how-to-run-powershell-commands-on-remote-computers/

2
akaBeakman

Invoke-Commandは、標高が必要なインスタンスでは使用できません。さらに、受け入れられた回答は少し不完全であることがわかりました。ただし、私の場合は、スクリプトではなく.exeファイルを実行したいのですが、私のソリューションをスクリプトの処理にも適用できると思います。

以下のスクリプトは:

  1. PowerShellセッションを開始する
  2. $EXE変数で指定されたコマンドを実行します
  3. 完了するのを待ちます
  4. セッションを終了する

ジョブが完了する前にセッションを終了しないでください。終了すると、開始したプロセスが強制終了されます。これを並行して実行するには、-WaitからStart-Process引数を削除し、セッションを終了する前にジョブを監視します。

# Enter or already have some administrative-level credentials here
$Cred=Get-Credential
$EXE='"<path to exe>"'
$Arguments=@(<array of arguments>)
$ScriptString="Start-Process -FilePath $EXE -ArgumentList @('$(Arguments -join "','")') -WindowStyle Hidden -Verb RunAs -Wait"
$ScriptBlock=[System.Management.Automation.ScriptBlock]::Create($ScriptString)
$Session=New-PSSession -ComputerName <target computer> -EnableNetworkAccess -Name <name of session> -Credential $Cred
$Job=Invoke-Command -Session $Session -ScriptBlock $ScriptBlock -AsJob
Wait-Job -Job $Job > $null
Remove-PSSession -Session $Session