PowerShellが提供する最高の機能の1つは、サーバーをリモートで管理できることです。さらに、それらの束を一度に管理することもできます。
シリーズの以前の記事を必ずお読みください:
- PowerShellでWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用することを学ぶ
- PowerShellでオブジェクトを使用する方法を学ぶ
- PowerShellでの書式設定、フィルタリング、比較の学習
そして、このシリーズの残りの週も一週間お楽しみに。
リモート処理とは何ですか?
サーバーの一括管理は退屈です。また、以前に50台のWebサーバーでIIS構成を変更する必要があった場合、その意味がわかります。これらは、PowerShell Remotingと言語のスクリプト機能が助けになるような状況です。 PowerShell Remotingでは、HTTPまたはより安全なHTTPSを使用して、ネットワーク上のリモートマシンにコマンドを送信できます。その後、マシンはコマンドを実行して出力を送り返し、画面に表示されます。
技術を取得しましょう
PowerShell Remotingの中核には、単一の既知のWindowsサービス、Windowsリモート管理、またはWinRMサービス。 WinRMを使用すると、1つ以上のセッション構成(エンドポイントとも呼ばれます)をセットアップできます。これは、基本的に、リモートPowerShellインスタンスに接続するユーザーに提供するエクスペリエンスに関する情報を含むファイルです。具体的には、セッション構成ファイルを使用して、インスタンスに接続できるユーザーと接続できないユーザー、実行できるコマンドレットとスクリプト、およびセッションを実行する必要があるセキュリティコンテキストを定義できます。 WinRMサービスを使用して、受信したPowerShellリクエストをリッスンする「リスナー」も設定します。これらの「リスナー」はHTTPまたはHTTPSのいずれかであり、マシン上の単一のIPアドレスにバインドできます。別のマシンへのPowerShell接続を開くと(技術的にはHTTPに基づくWS-MANプロトコルを使用して行われます)、接続はこれらの「リスナー」の1つにバインドされます。 「リスナー」は、適切なセッション構成ファイルに関連付けられたアプリケーションへのトラフィックの送信を担当します。アプリケーション(通常はPowerShellですが、必要に応じて他のホスティングアプリケーションを使用できます)は、コマンドを実行し、ネットワークを介して「リスナー」を介して結果をマシンにフィードバックします。
どうするか教えて
最初に行う必要があるのは、接続するマシンでリモート処理を有効にすることです。これは、次を実行することで実行できます。
Enable-PSRemoting
その後、すべてのプロンプトに対してyesと答える必要があります。 Enable-PSRemotingを実行すると、PCにいくつかの変更が加えられます。
- WinRMサービスが起動します。
- WinRMサービスは、手動スタートアップモードから自動モードに変わります。
- すべてのネットワークカードにバインドされるHTTPリスナーを作成します。
- また、WS-MANプロトコルの着信ファイアウォール例外も作成します。
- いくつかのデフォルトのセッション構成が作成されます
Windows 7とネットワークを実行している場合カードの場所が公開に設定されているため、PowerShell Remotingを有効にできません。これを修正するには、ホームネットワークまたは職場ネットワークの場所に切り替えるだけです。または、次を使用してネットワークチェックをスキップできます。
Enable-PSRemoting –SkipNetworkProfileCheck
ただし、ネットワークの場所を変更することをお勧めします。
PowerShellを使用して別のマシンに接続するには2つの方法があります。 1対1の方法があります。これはSSHを使用するのと非常によく似ていますが、1対多の方法があります。
PowerShellセッションを使用する
リモートマシンに接続する最初の方法PowerShellの使用は、PowerShellセッションと呼ばれるものを使用しています。セッションを置くだけで、リモートマシンでコマンドを実行することができます。これは、自分のマシンで実行するのとほぼ同じです。セッションを開くには、次のように入力します。
Enter-PSSession –ComputerName“ Darlah”
プロンプトは、コマンドレットを実行しているマシンを示すプレフィックスを取得します。
ここから、リモートマシンに座っているかのようにプロンプトを実際に処理できます。たとえば、C:ドライブ上のすべてのファイルを表示する場合は、次の簡単な操作を実行できます。
Get-ChildItem –パスC:
Linuxのバックグラウンドを持っている場合は、SSHに代わるPowerShellとして、この1対1のリモーティング方法を使用することを検討できます。
Invoke-Commandの使用
PowerShellをリモートで使用できる2番目の方法マシンはInvoke-Commandを使用しています。 Invoke-Commandを使用する利点は、複数のマシンで同じコマンドを同時に実行できることです。ご想像のとおり、これはサーバーからイベントログを収集するなどの操作を行う場合に特に役立ちます。 Invoke-Commandは次の構文に従います。
Invoke-Command -ComputerName Darlah、localhost -ScriptBlock {Get-EventLog Application -Newest 2}
コマンドはすべてのマシンで並行して実行されるため、特定の結果がどのPCからのものであるかを確認する方法が必要になります。これを行うには、PSComputerNameプロパティを調べます。
Invoke-Commandを使用すると、もう持っていないパイプラインで予想されるオブジェクト。 PowerShellがリモートマシンからマシンに情報を戻すには、リモートマシンで実行したコマンドが出力するオブジェクトを表す何らかの方法が必要です。最近では、階層データ構造を表す選択された方法はXMLを使用することです。つまり、Invoke-Commandを使用してコマンドを発行すると、結果は最初にXMLにシリアル化されてからマシンに送り返されます。それらがマシンに戻ると、デシリアライズされてオブジェクトに戻されます。ここでの落とし穴は、それらが逆シリアル化されると、オブジェクトが持っていたToString()メソッドを除くすべてのメソッドがそこから取り除かれることです。
注意: この規則にはいくつかの例外があります。たとえば、整数などのほとんどのプリミティブ型は、メソッドを含めてデシリアライズできます。 Rehydrationと呼ばれるプロセスもあります。このプロセスでは、いくつかのメソッドを逆シリアル化されたオブジェクトに追加して戻すことができます。 Get-Memberはあなたの友達であることを忘れないでください。
宿題
- Don Jonesの「Secrets of PowerShell Remoting」電子ブックを読んでください。