Windows PowerShell を使用してサーバーをリモート管理する
Contoso の IT 管理スタッフは、管理しているオブジェクトからリモートで管理タスクを実行することにますます重点を置くようになっています。 特に関心のある領域の 1 つは、Windows PowerShell を利用して Contoso の IT インフラストラクチャをリモートで運用および管理する機能です。 Windows PowerShell リモート処理を使用してこれを実現できます。
リモート処理の要件
リモート処理を行うには、ローカル コンピューターに Windows PowerShell がインストールされていて、接続先のリモート コンピューターで Windows リモート管理が有効になっている必要があります。 また、Windows PowerShell のリモート処理を有効にする必要があります。
Note
Windows PowerShell のリモート処理は、Windows Server では既定で有効になっていますが、これを Windows 10 と Windows 11 で有効にする必要があります。
Windows PowerShell のリモート処理を有効にするには、次のいずれかの手順を使用します。 管理者特権でのコマンド プロンプト (または Windows PowerShell (管理者) プロンプト) で、次のコマンドを実行します。
Winrm quickconfig
また、リモート処理を有効にするには、次の Windows PowerShell コマンドレットを使用することもできます。
Enable-PSremoting -force
重要
Windows リモート管理は HTTP 経由で通信します。 既定で、Windows リモート管理と Windows PowerShell のリモート処理では、暗号化されていない着信接続には TCP ポート 5985、暗号化された着信接続には TCP ポート 5986 を使用します。
注意
Windows リモート管理を使用するアプリケーション (Windows PowerShell など) では、Windows リモート管理サービスに渡されるデータに独自の暗号化を適用することもできます。
リモート処理コマンドではリソースがコピーされないため、特定のコマンドを実行するために必要なファイルやその他のリソースがリモート コンピューター上に存在している必要があります。 ただし、ローカル スクリプトを実行することはできます。 これは、スクリプト ファイル自体ではなく、スクリプトの内容がリモート コンピューターに送信されるためです。
リモート管理を実行するには、管理者が次のアクセス許可を持っている必要があります。
- リモート コンピューターへの接続
- Windows PowerShell の実行
- リモート コンピューターのデータ ストアとレジストリへのアクセス
注意事項
パブリック ネットワークの場所のプロファイルにネットワーク インターフェイス カード (NIC) が割り当てられているコンピューターでリモート処理を有効にすると、エラーが発生します。 Enable-PSremoting -force
を使用すると、この制限を回避し、パブリック NIC を持つデバイスでリモート処理を強制することができます。
リモート コンピューターに対するコマンドレットの実行
いくつかのコマンドレットには、リモート コンピューターからオブジェクトを取得できる ComputerName パラメーターがあります。 これらのコマンドレットは、通信のために Windows PowerShell リモート処理を使用しないため、Windows PowerShell を実行する任意のコンピューターで、これらのコマンドレットの ComputerName パラメーターを使用できます。 Windows PowerShell リモート処理用にコンピューターを構成したり、リモート処理のシステム要件を満たしたりする必要はありません。
次の表では、ComputerName パラメーターの詳細について説明します。
コマンド | 説明 |
---|---|
Get-Command –ParameterName ComputerName |
ComputerName パラメーターを使用するコマンドレットを検索します。 |
Get-Help <cmdlet-name> -parameter ComputerName |
ComputerName パラメーターに Windows PowerShell のリモート処理が必要かどうかを判断します。 |
リモート コマンドの処理
リモート コンピューターに接続してリモート コマンドを送信すると、コマンドはネットワーク経由でリモート コンピューター上の Windows PowerShell インスタンスに送信され、そこで実行されます。 コマンドの結果はローカル コンピューターに返され、ローカル コンピューター上の Windows PowerShell セッションに表示されます。
リモート コマンドへのすべてのローカル入力は、そのいずれかがリモート コンピューターに送信される前に収集されます。 ただし、出力は生成時にローカル コンピューターに返されます。 リモート コンピューターに接続すると、システムはローカル コンピューターのユーザー名とパスワードの資格情報を使用して、リモート コンピューターに対する認証を行います。
注意
既定では、承認と認証を実行するために Kerberos バージョン 5 (V5) 認証プロトコルが使用されます。 したがって、AD DS ドメインが必要です。
ヒント
リモート コンピューターがドメイン内にない場合、または信頼されていないドメイン内にある場合は、リモート コンピューターを信頼されたホストとして定義することで、クライアント コンピューターが接続できるようにすることができます。
次のコマンドレットでは、リモート処理がサポートされます。
Invoke-Command
Enter-PSSession
Exit-PSSession
Disconnect-PSSession
Receive-PSSession
Connect-PSSession
ヒント
Windows PowerShell ISE を使用してリモート タブを作成できます。 このタスクを実行するには、Windows PowerShell ISE の [ファイル] メニューから [新しいリモート PowerShell] タブ オプションを使用します。
リモート処理を実行する場合は、一時的なセッションを使用してリモート コンピューターに接続するか、永続的なセッションを作成することができます。
一時的なセッションの作成
一時的なセッションの場合は、セッションを開始し、コマンドを実行して、セッションを終了します。 これは、多数のリモート コンピューターであっても、1 つのコマンドまたは複数の関連のないコマンドを実行するための効率的な方法です。
注意
接続を閉じた後は、コマンド内で定義された変数または関数を使用できなくなります。
一時的な接続を作成するには、 Invoke-Command
コマンドレットと –ComputerName パラメーターを使用してリモート コンピューターを指定します。 次に、 –ScriptBlock パラメーターを使用して、コマンドを指定します。 たとえば、次のコマンドでは、SEA-DC1 コンピューター上で Get-EventLog
が実行されます。
Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}
永続的なセッションの作成
別のコンピューターとの永続的な接続を作成するには、New-PSSession
コマンドレットを使用し ます。 たとえば、次のコマンドは、リモート コンピューター上にセッションを作成し、そのセッションを $s 変数に保存します。
$s = New-PSSession –ComputerName SEA-DC1
対話型セッションに接続して開始するには、Enter-PSSession
コマンドレットを使用します。 たとえば、SEA-DC1 で新しいセッションを開いた後、次のコマンドを実行すると、コンピューターとの対話型セッションが開始されます。
Enter-PSSession $s
セッションに入ると、ローカル コンピューター上の Windows PowerShell コマンド プロンプトが、接続を示すように変更されます。
対話型セッションは、閉じるまで開いたままになります。 これにより、必要に応じてコマンドをいくつでも実行できます。 対話型セッションを終了するには、次のコマンドを入力します。
Exit-PSSession
複数のコンピューターでのリモート コマンドの実行
一時的なセッションの場合、 Invoke-Command
コマンドレットでは複数のコンピューター名が受け入れられます。 永続的な接続の場合、Session パラメーターでは複数の Windows PowerShell セッションが受け入れられます。 複数のコンピューターでリモート コマンドを実行するには、Invoke-Command
コマンドレットを使用して ComputerName パラメーターにすべてのコンピューター名を含め、次の例に示すように、名前をコンマで区切ります。
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}
永続的なセッションでは、複数の Windows PowerShell セッションでコマンドを実行することもできます。 次のコマンドは、SEA-DC1、SEA-SVR1、および SEA-SVR2 に Windows PowerShell セッションを作成し、各 Windows Powershell セッションで Get-Culture
コマンドを実行します。
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
ヒント
コンピューターの一覧にローカル コンピューターを含めるには、ローカル コンピューターの名前、またはピリオド (.)、または localhost を入力します。
リモート コンピューターでスクリプトを実行する方法
リモート コンピューターでローカル スクリプトを実行するには、Invoke-Command
と FilePath パラメーターを使用します。 次のコマンドは、SEA-DC1 コンピューターと SVR1 コンピューターで、Sample.ps1 スクリプトを実行します。
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1
スクリプトの結果がローカル コンピューターに返されます。 FilePath パラメーターを使用することで、リモート コンピューターにファイルをコピーする必要がなくなります。
デモンストレーション
次のビデオでは、Windows PowerShell を使用してリモート Windows Server を管理する方法を説明します。 このプロセスの主な手順は次のとおりです。
管理者特権の PowerShell プロンプトを起動します。
次のコマンドを実行して、PowerShell のリモート処理セッションを作成します。
Enter-PSSession -ComputerName SEA-DC1
標準の Windows PowerShell コマンドレットを使用して、名前や IP アドレスなどのサーバーに関する情報を取得します。
次のコマンドを使用して、IIS サービスの状態を確認し、そのサービスを再起動します。
Get-Service -Name IISAdmin | Restart-Service