PowerShell リモーティングを使用してコマンドを実行する方法

  1. PowerShell リモーティングとは
  2. PowerShell での WinRM リスナーの設定
  3. 新しい PowerShell セッションを作成する
  4. PowerShell でクイックコマンドをリモート実行するための Invoke メソッドの使用
PowerShell リモーティングを使用してコマンドを実行する方法

Windows PowerShell を使用すると、ローカルまたはリモートコンピュータでコマンドを実行する方法が複数あります。一つの方法は、PowerShell リモーティングを有効にし、PowerShell セッションコマンドを使用することです。

この記事では、PowerShell リモーティングの仕組み、WinRM の設定、いくつかの PowerShell セッションコマンドの例、そして管理者アクセスでコンピュータにリモート接続する方法について説明します。

PowerShell リモーティングとは

PowerShell リモーティング(または PSRemoting)は、PowerShell で頻繁に使用される機能の一つです。その結果、私たちは 1つまたは複数のリモートコンピュータにシームレスに接続し、単一のコマンドでコマンドを実行することができます。

簡単に言えば、PSRemoting を使用すると、まるでリモートコンピュータの前に座っているかのように、そのコンピュータ上でコマンドを実行することができます。さらに、PSRemoting は、ユーザーを接続および認証し、リモート cmdlet を実行し、その cmdlet からの出力をローカルコンピュータに表示する機能を提供します。

PSRemotingSSHtelnet、さらには psexec のように考えてください。これは、PowerShell 内のコンピュータでコマンドを実行するための方法です。

PSRemoting は、セッション内でコマンドを実行することに大きく依存しています。セッションは、コマンドが内部で実行されるリモートシェルです。

これらのセッションを作成するには、PowerShell コンソールのバックグラウンドで多くのステップを経る必要があります。

PSRemoting セッションを開始すると、以下の粗いステップが実行されます:

  1. ユーザーは、WinRM リスナー上の宛先サーバーに接続を試みます。WinRM リスナーはサーバー上で実行される小さな Web サービスです。

    WinRM は、Microsoft の実装標準である WSMan のバージョンです。WSMan は、当時 Intel、Dell、Sun Microsystems など多くの大手 IT 企業とともに作成されたオープンソースの標準です。

  2. クライアントが HTTP または HTTPS プロトコルを介してリスナーに接続すると、認証プロセスが始まります。

  3. クライアントがサーバーに接続し、認証すると、PSRemoting はセッションを生成します。

  4. PSRemoting がセッションを生成すると、それはビジネスを開始する準備が整います。クライアントはサーバーに情報を送信し、必要な出力をシリアル化として戻すことができます。

    この通信は通常、暗号化されています。

PSRemoting を有効にするには、以下のコマンドを PowerShell コンソールに入力してください。

Enable-PSRemoting Force

PowerShell での WinRM リスナーの設定

クライアントはネットワークを介して接続する場所が必要です。クライアントは、向こう側で「聞いている」ものと「話す」必要があります。「聞いている」部分は WinRM リスナーの役割です。

以下の winrm コマンドを使用して、任意の Windows コンピュータで実行中のすべての WinRM リスナーを発見できます。

winrm e winrm/config/listener

WinRM リスナーにはいくつかの重要なコンポーネントがあります。

  1. リスニングアドレス - バインドされる IP アドレス。リスニングアドレスは、クライアントが接続するサーバーの IP アドレスです。
  2. トランスポートの種類 - 各 WinRM リスナーは、クライアントと通信する手段を必要とします。これを HTTP または HTTPS を介して行います。
  3. オプションの証明書サムプリント - WinRM リスナーがトランスポートに HTTPS を使用する場合、クライアントを認証するためのプライベートキーを知っている必要があります。このキーは証明書サムプリントを利用して見つけられます。

WinRM でローカルコンピュータの信頼されたホストのリストにリモートコンピュータを追加するには、以下のコマンドを入力します。

winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'

WinRM の設定を確認およびチェックするには、以下のコマンドを入力します。

winrm quickconfig

新しい PowerShell セッションを作成する

New-PSSession コマンドは、ローカルまたはリモートコンピュータ上に Windows PowerShell セッション(PSSession)を作成します。PSSession を作成すると、PowerShell はリモートコンピュータへの永続的な接続を確立します。

Enter-PSSession または Invoke-Command–ComputerName パラメーターを使用することで、PSSession を作成せずにリモートコンピュータでコマンドを実行できます。

–ComputerName パラメーターを使用すると、PowerShell は cmdlet に使用される一時接続を作成し、実行後に閉じられます。

Windows PowerShell 6.0 以降、ローカルコンピュータで SSH が有効になっていて、リモートコンピュータに Windows PowerShell SSH エンドポイントが設定されている場合、Secure Shell(SSH)を使用してリモートマシン上にセッションを作成および確立できます。

SSH ベースの Windows PowerShell リモート開始セッションのメリットの一つは、複数のプラットフォーム(Windows、Linux、macOS)やクロスプラットフォームで動作することです。

SSH ベースのセッションでは、-HostName または -SSHConnection パラメーターを使用してリモートコンピュータやその他の関連接続情報を指定できます。

New-PSSession -ComputerName DC01 -Credential (Get-Credential)

New-PSSession コマンドによって生成されたセッションは永続的であることを忘れないでください。つまり、複数回使用できます。

しかし、セキュリティリスクを避けるために、Remove-PSSession コマンドを使用してセッションを閉じる必要があることを忘れないでください。

PowerShell でクイックコマンドをリモート実行するための Invoke メソッドの使用

実行されたコマンドを書く際には、Invoke-Command cmdlet を使用することが好ましいです。これにより、IDE 内で IntelliSense が保持されます。また、Invoke-Command は、クイックで簡単な一時的なコマンドを実行する場合に便利です。

任意の Invoke メソッドのセッションは非永続的であり、悪意のあるユーザーが悪用できるセッションを保持しません。

以下のスニペットは、管理者レベルでコマンドを実行できるように、ユーザー名とセキュア文字列のパスワードを渡す Invoke-Command の例です。

スクリプトサンプル:

$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr

Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn