PowerShellでOSの基本情報を取得する
今回はPowerShellでOSの基本情報を取得してみます。サーバー毎のパラメータシートやアプリケーションの設定情報をいちいちGUIで確認しながら、Excelのシートに落とし込み、設定変更するたびに履歴をつけて…なんていうくだらないことから開放されたいのです。そんなこと本来人間が管理すべきではないはずです…が、残念ながら私の知る範囲では当たり前に行われているようです。 昔もなんとか自動化してやろうとちょっと取り組んだことがあるのですが、結局取得する情報によっては難易度が高く、作りこむ時間がとれず中途半端になってしまいました。特に、OSは基本的に気にしなくていい情報、たとえばHDDアレイのHW側での構成情報などの取得が難しいです。メーカーを絞ればなんとかできるのですが、全メーカー対応するのも面倒だし…。でも、そういってるうちに仮想化の波がかなり押し寄せてきたので、OSから取れる情報だけきちんと記録しておくことに意味が以前より出てきた気がしますし、なんといってもサーバー製品がすべてPowerShellから制御できるものが出てきたのでPowerShellでの情報収集が現実的になってきた気がします。 とりあえず、取得した情報をどうやって加工するかは後回しにして、まずは、OSの基本情報の取得からいってみましょう。 どんな情報を取得しようかな まずはどんな情報が取得できるべきか考えてみます。 基本情報 ホスト名 - OSバージョン - ディスク構成 - ドメイン参加状況 - ネットワーク設定 - 役割情報 - 機能情報 - 適用済みセキュリティパッチ - インストール済みアプリケーション とりあえずこの程度でしょうか。別にPowerShellだから楽ってわけでもないものが多い気がしますが、いいでしょう。さて、うまくいくでしょうか? ホスト名 ホスト名は一番簡単にやるなら以下のコマンドで取れます。 - hostname 変数に格納するのもそのままでOKです。 - $hostname = hostname hostnameコマンドはDosコマンドですが、PowerShellではDosコマンドの結果も普通に取得することができるので、便利です。 OSバージョン OSのバージョンの取得はいろいろやり方があります。WindowsのAPIをたたくっていう手もありますが、せっかくPowerShellなのにこれはちょっとやりたくないです。 Windowsのバージョンの取得 environmentクラスを使ってしまうのが簡単でしょうか。environmentクラスは.net frameworkのクラスですが、こうやって.net frameworkに簡単にアクセスできるのもPowerShellの素敵なところです。 1 : P S C : \ > [ E n v i r o n m e n t ] : : O S V e r s i o n 2 : 3 : P l a t f o r m S e r v i c e P a c k V e r s i o n V e r s i o n S t r i n g 4 : 5 : W i n 3 2 N T 6 . 1 . 7 6 0 0 . 0 M i c r o s o f t W i n d o w s N T 6 . 1 . 7 . . . ディスク構成 ディスク構成も取得方法は色々ありますが、ここではWMIオブジェクトを呼び出してみます。こうやってWMIへのアクセスも一発でいけるのが素晴らしいですね。 ...