今回は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:[]ActiveDirectoryRightsManagementADRMS
7:[]ActiveDirectoryRightsManagementServerADRMS-Server
8:[]IDADRMS-Identity
9:[]ActiveDirectoryAD-Domain-Services
10:[]ActiveDirectoryADDS-Domain-Controller
11:[]UNIXIDADDS-Identity-Mgmt
12:[]NISADDS-NIS
13:[]ADDS-Password-Sync
14:[]ADDS-IDMU-Tools
15:[]ActiveDirectoryAD-Federation-Services
16:[]ADFS-Federation
17:[]ADFS-Proxy
18:[]ADFSWebADFS-Web-Agents
19:[]ADFS-Claims
20:[]WindowsADFS-Windows-Token
21:[]ActiveDirectory...ADLDS
22:[]ActiveDirectoryAD-Certificate
23:[]ADCS-Cert-Authority
24:[]WebADCS-Web-Enrollment
25:[]ADCS-Online-Cert
26:[]ADCS-Device-Enrollment
27:[]WebADCS-Enroll-Web-Svc
28:[]WebADCS-Enroll-Web-Pol
29:[]DHCPDHCP
30:[]DNSDNS
31:[]FAXFax
32:[X]Hyper-VHyper-V
33:[]Web(IIS)Web-Server
34:[]WebWeb-WebServer
35:[]HTTPWeb-Common-Http
36:[]Web-Static-Content
37:[]Web-Default-Doc
38:[]Web-Dir-Browsing
39:[]HTTPWeb-Http-Errors
40:[]HTTPWeb-Http-Redirect
41:[]WebDAVWeb-DAV-Publishing
42:[]Web-App-Dev
43:[]ASP.NETWeb-Asp-Net
44:[].NETWeb-Net-Ext
45:[]ASPWeb-ASP
46:[]CGIWeb-CGI
47:[]ISAPIWeb-ISAPI-Ext
48:[]ISAPIWeb-ISAPI-Filter
49:[]Web-Includes
50:[]Web-Health
51:[]HTTPWeb-Http-Logging
52:[]Web-Log-Libraries
53:[]Web-Request-Monitor
54:[]Web-Http-Tracing
55:[]Web-Custom-Logging
56:[]ODBCWeb-ODBC-Logging
57:[]Web-Security
58:[]Web-Basic-Auth
59:[]WindowsWeb-Windows-Auth
60:[]Web-Digest-Auth
61:[]Web-Client-Auth
62:[]IISWeb-Cert-Auth
63:[]URLWeb-Url-Auth
64:[]Web-Filtering
65:[]IPWeb-IP-Security
66:[]Web-Performance
67:[]Web-Stat-Compression
68:[]Web-Dyn-Compression
69:[]Web-Mgmt-Tools
70:[]IISWeb-Mgmt-Console
71:[]IISWeb-Scripting-Tools
72:[]Web-Mgmt-Service
73:[]IIS6Web-Mgmt-Compat
74:[]IIS6Web-Metabase
75:[]IIS6WMIWeb-WMI
76:[]IIS6Web-Lgcy-Scripting
77:[]IIS6Web-Lgcy-Mgmt-Console
78:[]FTPWeb-Ftp-Server
79:[]FTPWeb-Ftp-Service
80:[]FTPWeb-Ftp-Ext
81:[]IISWebWeb-WHC
82:[]WindowsServerUpdateServicesOOB-WSUS
83:[]WindowsWDS
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:[]TCPAS-TCP-Port-Sharing
91:[]WindowsAS-WAS-Support
92:[]HTTPAS-HTTP-Activation
93:[]AS-MSMQ-Activation
94:[]TCPAS-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:[]DFSFS-DFS-Namespace
111:[]DFSFS-DFS-Replication
112:[]FS-Resource-Manager
113:[]NFS(NetworkFileSystem)FS-NFS-Services
114:[]WindowsSearchFS-Search-Service
115:[]WindowsServer2003FS-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:[]WebRDS-Web-Access
125:[]Print-Services
126:[]Print-Server
127:[]LPDPrint-LPD-Service
128:[]Print-Internet
129:[]Print-Scan-Server
130:[X].NETFramework3.5.1NET-Framework
131:[X].NETFramework3.5.1NET-Framework-Core
132:[]WCFNET-Win-CFAC
133:[]HTTPNET-HTTP-Activation
134:[]HTTPNET-Non-HTTP-Activ
135:[]BitLockerBitLocker
136:[]BranchCacheBranchCache
137:[]DirectAccessDAMC
138:[]HTTPRPCRPC-over-HTTP-Proxy
139:[]LPRLPR-Port-Monitor
140:[]RDC(RemoteDifferentialCompression)RDC
141:[]SANStorage-Mgr-SANS
142:[]SimpleTCP/IPServicesSimple-TCPIP
143:[]SMTPSMTP-Server
144:[]SNMPSNMP-Services
145:[]SNMPSNMP-Service
146:[]WMISNMPSNMP-WMI-Provider
147:[]TelnetTelnet-Client
148:[]TelnetTelnet-Server
149:[]TFTPTFTP-Client
150:[]UNIXSubsystem-UNIX-Apps
151:[]WindowsInternalDatabaseWindows-Internal-DB
152:[]WindowsPowerShellIntegratedScriptingEnvironm...PowerShell-ISE
153:[X]WindowsServerBackup-Features
154:[X]WindowsServerBackup
155:[]Backup-Tools
156:[]WindowsServerMigration
157:[]WindowsTIFFIFilterTIFF-IFilter
158:[]WindowsWSRM
159:[]WindowsWAS
160:[]WAS-Process-Model
161:[].NETWAS-NET-Environment
162:[]APIWAS-Config-APIs
163:[]WindowsBiometric-Framework
164:[]WinRMIISWinRM-IIS-Ext
165:[]WINSWINS-Server
166:[]XPSXPS-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:[]IISBITS-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:[]HTTPMSMQ-HTTP-Support
187:[]MSMQ-Multicasting
188:[]MSMQ-Routing
189:[]DCOMMSMQ-DCOM
190:[]Remote-Assistance
191:[X]RSAT
192:[X]RSAT-Role-Tools
193:[]ActiveDirectoryRSAT-ADCS
194:[]RSAT-ADCS-Mgmt
195:[]RSAT-Online-Responder
196:[X]ADDSADLDSRSAT-AD-Tools
197:[]ADDSRSAT-ADDS
198:[]ADDS...RSAT-ADDS-Tools
199:[]ActiveDirectoryRSAT-AD-AdminCenter
200:[]NISRSAT-SNIS
201:[]ADLDS...RSAT-ADLDS
202:[X]WindowsPowerShellActiveDirecto...RSAT-AD-PowerShell
203:[]ActiveDirectoryRightsManagement...RSAT-RMS
204:[]DHCPRSAT-DHCP
205:[]DNSRSAT-DNS-Server
206:[]FAXRSAT-Fax
207:[]RSAT-File-Services
208:[]RSAT-DFS-Mgmt-Con
209:[]...RSAT-FSRM-Mgmt
210:[]NFS(NetworkFileSystem)...RSAT-NFS-Admin
211:[X]Hyper-VRSAT-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:[]WindowsRSAT-WDS
221:[]RSAT-Feature-Tools
222:[]BitLockerRSAT-BitLocker
223:[]BitLockerRSAT-Bitlocker-DriveEnc
224:[]BitLockerRSAT-Bitlocker-RecPwd
225:[]BITSRSAT-Bits-Server
226:[]RSAT-Clustering
227:[]RSAT-NLB
228:[]SMTPRSAT-SMTP
229:[]WINSRSAT-WINS
230:[]LANWireless-Networking
231:[]WindowsqWave
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で結構な情報が出力出来るイメージはつかめたと思っています。出力形式等は次回以降いじっていこうと思います。