【PowerShell】-ComputerName に複数のリモートコンピューターを指定するとどうなる?

Windows PowerShell のコマンドレットには、-ComputerName というパラメタを持つものが多く存在します。 これは、WMIを使用してリモートコンピューターのクラスに接続して、情報を取得したり処理を行うためのものです。 -ComputerName には以下のようにして複数のコンピューターを指定することができます。 Get-Service -ComputerName tfdc01,tfsv01 |Select-Object name,machinename Name                                                 MachineName —-                                                 ———– adfssrv                                              tfsv01 AdtAgent                                             tfdc01 AdtAgent                                             tfsv01 ADWS                                                 tfdc01 AeLookupSvc                                          tfsv01 AeLookupSvc                                          tfdc01 ・ ・ ・ 結果は、キーとなる Name の昇順で表示されていることがわかります。 もしコンピューターごとにまとめて出力するのであれば、以下のように指定すればOkです。  Get-Service -ComputerName tfdc01,tfsv01 |Sort-Object MachineName |Select-Object MachineName,Name,Status さて、ここで疑問です。 複数のコンピューター名を指定した場合、処理はパラレルで行われるのでしょうか?それとも ForEach のように順番に処理されるのでしょうか? ためしに複数のコンピューターに対して以下のコマンドレットを実行してみます。これはリモートコンピューターに接続して3秒後に現在の日時をミリ秒まで取得し表示しています。 $List = "tfsv01","tfsv02","tfsv03","tfdc01","tfdc02","tfops","tfsql2" Invoke-Command -ComputerName $List {Start-Sleep -Seconds…


【PowerShell】PSComputerName プロパティの存在を忘れずに

Windows PowerShell を使用してリモートコンピューターに対して処理を行うには、-ComputerName パラメタを使用するのが一般的です。 例えば、リモートコンピューターのサービス一覧を取得するには、以下のように入力します。 Get-Service –ComputerName Target01 結果は以下の通りです。 Status   Name               DisplayName ——   —-               ———– Stopped  AeLookupSvc        Application Experience Stopped  ALG                Application Layer Gateway Service Running  AppHostSvc         Application Host Helper Service Running  AppIDSvc           Application Identity ・ ・ ・ 出力結果にコンピューター名を含めたい場合には、以下のように書きます。 Get-Service –ComputerName Target01 | Select-Object MachineName,Name,Status MachineName                Name                                          Status ———–                —-                                          —— Target01                AeLookupSvc                                  Stopped Target01               …


【勉強会&セミナー&集い】5/12 福岡 5/18,19 大阪 5/26 東京

春の嵐で、都内の満開の桜がすこしずつ花びらを減らしています。一方で、私の膝には痛い風が吹き付けています。 それはそうと、5月、6月とセミナーが続きますのでお知らせします。 4月18日(水)17:00 ~ 17:30 UX-TV 「開発者のための Windows PowerShell その1」 ※これだけ4月です。ご存知ない方も多いと思いますが、定期的にUSTで30分セミナーを開催しています UX-TV on USTREAM   5月12日(土) 福岡 Win.tech.q 第1回 勉強会 「System Center & PowerShell」 MS Management Day in Fukuoka (Win.tech.q 第1回勉強会) : ATND 主催の知北さん(Windows Server 2008 R2 構築・運用・管理パーフェクトガイド  著者)は System Center 2012 の全体像を、私はそれを支える PowerShell についてお話 & ハンズオン を開催します。 ハンズオンの環境はマクロソフト本社の仮想環境ラボに用意しますので、皆さんが持参された PC から RDP(Remote Desktop Gateway に対応したものが必須)で接続していただきます。…


【PowerShell】特定のプロセス起動を監視したいですか?~Register-WMIEvent コマンドレット

ぜんぜん話は違うのですが、日本の SQL Server サポートチームの Blog が気合入っています(笑)。今後ともご贔屓にしてくださいませ。評判が悪かったら元に戻すと言っていたので、4月には元に戻っている可能性があります。 さて、かなり前のことになりますが、以下の資料を SlideShare に投稿しました。このスライドでは、VBScript を使用して、WMI のイベントをリアルタイムに収集するスクリプトについて解説しています。 このスライドで解説している手法を使用すると、システム内に発生したさまざまなイベントを待ち合わせて、その次のアクションを自動的に実行することができます。 例えば、次のような処理が簡単に自作できます。 監査ログを監視して、ユーザーが作成されことを検出したらホームディレクトリを自動的に作成する 特定のサービスを監視して、停止したらメールする 特定の誰かがログオンしたらメッセージを表示する 特定のプログラムが起動したら強制的にKILLする などなど。 ※上記スライドには MOF を使用してスクリプトをサービス化する手法についても書かれています 【PowerShell 1.0 の場合】 これと同じことが PowerShell でできないだろうか….と思いつつすっかり忘れていましたが、実は初期の PowerShell の頃から同じことは実現可能でした。 (参考)Windows PowerShell 2.0 – WMI Event Monitoring 上記の参考リンクでは、以下の様なスクリプトを紹介しています(ちょっとだけ変えています)。このスクリプトでは、WMI の __InstanceCreationEvent というイベント監視用クラスを使用し、Win32_Process を監視しています。クラス名に「Creation」という言葉が入っている通り、「何らかのプロセスが起動したらコンソールにプロセス名を表示する」という動作をします。 $a = 0 $timespan = New-Object System.TimeSpan(0, 0, 1) $scope = New-Object System.Management.ManagementScope("\\.\root\cimV2") $query…

7

【PowerShell】Hyper-V 系コマンドレットを手元の Windows 7 から実行するには ~ Import-PSSession

Windows Developer Day 2012 のセッション資料締切も目前なのに、すっかり PowerShell づいています。 前回、前々回とリモーティングの話を書いてきました。 【Management】PowerShell V3.0 で向上したリモーティング機能 その1 【Management】PowerShell V3.0 で向上したリモーティング機能 その2 リモートにあるサーバーを、手元のクライアントから操作する…などというのが主な使い方になりますが、今後は PowerShell ワークフローをキックしたり、結果を取得したりといった方法にも活用することになります。 で、リモーティングに関してもう数点ご紹介しておきたい機能があります。 そのうちの1つが、Import-PSSession というコマンドレットです。 ご存知ない方も多いのではないかと。このコマンドレットは、PowerShell 2.0 でサポートされました。 PowerShell では Invoke-Command というコマンドレットにより、リモートコンピューターにコマンドを投げることができます。 ただ、コンソールで対話しているときに Invoke-Command を頻繁に入力するのって疲れるんです。面倒なのです。キーッってなるのです。 PS C:\> Invoke-Command -ComputerName Server1 -ScriptBlock {Get-VM} Enter-PSSession で PSSession に入り込んでもいいのですが、プロンプトが長くなるので、これも キーッ となるのです。 PS> Enter-PSSession -ComputerName Server1 [Server1]: PS > Get-VM じゃ、手元のマシンに Module…


【Management】PowerShell V3.0 で向上したリモーティング機能 その2

  【PowerShell 3.0 で改善されたセッションの永続化機能】 ※ここからはローカルとリモートの両方が PowerShell 3.0 を使用してることを前提としています。 前回は、PowerShell 2.0 でのリモーティング機能についてご紹介しました。 【Management】PowerShell V3.0 で向上したリモーティング機能 その1 今回は、PowerShell 3.0 によって何が改善されるのかについて解説します。この改善は、ワークフローにとって非常に重要であり、この機能なしにワークフローはありえないと言えるでしょう。 PowerShell 2.0 と PowerShell 3.0 とではセッション情報の持ち方が変わりました。 2.0 では New-PSSession を実行したクライアント側にセッション情報が保持されます。そのため、別のクライアントから当該 PSSession を使用することができません。 一方 PowerShell 3.0 では、セッションの永続性を確保するためにリモートコンピューター側に PSSession を保持します。そのため、PSSession が生きていれば、別のコンピューターから接続して処理を継続したり、ジョブの状態を確認することができるようになりました。 それに伴い、新しいコマンドレットが追加されています。 Connect-PSSession 事前に New-PSSession でセッションを作成しておくことで、いつでも本コマンドレットで再接続することができます。ただし、別のコンピューターから接続されているセッションに接続することはできません。(-Force オプションが見当たりませんでした) Disconnect-PSSession 当該コマンドレットを使用すると、接続中のセッションから切断し、セッションの Status を Disconnect にします。Disconnect のセッションには、別のコンピューターから接続することができます。 Receive-PSSession Disconnect した PSSession からコマンドやジョブの実行結果だけを受け取るためのコマンドレットです。が…私の使い方が悪いのか、現時点ではうまく使えません…。…


【Management】PowerShell V3.0 で向上したリモーティング機能 その1

現行の Windows PowerShell 2.0 では、「リモーティング」と呼ばれる機能がサポートされています。リモーティングとは、「リモートコンピュータに対する操作」のことです。 運用管理を自動化するにはリモーティングは欠かせない機能ですので、PowerShell ユーザーの方はぜひ押さえておきましょう。 【PowerShell 2.0 でサポートされているリモーティング】 PowerShell のリモーティングの使い方は、大きく 4 種類に分かれます。 コマンドレットの –ComputerName パラメタを使用する (例)Get-Service -ComputerName Server01 ただし、全てのコマンドに –ComputerName が実装されているわけではないので、以下に示すような方法を使用する必要があります。 Enter-PSSession / Exit-PSSession telnet や ssh のようにリモートコンピュータとセッションを構築し、その中でコマンドレットを実行することができます。セッションの有効期間は、Enter-PSSession 実行から Exit-PSSession 実行までです。 PS> Enter-PSSession -ComputerName Server1 [Server1]: PS > $A = 1 [Server1]: PS > $B = 2 [Server1]: PS > $C = $A…


【Management】WMF 3.0 beta – PowerShell 3.0 Hyper-V 用コマンドレット

昨日以下の記事を投稿しました。 【Management】Windows Management Framework 3.0 Beta 多くの方は PowerShell 3.0 の機能にワクワクされていると思います。私もそうです。 どんなコマンドレットが使えるかはインストールされている役割や機能に依存するのですが、手元のサーバーにインストールされているモジュールを確認するのであれば以下のように入力してみてください。 PS C:\> Get-Module -ListAvailable 中でも注目したいのが Hyper-V の管理機能です。 これまで、PowerShell から Hyper-V を使用するには以下の方法が用意されていました。 WMI の Virtualization プロバイダーを使用する ※正直、かなり難しかったです System Center Virtual Machine Managger のコマンドレットを使用する コミュニティ版コマンドレットを使用する PowerShell Management Library for Hyper-V 今回の WMF 3.0 には、なんと 162 個もの Hyper-V 用コマンドレットが用意されています。 PS C:\> (Get-Command -Module hyper-v).count 162 以下はその一覧です。 PS…


【Management】Windows Management Framework 3.0 Beta

Windows Management Framework 3.0 ベータ版がリリースされています。 Download: WMF3 Beta – Microsoft Download Center – Download Details(英語版です) 既に、Windows Server 2008 R2 や Windows 7 には WMF 2.0 相当の機能がインストールされていますが、WMF 3.0 Beta をインストールすることで、新しい Windows Server "8" と同等の管理フレームワークを実装することができます。 なお、インストールするには事前に以下をインストールしておく必要があるの注意しましょう。 以前のCTPがインストールされている場合にはアンインストール 英語版の言語パック Download: Windows Server 2008 R2 Multilingual User Interface Language Packs .NET Framework 4.0 ダウンロード詳細 Microsoft .NET Framework 4 (Web…


【広島】3月23、24 は広島でセミナー&コミュニティ

広島方面の皆さまへ 3月23日および24に、広島でセミナーを実施します。 3月23日 14:00~16:00 マイクロソフト中四国支店 セミナールーム Windows XP ではできないことがあります~Windows 7 を使用した柔軟なワークスタイルの全体像 多くの業務が Windows XP で動作している現在、Windows XP で十分という声が多く聞かれます。しかし、それは本当でしょうか?何かを見落としていませんか? 2011年3月の東日本大震災発生から数週間、 関東では交通網の混乱を起因として多くの業務遂行に支障が発生しました。 社内システムや、インターネットをはじめとするインフラが生きていたにもかかわらずです。 これが意味することは何でしょう。「出勤しないと仕事ができない」という現実です。 本セッションでは、Windows 7 Enterprise をベースとした新しいインフラがもたらす柔軟な業務スタイルに加え、タブレットPCやスマートフォンなどの個人のデバイスから業務を遂行するためのインフラ設計について解説いたします。 以下の投稿を、もっと技術寄りにまとめた内容となる予定です。 マイクロソフトの IT コンシューマライゼーション 全体像 1 年度末の金曜日!ということで、皆さん死ぬほどお忙しいと思います。 ご参加できるようでしたら、是非お申し込みください。 3月24日 10:00~18:00 マイクロソフト中四国支店 セミナールーム .NET 勉強会 / ヒーロー島 – 第27回勉強会「ハンズオンで PowerShell に触れてみよう」 終日 PowerShell 漬けです。安納による2時間の概要解説の後、牟田口さんによる3時間のハンズオンも実施されます。 休憩含めて 8時間程度で、PowerShell をマスター!できるお得な1日です。 是非ご参加くださいませ。 以上、ご案内でした。