今回は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なのにこれはちょっとやりたくないです。

environmentクラスを使ってしまうのが簡単でしょうか。environmentクラスは.net frameworkのクラスですが、こうやって.net frameworkに簡単にアクセスできるのもPowerShellの素敵なところです。

1:PSC:\>[Environment]::OSVersion
2: 
3:PlatformServicePackVersionVersionString
4:
5:Win32NT6.1.7600.0MicrosoftWindowsNT6.1.7...

ディスク構成

ディスク構成も取得方法は色々ありますが、ここではWMIオブジェクトを呼び出してみます。こうやってWMIへのアクセスも一発でいけるのが素晴らしいですね。

1:PSC:\>Get-WmiObject-ClassWin32_DiskDrive
2: 
3: 
4:Partitions:4
5:DeviceID:\PHYSICALDRIVE0
6:Model:HitachiHDS721010CLA332ATADevice
7:Size:1000202764288
8:Caption:HitachiHDS721010CLA332ATADevice
9: 
10:Partitions:2
11:DeviceID:\PHYSICALDRIVE1
12:Model:I-ODATAHDCN-UUSBDevice
13:Size:640132416000
14:Caption:I-ODATAHDCN-UUSBDevice

ドメイン参加状況

ドメイン参加状況はWMIのWin32_ComputerSystemオブジェクトで確認できます。

    - $domain = (Get-WMIObject Win32_ComputerSystem).PartOfDomain 

    - if($domain) 

    - { 

    -     Write-Output "joined to Domain." 

    - } else { 

    -     Write-Output "not joined to Domain(WORKGROUP)." 

    - } 

ついでに他のプロパティも出力しておきましょうか。

1:PSC:\>Get-WmiObjectWin32_ComputerSystem
2: 
3: 
4: 
5:Domain:WORKGROUP
6:Manufacturer:ThirdWaveCorporation
7:Model:PrimeSeries
8:Name:WINDOWS7-PC
9:PrimaryOwnerName:windows7
10:TotalPhysicalMemory:1878188032

ネットワーク設定

ネットワーク設定に関してはWIMのWin32_NetworkAdapterConfigurationオブジェクトが使えます。

    - Get-WmiObject Win32_NetworkAdapterConfiguration 

ですが、出力としては使い慣れたipconfig /allを使ってしまうのがよさそうな気がします。

1:ipconfig/all

役割情報、機能情報

役割情報と機能情報は「サーバーマネージャーモジュール」を読み込むことでPowerShellから簡単に扱えるようになります。やっとPowerShellの本領発揮です。

1:PSC:\>Import-ModuleServerManager
2:PSC:\>Get-WindowsFeature
3: 
4:DisplayNameName
5:
6:[]ActiveDirectoryRightsManagementサービスADRMS
7:[]ActiveDirectoryRightsManagementServerADRMS-Server
8:[]IDフェデレーションサポートADRMS-Identity
9:[]ActiveDirectoryドメインサービスAD-Domain-Services
10:[]ActiveDirectoryドメインコントローラーADDS-Domain-Controller
11:[]UNIX用ID管理ADDS-Identity-Mgmt
12:[]NISサーバーADDS-NIS
13:[]パスワード同期ADDS-Password-Sync
14:[]管理ツールADDS-IDMU-Tools
15:[]ActiveDirectoryフェデレーションサービスAD-Federation-Services
16:[]フェデレーションサービスADFS-Federation
17:[]フェデレーションサービスプロキシADFS-Proxy
18:[]ADFSWebエージェントADFS-Web-Agents
19:[]要求に対応するエージェントADFS-Claims
20:[]WindowsトークンベースのエージェントADFS-Windows-Token
21:[]ActiveDirectoryライトウェイトディレクトリサ...ADLDS
22:[]ActiveDirectory証明書サービスAD-Certificate
23:[]証明機関ADCS-Cert-Authority
24:[]証明機関Web登録ADCS-Web-Enrollment
25:[]オンラインレスポンダーADCS-Online-Cert
26:[]ネットワークデバイス登録サービスADCS-Device-Enrollment
27:[]証明書の登録WebサービスADCS-Enroll-Web-Svc
28:[]証明書の登録ポリシーWebサービスADCS-Enroll-Web-Pol
29:[]DHCPサーバーDHCP
30:[]DNSサーバーDNS
31:[]FAXサーバーFax
32:[X]Hyper-VHyper-V
33:[]Webサーバー(IIS)Web-Server
34:[]WebサーバーWeb-WebServer
35:[]HTTP基本機能Web-Common-Http
36:[]静的なコンテンツWeb-Static-Content
37:[]既定のドキュメントWeb-Default-Doc
38:[]ディレクトリの参照Web-Dir-Browsing
39:[]HTTPエラーWeb-Http-Errors
40:[]HTTPリダイレクションWeb-Http-Redirect
41:[]WebDAV発行Web-DAV-Publishing
42:[]アプリケーション開発Web-App-Dev
43:[]ASP.NETWeb-Asp-Net
44:[].NET拡張性Web-Net-Ext
45:[]ASPWeb-ASP
46:[]CGIWeb-CGI
47:[]ISAPI拡張Web-ISAPI-Ext
48:[]ISAPIフィルターWeb-ISAPI-Filter
49:[]サーバー側インクルードWeb-Includes
50:[]状態と診断Web-Health
51:[]HTTPログWeb-Http-Logging
52:[]ログツールWeb-Log-Libraries
53:[]要求の監視Web-Request-Monitor
54:[]トレースWeb-Http-Tracing
55:[]カスタムログWeb-Custom-Logging
56:[]ODBCログWeb-ODBC-Logging
57:[]セキュリティWeb-Security
58:[]基本認証Web-Basic-Auth
59:[]Windows認証Web-Windows-Auth
60:[]ダイジェスト認証Web-Digest-Auth
61:[]クライアント証明書のマッピング認証Web-Client-Auth
62:[]IISクライアント証明書のマッピング認証Web-Cert-Auth
63:[]URL承認Web-Url-Auth
64:[]要求フィルターWeb-Filtering
65:[]IPおよびドメインの制限Web-IP-Security
66:[]パフォーマンスWeb-Performance
67:[]静的なコンテンツの圧縮Web-Stat-Compression
68:[]動的なコンテンツの圧縮Web-Dyn-Compression
69:[]管理ツールWeb-Mgmt-Tools
70:[]IIS管理コンソールWeb-Mgmt-Console
71:[]IIS管理スクリプトおよびツールWeb-Scripting-Tools
72:[]管理サービスWeb-Mgmt-Service
73:[]IIS6管理互換Web-Mgmt-Compat
74:[]IIS6メタベース互換Web-Metabase
75:[]IIS6WMI互換Web-WMI
76:[]IIS6スクリプトツールWeb-Lgcy-Scripting
77:[]IIS6管理コンソールWeb-Lgcy-Mgmt-Console
78:[]FTPサーバーWeb-Ftp-Server
79:[]FTPサービスWeb-Ftp-Service
80:[]FTP拡張Web-Ftp-Ext
81:[]IISホスト可能なWebコアWeb-WHC
82:[]WindowsServerUpdateServicesOOB-WSUS
83:[]Windows展開サービスWDS
84:[]展開サーバーWDS-Deployment
85:[]トランスポートサーバーWDS-Transport
86:[]アプリケーションサーバーApplication-Server
87:[].NETFramework3.5.1AS-NET-Framework
88:[]Webサーバー(IIS)サポートAS-Web-Support
89:[]COM+ネットワークアクセスAS-Ent-Services
90:[]TCPポート共有AS-TCP-Port-Sharing
91:[]Windowsプロセスアクティブ化サービスサポートAS-WAS-Support
92:[]HTTPアクティブ化AS-HTTP-Activation
93:[]メッセージキューのアクティブ化AS-MSMQ-Activation
94:[]TCPのアクティブ化AS-TCP-Activation
95:[]名前付きパイプのアクティブ化AS-Named-Pipes
96:[]分散トランザクションAS-Dist-Transaction
97:[]受信リモートトランザクションAS-Incoming-Trans
98:[]発信リモートトランザクションAS-Outgoing-Trans
99:[]WS-AtomicTransactionsAS-WS-Atomic
100:[X]ネットワークポリシーとアクセスサービスNPAS
101:[X]ネットワークポリシーサーバーNPAS-Policy-Server
102:[X]ルーティングとリモートアクセスサービスNPAS-RRAS-Services
103:[X]リモートアクセスサービスNPAS-RRAS
104:[X]ルーティングNPAS-Routing
105:[]正常性登録機関NPAS-Health
106:[]HCAP(HostCredentialAuthorizationProtocol)NPAS-Host-Cred
107:[X]ファイルサービスFile-Services
108:[X]ファイルサーバーFS-FileServer
109:[]分散ファイルシステムFS-DFS
110:[]DFS名前空間FS-DFS-Namespace
111:[]DFSレプリケーションFS-DFS-Replication
112:[]ファイルサーバーリソースマネージャーFS-Resource-Manager
113:[]NFS(NetworkFileSystem)用サービスFS-NFS-Services
114:[]WindowsSearchサービスFS-Search-Service
115:[]WindowsServer2003ファイルサービスFS-Win2003-Services
116:[]インデックスサービスFS-Indexing-Service
117:[]ネットワークファイル用BranchCacheFS-BranchCache
118:[]リモートデスクトップサービスRemote-Desktop-Services
119:[]リモートデスクトップセッションホストRDS-RD-Server
120:[]リモートデスクトップ仮想化ホストRDS-Virtualization
121:[]リモートデスクトップライセンスRDS-Licensing
122:[]リモートデスクトップ接続ブローカーRDS-Connection-Broker
123:[]リモートデスクトップゲートウェイRDS-Gateway
124:[]リモートデスクトップWebアクセスRDS-Web-Access
125:[]印刷とドキュメントサービスPrint-Services
126:[]プリントサーバーPrint-Server
127:[]LPDサービスPrint-LPD-Service
128:[]インターネット印刷Print-Internet
129:[]分散スキャンサーバーPrint-Scan-Server
130:[X].NETFramework3.5.1の機能NET-Framework
131:[X].NETFramework3.5.1NET-Framework-Core
132:[]WCFアクティブ化NET-Win-CFAC
133:[]HTTPアクティブ化NET-HTTP-Activation
134:[]非HTTPアクティブ化NET-Non-HTTP-Activ
135:[]BitLockerドライブ暗号化BitLocker
136:[]BranchCacheBranchCache
137:[]DirectAccess管理コンソールDAMC
138:[]HTTPプロキシを経由したRPCRPC-over-HTTP-Proxy
139:[]LPRポートモニターLPR-Port-Monitor
140:[]RDC(RemoteDifferentialCompression)RDC
141:[]SAN用記憶域マネージャーStorage-Mgr-SANS
142:[]SimpleTCP/IPServicesSimple-TCPIP
143:[]SMTPサーバーSMTP-Server
144:[]SNMPサービスSNMP-Services
145:[]SNMPサービスSNMP-Service
146:[]WMISNMPプロバイダーSNMP-WMI-Provider
147:[]TelnetクライアントTelnet-Client
148:[]TelnetサーバーTelnet-Server
149:[]TFTPクライアントTFTP-Client
150:[]UNIXベースアプリケーション用サブシステムSubsystem-UNIX-Apps
151:[]WindowsInternalDatabaseWindows-Internal-DB
152:[]WindowsPowerShellIntegratedScriptingEnvironm...PowerShell-ISE
153:[X]WindowsServerバックアップの機能Backup-Features
154:[X]WindowsServerバックアップBackup
155:[]コマンドラインツールBackup-Tools
156:[]WindowsServer移行ツールMigration
157:[]WindowsTIFFIFilterTIFF-IFilter
158:[]WindowsシステムリソースマネージャーWSRM
159:[]Windowsプロセスアクティブ化サービスWAS
160:[]プロセスモデルWAS-Process-Model
161:[].NET環境WAS-NET-Environment
162:[]構成APIWAS-Config-APIs
163:[]Windows生体認証フレームワークBiometric-Framework
164:[]WinRMIIS拡張機能WinRM-IIS-Ext
165:[]WINSサーバーWINS-Server
166:[]XPSビューアーXPS-Viewer
167:[]インクと手書きサービスInk-Handwriting
168:[]インクサポートIH-Ink-Support
169:[]手書き認識IH-Handwriting
170:[]インターネット印刷クライアントInternet-Print-Client
171:[]インターネット記憶域ネームサーバーISNS
172:[]グループポリシーの管理GPMC
173:[]デスクトップエクスペリエンスDesktop-Experience
174:[]ネットワーク負荷分散NLB
175:[X]バックグラウンドインテリジェント転送サービス(B...BITS
176:[X]コンパクトサーバーBITS-Compact-Server
177:[]IISサーバー拡張機能BITS-IIS-Ext
178:[]ピア名解決プロトコルPNRP
179:[]フェールオーバークラスタリングFailover-Clustering
180:[]マルチパスI/OMultipath-IO
181:[]メッセージキューMSMQ
182:[]メッセージキューサービスMSMQ-Services
183:[]メッセージキューサーバーMSMQ-Server
184:[]ディレクトリサービス統合MSMQ-Directory
185:[]メッセージキュートリガーMSMQ-Triggers
186:[]HTTPサポートMSMQ-HTTP-Support
187:[]マルチキャストサポートMSMQ-Multicasting
188:[]ルーティングサービスMSMQ-Routing
189:[]メッセージキューDCOMプロキシMSMQ-DCOM
190:[]リモートアシスタンスRemote-Assistance
191:[X]リモートサーバー管理ツールRSAT
192:[X]役割管理ツールRSAT-Role-Tools
193:[]ActiveDirectory証明書サービスツールRSAT-ADCS
194:[]証明機関ツールRSAT-ADCS-Mgmt
195:[]オンラインレスポンダーツールRSAT-Online-Responder
196:[X]ADDSおよびADLDSツールRSAT-AD-Tools
197:[]ADDSツールRSAT-ADDS
198:[]ADDSスナップインおよびコマンド...RSAT-ADDS-Tools
199:[]ActiveDirectory管理センターRSAT-AD-AdminCenter
200:[]NISサーバーツールRSAT-SNIS
201:[]ADLDSスナップインおよびコマンドラ...RSAT-ADLDS
202:[X]WindowsPowerShellのActiveDirecto...RSAT-AD-PowerShell
203:[]ActiveDirectoryRightsManagementサー...RSAT-RMS
204:[]DHCPサーバーツールRSAT-DHCP
205:[]DNSサーバーツールRSAT-DNS-Server
206:[]FAXサーバーツールRSAT-Fax
207:[]ファイルサービスツールRSAT-File-Services
208:[]分散ファイルシステムツールRSAT-DFS-Mgmt-Con
209:[]ファイルサーバーリソースマネージ...RSAT-FSRM-Mgmt
210:[]NFS(NetworkFileSystem)用サービス...RSAT-NFS-Admin
211:[X]Hyper-VツールRSAT-Hyper-V
212:[]ネットワークポリシーとアクセスサービス...RSAT-NPAS
213:[]印刷とドキュメントサービスツールRSAT-Print-Services
214:[]リモートデスクトップサービスツールRSAT-RDS
215:[]リモートデスクトップセッションホ...RSAT-RDS-RemoteApp
216:[]リモートデスクトップゲートウェイRSAT-RDS-Gateway
217:[]リモートデスクトップライセンスツールRSAT-RDS-Licensing
218:[]リモートデスクトップ接続ブローカーRSAT-RDS-Conn-Broker
219:[]Webサーバー(IIS)ツールRSAT-Web-Server
220:[]Windows展開サービスツールRSAT-WDS
221:[]機能管理ツールRSAT-Feature-Tools
222:[]BitLockerドライブ暗号化管理ユーティリティRSAT-BitLocker
223:[]BitLockerドライブ暗号化ツールRSAT-Bitlocker-DriveEnc
224:[]BitLocker回復パスワードビューアーRSAT-Bitlocker-RecPwd
225:[]BITSサーバー拡張ツールRSAT-Bits-Server
226:[]フェールオーバークラスタリングツールRSAT-Clustering
227:[]ネットワーク負荷分散ツールRSAT-NLB
228:[]SMTPサーバーツールRSAT-SMTP
229:[]WINSサーバーツールRSAT-WINS
230:[]ワイヤレスLANサービスWireless-Networking
231:[]高品質なWindowsオーディオビデオエクスペリエンスqWave
232:[]接続マネージャー管理キットCMAK

これは素晴らしいですね。これがやりたかったんです、昔から。ぜひマイクロソフトさんにはこの手のものを充実させていただきたい!

適用済みセキュリティパッチ

WMIで取れます。

1:PSC:\>Get-WMIObjectWin32_QuickFixEngineering
2: 
3:SourceDescriptionHotFixIDInstalledByInstalledOn
4:
5:WINDOWS7-PCUpdateKB971033NTAUTHORITY\SYSTEM2010/06/020:00:00
6:WINDOWS7-PCSecurityUpdateKB2079403NTAUTHORITY\SYSTEM2010/08/140:00:00
7:WINDOWS7-PCHotfixKB2120976windows7-PC\windows72010/11/200:00:00
8:WINDOWS7-PCUpdateKB2158563NTAUTHORITY\SYSTEM2010/09/290:00:00
9:WINDOWS7-PCSecurityUpdateKB2160329NTAUTHORITY\SYSTEM2010/08/140:00:00
10:WINDOWS7-PCSecurityUpdateKB2183461NTAUTHORITY\SYSTEM2010/08/140:00:00
11:WINDOWS7-PCSecurityUpdateKB2207566NTAUTHORITY\SYSTEM2010/10/130:00:00
12:WINDOWS7-PCUpdateKB2249857NTAUTHORITY\SYSTEM2010/10/280:00:00
13:WINDOWS7-PCUpdateKB2272691NTAUTHORITY\SYSTEM2010/08/250:00:00
14:WINDOWS7-PCSecurityUpdateKB2281679NTAUTHORITY\SYSTEM2010/10/130:00:00
15:WINDOWS7-PCUpdateKB2284742NTAUTHORITY\SYSTEM2010/10/270:00:00
16:WINDOWS7-PCSecurityUpdateKB2286198NTAUTHORITY\SYSTEM2010/08/030:00:00
17:WINDOWS7-PCSecurityUpdateKB2296011NTAUTHORITY\SYSTEM2010/10/130:00:00
18:WINDOWS7-PCSecurityUpdateKB2296199NTAUTHORITY\SYSTEM2010/12/190:00:00
19:WINDOWS7-PCHotfixKB2300535windows7-PC\windows72010/11/200:00:00
20:WINDOWS7-PCSecurityUpdateKB2305420NTAUTHORITY\SYSTEM2010/12/190:00:00
21:WINDOWS7-PCUpdateKB2345886NTAUTHORITY\SYSTEM2010/10/130:00:00
22:WINDOWS7-PCSecurityUpdateKB2347290NTAUTHORITY\SYSTEM2010/09/150:00:00
23:WINDOWS7-PCSecurityUpdateKB2360131NTAUTHORITY\SYSTEM2010/10/130:00:00
24:WINDOWS7-PCUpdateKB2362765NTAUTHORITY\SYSTEM2010/09/290:00:00
25:WINDOWS7-PCSecurityUpdateKB2378111NTAUTHORITY\SYSTEM2010/10/130:00:00
26:WINDOWS7-PCSecurityUpdateKB2385678NTAUTHORITY\SYSTEM2010/12/190:00:00
27:WINDOWS7-PCSecurityUpdateKB2387149NTAUTHORITY\SYSTEM2010/10/130:00:00
28:WINDOWS7-PCHotfixKB2387530NTAUTHORITY\SYSTEM2011/02/230:00:00
29:WINDOWS7-PCUpdateKB2388210NTAUTHORITY\SYSTEM2010/10/270:00:00
30:WINDOWS7-PCSecurityUpdateKB2393802NTAUTHORITY\SYSTEM2011/02/110:00:00
31:WINDOWS7-PCUpdateKB2398632NTAUTHORITY\SYSTEM2010/09/150:00:00
32:WINDOWS7-PCSecurityUpdateKB2416400NTAUTHORITY\SYSTEM2010/12/190:00:00
33:WINDOWS7-PCSecurityUpdateKB2416471NTAUTHORITY\SYSTEM2010/10/070:00:00
34:WINDOWS7-PCSecurityUpdateKB2419640NTAUTHORITY\SYSTEM2011/01/140:00:00
35:WINDOWS7-PCSecurityUpdateKB2423089NTAUTHORITY\SYSTEM2010/12/190:00:00
36:WINDOWS7-PCSecurityUpdateKB2425227NTAUTHORITY\SYSTEM2011/02/110:00:00
37:WINDOWS7-PCSecurityUpdateKB2436673NTAUTHORITY\SYSTEM2010/12/190:00:00
38:WINDOWS7-PCSecurityUpdateKB2442962NTAUTHORITY\SYSTEM2010/12/190:00:00
39:WINDOWS7-PCUpdateKB2443685NTAUTHORITY\SYSTEM2010/12/190:00:00
40:WINDOWS7-PCSecurityUpdateKB2446709NTAUTHORITY\SYSTEM2011/04/160:00:00
41:WINDOWS7-PCUpdateKB2447568NTAUTHORITY\SYSTEM2010/11/240:00:00
42:WINDOWS7-PCUpdateKB2454826NTAUTHORITY\SYSTEM2011/02/110:00:00
43:WINDOWS7-PCUpdateKB2467023NTAUTHORITY\SYSTEM2011/02/110:00:00
44:WINDOWS7-PCUpdateKB2467659NTAUTHORITY\SYSTEM2010/12/190:00:00
45:WINDOWS7-PCSecurityUpdateKB2475792NTAUTHORITY\SYSTEM2011/02/110:00:00
46:WINDOWS7-PCSecurityUpdateKB2476490NTAUTHORITY\SYSTEM2011/06/210:00:00
47:WINDOWS7-PCSecurityUpdateKB2478661NTAUTHORITY\SYSTEM2011/06/210:00:00
48:WINDOWS7-PCSecurityUpdateKB2479628NTAUTHORITY\SYSTEM2011/02/110:00:00
49:WINDOWS7-PCSecurityUpdateKB2479943NTAUTHORITY\SYSTEM2011/03/090:00:00
50:WINDOWS7-PCSecurityUpdateKB2482017NTAUTHORITY\SYSTEM2011/02/110:00:00
51:WINDOWS7-PCSecurityUpdateKB2483614NTAUTHORITY\SYSTEM2011/03/090:00:00
52:WINDOWS7-PCUpdateKB2484033NTAUTHORITY\SYSTEM2011/02/230:00:00
53:WINDOWS7-PCSecurityUpdateKB2485376NTAUTHORITY\SYSTEM2011/02/110:00:00
54:WINDOWS7-PCUpdateKB2488113NTAUTHORITY\SYSTEM2011/06/210:00:00
55:WINDOWS7-PCSecurityUpdateKB2489256NTAUTHORITY\SYSTEM2011/10/150:00:00
56:WINDOWS7-PCSecurityUpdateKB2491683NTAUTHORITY\SYSTEM2011/04/160:00:00
57:WINDOWS7-PCUpdateKB2492386NTAUTHORITY\SYSTEM2011/08/210:00:00
58:WINDOWS7-PCSecurityUpdateKB2497640NTAUTHORITY\SYSTEM2011/04/160:00:00
59:WINDOWS7-PCUpdateKB2502285NTAUTHORITY\SYSTEM2011/02/110:00:00
60:WINDOWS7-PCSecurityUpdateKB2503658NTAUTHORITY\SYSTEM2011/04/160:00:00
61:WINDOWS7-PCSecurityUpdateKB2503665NTAUTHORITY\SYSTEM2011/06/210:00:00
62:WINDOWS7-PCUpdateKB2505438NTAUTHORITY\SYSTEM2011/03/110:00:00
63:WINDOWS7-PCSecurityUpdateKB2506212NTAUTHORITY\SYSTEM2011/04/160:00:00
64:WINDOWS7-PCSecurityUpdateKB2506223NTAUTHORITY\SYSTEM2011/04/160:00:00
65:WINDOWS7-PCUpdateKB2506928NTAUTHORITY\SYSTEM2011/08/210:00:00
66:WINDOWS7-PCSecurityUpdateKB2507618NTAUTHORITY\SYSTEM2011/04/160:00:00
67:WINDOWS7-PCSecurityUpdateKB2507938NTAUTHORITY\SYSTEM2011/07/140:00:00
68:WINDOWS7-PCSecurityUpdateKB2508272NTAUTHORITY\SYSTEM2011/04/160:00:00
69:WINDOWS7-PCSecurityUpdateKB2508429NTAUTHORITY\SYSTEM2011/04/160:00:00
70:WINDOWS7-PCSecurityUpdateKB2509553NTAUTHORITY\SYSTEM2011/04/160:00:00
71:WINDOWS7-PCSecurityUpdateKB2510531NTAUTHORITY\SYSTEM2011/04/160:00:00
72:WINDOWS7-PCUpdateKB2511250NTAUTHORITY\SYSTEM2011/05/180:00:00
73:WINDOWS7-PCSecurityUpdateKB2511455NTAUTHORITY\SYSTEM2011/04/160:00:00
74:WINDOWS7-PCUpdateKB2515325NTAUTHORITY\SYSTEM2011/05/180:00:00
75:WINDOWS7-PCSecurityUpdateKB2518867NTAUTHORITY\SYSTEM2011/06/210:00:00
76:WINDOWS7-PCUpdateKB2522422NTAUTHORITY\SYSTEM2011/05/180:00:00
77:WINDOWS7-PCSecurityUpdateKB2524375NTAUTHORITY\SYSTEM2011/03/280:00:00
78:WINDOWS7-PCUpdateKB2529073NTAUTHORITY\SYSTEM2011/07/140:00:00
79:WINDOWS7-PCSecurityUpdateKB2530548NTAUTHORITY\SYSTEM2011/06/210:00:00
80:WINDOWS7-PCSecurityUpdateKB2532531NTAUTHORITY\SYSTEM2011/07/140:00:00
81:WINDOWS7-PCUpdateKB2533552NTAUTHORITY\SYSTEM2011/05/220:00:00
82:WINDOWS7-PCUpdateKB2533623NTAUTHORITY\SYSTEM2011/07/140:00:00
83:WINDOWS7-PCUpdateKB2534366NTAUTHORITY\SYSTEM2011/05/140:00:00
84:WINDOWS7-PCSecurityUpdateKB2535512NTAUTHORITY\SYSTEM2011/06/210:00:00
85:WINDOWS7-PCSecurityUpdateKB2536275NTAUTHORITY\SYSTEM2011/06/210:00:00
86:WINDOWS7-PCSecurityUpdateKB2536276NTAUTHORITY\SYSTEM2011/08/150:00:00
87:WINDOWS7-PCSecurityUpdateKB2539634NTAUTHORITY\SYSTEM2011/08/120:00:00
88:WINDOWS7-PCUpdateKB2541014NTAUTHORITY\SYSTEM2011/05/270:00:00
89:WINDOWS7-PCSecurityUpdateKB2544521NTAUTHORITY\SYSTEM2011/06/210:00:00
90:WINDOWS7-PCSecurityUpdateKB2544893NTAUTHORITY\SYSTEM2011/06/210:00:00
91:WINDOWS7-PCUpdateKB2545698NTAUTHORITY\SYSTEM2011/07/010:00:00
92:WINDOWS7-PCUpdateKB2547666NTAUTHORITY\SYSTEM2011/07/010:00:00
93:WINDOWS7-PCUpdateKB2552343NTAUTHORITY\SYSTEM2011/07/010:00:00
94:WINDOWS7-PCSecurityUpdateKB2555917NTAUTHORITY\SYSTEM2011/07/140:00:00
95:WINDOWS7-PCSecurityUpdateKB2556532NTAUTHORITY\SYSTEM2011/08/150:00:00
96:WINDOWS7-PCSecurityUpdateKB2559049NTAUTHORITY\SYSTEM2011/08/150:00:00
97:WINDOWS7-PCSecurityUpdateKB2560656NTAUTHORITY\SYSTEM2011/08/120:00:00
98:WINDOWS7-PCSecurityUpdateKB2562937NTAUTHORITY\SYSTEM2011/08/150:00:00
99:WINDOWS7-PCUpdateKB2563227NTAUTHORITY\SYSTEM2011/08/150:00:00
100:WINDOWS7-PCSecurityUpdateKB2563894NTAUTHORITY\SYSTEM2011/08/150:00:00
101:WINDOWS7-PCSecurityUpdateKB2564958NTAUTHORITY\SYSTEM2011/10/150:00:00
102:WINDOWS7-PCSecurityUpdateKB2567053NTAUTHORITY\SYSTEM2011/10/150:00:00
103:WINDOWS7-PCSecurityUpdateKB2567680NTAUTHORITY\SYSTEM2011/08/150:00:00
104:WINDOWS7-PCUpdateKB2570791NTAUTHORITY\SYSTEM2011/08/250:00:00
105:WINDOWS7-PCSecurityUpdateKB2570947NTAUTHORITY\SYSTEM2011/09/180:00:00
106:WINDOWS7-PCSecurityUpdateKB2572076NTAUTHORITY\SYSTEM2011/10/150:00:00
107:WINDOWS7-PCSecurityUpdateKB2579686NTAUTHORITY\SYSTEM2011/10/150:00:00
108:WINDOWS7-PCSecurityUpdateKB2584146NTAUTHORITY\SYSTEM2012/01/130:00:00
109:WINDOWS7-PCSecurityUpdateKB2585542NTAUTHORITY\SYSTEM2012/01/140:00:00
110:WINDOWS7-PCSecurityUpdateKB2586448NTAUTHORITY\SYSTEM2011/10/150:00:00
111:WINDOWS7-PCSecurityUpdateKB2588516NTAUTHORITY\SYSTEM2011/11/230:00:00
112:WINDOWS7-PCUpdateKB2598845NTAUTHORITY\SYSTEM2011/10/260:00:00
113:WINDOWS7-PCUpdateKB2607712NTAUTHORITY\SYSTEM2011/09/060:00:00
114:WINDOWS7-PCUpdateKB2616676NTAUTHORITY\SYSTEM2011/09/180:00:00
115:WINDOWS7-PCSecurityUpdateKB2617657NTAUTHORITY\SYSTEM2011/11/230:00:00
116:WINDOWS7-PCSecurityUpdateKB2618444NTAUTHORITY\SYSTEM2012/01/120:00:00
117:WINDOWS7-PCSecurityUpdateKB2618451NTAUTHORITY\SYSTEM2012/01/120:00:00
118:WINDOWS7-PCSecurityUpdateKB2619339NTAUTHORITY\SYSTEM2012/01/120:00:00
119:WINDOWS7-PCSecurityUpdateKB2620704NTAUTHORITY\SYSTEM2011/11/230:00:00
120:WINDOWS7-PCSecurityUpdateKB2620712NTAUTHORITY\SYSTEM2012/01/120:00:00
121:WINDOWS7-PCSecurityUpdateKB2631813NTAUTHORITY\SYSTEM2012/01/130:00:00
122:WINDOWS7-PCUpdateKB2632503NTAUTHORITY\SYSTEM2012/01/140:00:00
123:WINDOWS7-PCSecurityUpdateKB2633171NTAUTHORITY\SYSTEM2012/01/120:00:00
124:WINDOWS7-PCUpdateKB2633952NTAUTHORITY\SYSTEM2012/01/120:00:00
125:WINDOWS7-PCSecurityUpdateKB2639417NTAUTHORITY\SYSTEM2012/01/120:00:00
126:WINDOWS7-PCUpdateKB2641690NTAUTHORITY\SYSTEM2011/11/230:00:00
127:WINDOWS7-PCSecurityUpdateKB2644615NTAUTHORITY\SYSTEM2012/01/140:00:00
128:WINDOWS7-PCSecurityUpdateKB2656355NTAUTHORITY\SYSTEM2012/01/120:00:00
129:WINDOWS7-PCUpdateKB958488windows7-PC\windows72010/06/130:00:00
130:WINDOWS7-PCSecurityUpdateKB971468NTAUTHORITY\SYSTEM2010/06/020:00:00
131:WINDOWS7-PCSecurityUpdateKB972270NTAUTHORITY\SYSTEM2010/06/020:00:00
132:WINDOWS7-PCUpdateKB974431NTAUTHORITY\SYSTEM2010/06/020:00:00
133:WINDOWS7-PCSecurityUpdateKB974571NTAUTHORITY\SYSTEM2010/06/020:00:00
134:WINDOWS7-PCUpdateKB975053NTAUTHORITY\SYSTEM2010/06/020:00:00
135:WINDOWS7-PCHotfixKB975467NTAUTHORITY\SYSTEM2010/06/020:00:00
136:WINDOWS7-PCUpdateKB975496NTAUTHORITY\SYSTEM2010/06/020:00:00
137:WINDOWS7-PCSecurityUpdateKB975560NTAUTHORITY\SYSTEM2010/06/020:00:00
138:WINDOWS7-PCUpdateKB976264NTAUTHORITY\SYSTEM2010/06/020:00:00
139:WINDOWS7-PCHotfixKB976422NTAUTHORITY\SYSTEM2010/06/030:00:00
140:WINDOWS7-PCUpdateKB976662NTAUTHORITY\SYSTEM2010/06/020:00:00
141:WINDOWS7-PCUpdateKB976902NTAUTHORITY\SYSTEM2011/02/060:00:00
142:WINDOWS7-PCUpdateKB977074NTAUTHORITY\SYSTEM2010/06/020:00:00
143:WINDOWS7-PCSecurityUpdateKB977165NTAUTHORITY\SYSTEM2010/07/130:00:00
144:WINDOWS7-PCUpdateKB977863NTAUTHORITY\SYSTEM2010/06/020:00:00
145:WINDOWS7-PCSecurityUpdateKB978262NTAUTHORITY\SYSTEM2010/06/020:00:00
146:WINDOWS7-PCSecurityUpdateKB978542NTAUTHORITY\SYSTEM2010/06/020:00:00
147:WINDOWS7-PCSecurityUpdateKB978601NTAUTHORITY\SYSTEM2010/05/310:00:00
148:WINDOWS7-PCSecurityUpdateKB978886NTAUTHORITY\SYSTEM2010/08/140:00:00
149:WINDOWS7-PCUpdateKB979099NTAUTHORITY\SYSTEM2010/06/020:00:00
150:WINDOWS7-PCSecurityUpdateKB979309NTAUTHORITY\SYSTEM2010/05/310:00:00
151:WINDOWS7-PCSecurityUpdateKB979482NTAUTHORITY\SYSTEM2010/06/120:00:00
152:WINDOWS7-PCHotfixKB979538NTAUTHORITY\SYSTEM2010/09/290:00:00
153:WINDOWS7-PCSecurityUpdateKB979559NTAUTHORITY\SYSTEM2010/06/120:00:00
154:WINDOWS7-PCSecurityUpdateKB979683NTAUTHORITY\SYSTEM2010/06/020:00:00
155:WINDOWS7-PCSecurityUpdateKB979687NTAUTHORITY\SYSTEM2010/10/130:00:00
156:WINDOWS7-PCSecurityUpdateKB979688NTAUTHORITY\SYSTEM2010/10/130:00:00
157:WINDOWS7-PCUpdateKB979900NTAUTHORITY\SYSTEM2010/06/240:00:00
158:WINDOWS7-PCSecurityUpdateKB979916NTAUTHORITY\SYSTEM2010/06/120:00:00
159:WINDOWS7-PCUpdateKB980182NTAUTHORITY\SYSTEM2010/06/020:00:00
160:WINDOWS7-PCSecurityUpdateKB980195NTAUTHORITY\SYSTEM2010/06/120:00:00
161:WINDOWS7-PCSecurityUpdateKB980218NTAUTHORITY\SYSTEM2010/06/120:00:00
162:WINDOWS7-PCSecurityUpdateKB980232NTAUTHORITY\SYSTEM2010/06/020:00:00
163:WINDOWS7-PCUpdateKB980408NTAUTHORITY\SYSTEM2010/06/020:00:00
164:WINDOWS7-PCSecurityUpdateKB980436NTAUTHORITY\SYSTEM2010/08/140:00:00
165:WINDOWS7-PCUpdateKB980846NTAUTHORITY\SYSTEM2010/06/240:00:00
166:WINDOWS7-PCUpdateKB981078NTAUTHORITY\SYSTEM2010/06/240:00:00
167:WINDOWS7-PCSecurityUpdateKB981332NTAUTHORITY\SYSTEM2010/06/020:00:00
168:WINDOWS7-PCUpdateKB981793NTAUTHORITY\SYSTEM2010/06/020:00:00
169:WINDOWS7-PCSecurityUpdateKB981852NTAUTHORITY\SYSTEM2010/08/140:00:00
170:WINDOWS7-PCSecurityUpdateKB981957NTAUTHORITY\SYSTEM2010/10/130:00:00
171:WINDOWS7-PCUpdateKB982018NTAUTHORITY\SYSTEM2011/07/140:00:00
172:WINDOWS7-PCUpdateKB982110NTAUTHORITY\SYSTEM2010/08/250:00:00
173:WINDOWS7-PCSecurityUpdateKB982132NTAUTHORITY\SYSTEM2010/10/130:00:00
174:WINDOWS7-PCSecurityUpdateKB982214NTAUTHORITY\SYSTEM2010/08/140:00:00
175:WINDOWS7-PCSecurityUpdateKB982381NTAUTHORITY\SYSTEM2010/06/120:00:00
176:WINDOWS7-PCUpdateKB982519NTAUTHORITY\SYSTEM2010/06/240:00:00
177:WINDOWS7-PCUpdateKB982632NTAUTHORITY\SYSTEM2010/06/020:00:00
178:WINDOWS7-PCUpdateKB982664NTAUTHORITY\SYSTEM2010/08/140:00:00
179:WINDOWS7-PCSecurityUpdateKB982665NTAUTHORITY\SYSTEM2010/08/140:00:00
180:WINDOWS7-PCSecurityUpdateKB982799NTAUTHORITY\SYSTEM2010/08/140:00:00
181:WINDOWS7-PCSecurityUpdateKB983590NTAUTHORITY\SYSTEM2010/08/140:00:00

インストール済みアプリケーション

これは昔からやり方によって取れたり取れなかったりと色々ありますね。今回はあまり時間をかけたくないので、Google先生に聞いてみました。すると以下の記事が。

ここで紹介されているやり方がひとまずよさそうなので、そのまま拝借します。ありがとうございます。

    - $path = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 

    - $path1 = "HKLM:" + $path 

    - $path2 = "HKCU:" + $path 

    - Get-ChildItem -Path ($path1,$path2) | 

    -    %{Get-ItemProperty $_.PsPath} | 

    -    ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} | 

    -    sort displayname | 

    -    select DisplayName,Publisher 

この行数でこれだけのものが取得できるのはさすがPowerShellといった感じですね。

とりあえず一つにまとめてみる

ここまでのものをとりあえず1つにまとめてみます。出力はとりあえずこだわらないので単純にコンソールに吐き出すようにします。開始の目印と項目ごとにヘッダ的なものを出力するfunctionだけ定義しておいてあげましょうか。

    - function start_header() 

    - { 

    -     Write-Output "====================" 

    -     Write-Output "OS information" 

    -     $date = Get-Date 

    -     Write-Output "start time:$date" 

    -     Write-Output "====================" 

    - } 

    -   

    - function header($title) 

    - { 

    -     Write-Output "" 

    -     Write-Output "--------------------" 

    -     Write-Output $title 

    -     Write-Output "--------------------" 

    - } 

    -   

    - start_header 

    - header "title" 

あとは、いままでのものをすべてくっつけるだけです。こんな感じになりました。

1: 
2:functionstart_header()
3:{
4:Write-Output"===================="
5:Write-Output"OS情報"
6:$date=Get-Date
7:Write-Output"開始時刻:$date"
8:Write-Output"===================="
9:}
10: 
11:functionheader($title)
12:{
13:Write-Output""
14:Write-Output"--------------------"
15:Write-Output$title
16:Write-Output"--------------------"
17:}
18: 
19:start_header
20: 
21:#ホスト名
22:header"ホスト名"
23:hostname
24: 
25: 
26:#OSバージョン
27:header"OSバージョン"
28:[Environment]::OSVersion
29: 
30: 
31:#ディスク構成
32:header"ディスク構成"
33:Get-WmiObjectWin32_DiskDrive
34: 
35: 
36:#ドメイン参加情報
37:header"ドメイン参加情報"
38:$domain=(Get-WMIObjectWin32_ComputerSystem).PartOfDomain
39:if($domain)
40:{
41:Write-Output"joinedtoDomain."
42:}else{
43:Write-Output"notjoinedtoDomain(WORKGROUP)."
44:}
45:Get-WmiObjectWin32_ComputerSystem
46: 
47: 
48:#ネットワーク設定
49:header"ネットワーク設定"
50:#Get-WmiObjectWin32NetworkAdapterConfiguration
51:ipconfig/all
52: 
53: 
54:#役割情報、機能情報
55:header"役割情報、機能情報"
56:Import-ModuleServerManager
57:Get-WindowsFeature
58: 
59: 
60:#適用済みセキュリティパッチ
61:header"適用済みセキュリティパッチ"
62:Get-WmiObjectWin32_QuickFixEngineering
63: 
64: 
65:#インストール済みアプリケーション
66:header"インストール済みアプリケーション"
67:$path="\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
68:$path1="HKLM:"+$path
69:$path2="HKCU:"+$path
70:Get-ChildItem-Path($path1,$path2)
71:%{Get-ItemProperty$_.PsPath}|
72:?{$_.systemcomponent-ne1-and$_.parentkeyname-eq$null}|
73:sortdisplayname|
74:selectDisplayName,Publisher
75: 
76: 
77:

テスト実行

早速Windows Server 2008 R2のサーバーに配置して実行してみました。結果以下のようになってしまいました。

レジストリキーが存在しないという実行時のエラーが出てしまっています。

結果に関しても、OSバージョン以降、コマンドレットの結果が表示されていないようです。

存在しないレジストリキーにアクセスしてエラーになってしまう件はTest-Pathを実行して存在する場合のみ処理するように修正します。とりあえずこれでいいことにしておきましょう。

  • header ""
  • $path = “\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”
  • $path1 = “HKLM:” + $path
  • $path2 = “HKCU:” + $path
  • $testpath = @()
  • $testpath += $path1
  • if(Test-Path $path2) { $testpath += $path2 }
  • Get-ChildItem -Path $testpath |
  •    %{Get-ItemProperty $_.PsPath} |
  •    ?{$.systemcomponent -ne 1 -and $.parentkeyname -eq $null} |
  •    sort displayname |
  •    select DisplayName,Publisher

OSバージョン以降のコマンドレットの結果が表示されていない件は、原因はよくわからないのですが、とりあえず結果をFormat-listに出力することでその後のコマンドレットの結果も表示されるようになりました。バグでしょうか?

  • #OS
  • header “OS”
  • [Environment]::OSVersion | fl

(2012/01/24追記)

上記の結果が出力されなくなった件に関して@mutaguchiさんからtwitterでコメントをいただきました。

.bbpbox{background:url(http://a1.twimg.com/images/themes/theme4/bg.gif) #0099b9;padding:20px;}

@ebi PowerShellの特徴として、オブジェクトを(Format-*等を使わず)そのまま出力すると型に応じて決められた書式でされます。このとき異なった型のオブジェクトを混ぜて出力すると直前に出力した型のフォーマットを引き継いで出力されます。Mon Jan 16 18:29:21 via Janetter牟田口大介

mutaguchi

.bbpbox{background:url(http://a1.twimg.com/images/themes/theme4/bg.gif) #0099b9;padding:20px;}

@ebi 今回の場合はOSバージョン情報以降に出力したオブジェクトもOperatingSystemオブジェクトと認識されますがそれらに含まれるプロパティは当然存在しないので何も出力されなくなってしまいます。よって…Mon Jan 16 18:31:07 via Janetter牟田口大介

mutaguchi

.bbpbox{background:url(http://a1.twimg.com/images/themes/theme4/bg.gif) #0099b9;padding:20px;}

@ebi デフォルト出力形式に任せるのではなく、ご提示のコードのようにFormat-*系のコマンドレットで出力するのも一つの方法ですが、出力されるオブジェクトの型を統一させるのでもいいかと。Out-Stringを使ってstringで統一するのが簡単かと思います。Mon Jan 16 18:32:49 via Janetter牟田口大介

mutaguchi

なるほど、原因と対処法が良くわかりました。@mutaguchiさん、ありがとうございました。今回のスクリプトに関してはformat-listで出力することで十分なので、このまま行こうと思いますが、PowerShellスクリプトの要注意事項ですね。

とりあえずこんな感じで

とりあえずこれで意図した結果は出せるようになりました。以下がソースになります。

大したことはしていないのですが、PowerShellで結構な情報が出力出来るイメージはつかめたと思っています。出力形式等は次回以降いじっていこうと思います。