PowerShellを使用して、管理者権限を持つリモートマシンでコマンドを実行するにはどうすればよいですか(例:管理者として実行)。
これまで私は試しました
start-process powershell.exe -verb runas -argumentlists ".\test.ps1"
これは失敗しています。
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/
Invoke-Command
は、標高が必要なインスタンスでは使用できません。さらに、受け入れられた回答は少し不完全であることがわかりました。ただし、私の場合は、スクリプトではなく.exe
ファイルを実行したいのですが、私のソリューションをスクリプトの処理にも適用できると思います。
以下のスクリプトは:
$EXE
変数で指定されたコマンドを実行しますジョブが完了する前にセッションを終了しないでください。終了すると、開始したプロセスが強制終了されます。これを並行して実行するには、-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