オタク学校はPowerShellでリモート処理を使用することを学ぶ
PowerShellが提供する最も優れた機能の1つは、リモートからサーバーを管理する機能です。それもあなたがそれらの束を同時に管理することを可能にします.
シリーズの前の記事を必ず読んでください。
- PowerShellを使用してWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用する方法
- PowerShellでオブジェクトを使用する方法を学ぶ
- PowerShellでの書式設定、フィルタリング、および比較の学習
そして、シリーズの残りの部分を一週間中お楽しみに.
リモーティングとは?
サーバーの一括管理は面倒なことがあります。以前に50人のWebサーバーでIIS構成を変更しなければならなかった場合は、私が何を意味しているかがわかります。これらは、PowerShell Remotingとその言語のスクリプト機能が助けになる可能性がある種類の状況です。 HTTPまたはより安全なHTTPSを使用して、PowerShellリモート処理を使用すると、ネットワーク上のリモートマシンにコマンドを送信できます。その後、マシンはコマンドを実行して出力をあなたに送り返します。そしてそれはあなたのスクリーンに表示されます。.
テクニカルになろう
PowerShell Remotingの中心にあるのは、単一のWindowsサービス、Windowsリモート管理、またはWinRMサービスです。 WinRMを使用すると、1つ以上のセッション構成(エンドポイントとも呼ばれます)を設定できます。これらは基本的に、リモートPowerShellインスタンスに接続する人に提供したいエクスペリエンスに関する情報を含むファイルです。具体的には、セッション構成ファイルを使用して、インスタンスに接続できるユーザーとできないユーザー、それらが実行できるコマンドレットとスクリプト、およびセッションを実行する必要があるセキュリティコンテキストを定義できます。 WinRMサービスを使用して、受信したPowerShell要求を待機する「リスナー」も設定します。これらの「リスナー」はHTTPまたはHTTPSのいずれかであり、マシン上の単一のIPアドレスにバインドできます。別のマシンへのPowerShell接続を開くと(技術的には、これはHTTPに基づいたWS-MANプロトコルを使用して行われます)、接続はこれらの「リスナー」の1つにバインドされます。 「リスナー」は、適切なセッション構成ファイルに関連付けられているアプリケーションにトラフィックを送信します。アプリケーション(通常はPowerShellですが、必要に応じて他のホスティングアプリケーションを使用することもできます)は、そのコマンドを実行し、その結果をネットワークを介して "リスナ"を介してフィードバックし、コンピュータに返します.
どうするか教えて
あなたがしなければならない最初の事はあなたが接続したいマシン上でRemotingを有効にすることです。これは、次のコマンドを実行することによって実行できます。
PSRリモーティングを有効にする
その後、すべてのプロンプトに「はい」と答える必要があります。 Enable-PSRemotingを実行すると、PCにいくつかの変更が加えられます。
- WinRMサービスが起動します.
- WinRMサービスが手動起動モードから自動に変わります。.
- すべてのネットワークカードにバインドされているHTTPリスナーを作成します。.
- また、WS-MANプロトコルに対するインバウンドファイアウォールの例外も発生します。.
- いくつかのデフォルトセッション設定が作成されます
Windows 7を実行していて、ネットワークカードの場所がパブリックに設定されている場合、PowerShellリモート処理を有効にすると失敗します。解決するには、単に自宅または職場のネットワークの場所に切り替えます。あるいは、以下を使用してネットワークチェックをスキップすることもできます。
Enable-PSRemoting -SkipNetworkProfileCheck
ただし、ネットワークの場所を変更することをお勧めします。.
PowerShellを使用して他のマシンに接続する方法は2つあります。 1対1の方法があります。これはSSHを使用する方法と非常によく似ていますが、1対多の方法があります。.
PowerShellセッションを使用する
PowerShellを使用してリモートマシンに接続する最初の方法は、PowerShellセッションと呼ばれるものを使用することです。セッションを開始するだけで、リモートマシン上でインタラクティブな方法でコマンドを自分のマシン上で実行するのと同じように実行できます。セッションを開くには、単に次のように入力します。
Enter-PSSession -ComputerName“ Darlah”
プロンプトには、コマンドレットを実行しているコンピューターを示すプレフィックスが表示されます。.
ここから、リモートマシンに座っているかのようにプロンプトを本当に扱うことができます。たとえば、C:\ドライブ上のすべてのファイルを見たい場合は、次のようにします。
Get-ChildItem -Path C:\
あなたがLinuxのバックグラウンドから来ているなら、あなたはSSHに代わるPowerShellの代替手段としてこの1対1のリモート処理方法を使うことを考えることができます。.
Invoke-Commandを使用する
リモートマシンでPowerShellを使用する2つ目の方法は、Invoke-Commandを使用することです。 Invoke-Commandを使用する利点は、複数のマシンで同じコマンドを同時に実行できることです。ご想像のとおり、これはサーバーからイベントログを収集するようなことをしたいときに特に便利です。 Invoke-Commandは次の構文に従います。
起動コマンド-ComputerName Darlah、ローカルホスト-ScriptBlock Get-EventLogアプリケーション-Newest 2
コマンドはすべてのマシンで並列に実行されるため、どのPCからの結果であるかを確認するための何らかの方法が必要になります。あなたはPSComputerNameプロパティを見てこれを行うことができます.
Invoke-Commandを使用すると、Pipelineに予期したオブジェクトがなくなります。 PowerShellがリモートマシンから自分のマシンに情報を取り戻すには、リモートマシンで実行したコマンドが出力したオブジェクトを表すための何らかの方法が必要です。最近では、階層データ構造を表現するために選択された方法はXMLを使用することです。つまりInvoke-Commandを使用してコマンドを発行すると、結果は最初にXMLにシリアライズされてからマシンに返送されます。それらがあなたのマシンに戻ると、それらはオブジェクトにデシリアライズされます。ここでの問題は、それらが逆シリアル化されるとき、ToString()メソッドを除くすべてのメソッドが、オブジェクトがそれから取り除かれることです。.
注:この規則にはいくつかの例外があります。たとえば、整数のようなほとんどのプリミティブ型は、含まれているメソッドを使用して逆シリアル化できます。いくつかのメソッドを逆シリアル化されたオブジェクトに追加できるRehydrationというプロセスもあります。 Get-Memberはあなたの友達です。.
宿題
- Don JonesによるPowerShell Remotingの電子ブックの秘密を読む.