こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PowerShellでPCの情報取得について

【環境】Windows 10

【ご教示いただきたい点】
 障害が発生した場合、事象発生時の情報を取得するスクリプトを作成しております。
 その際、インストールされたアプリ、インストールされた更新プログラム、適用されたグループポリシー、ネットワークカードの情報を取得することを考えております。

 情報の取得にあたっては、以下で取得できるようですが、取得したものを1つずつ取り出して、表示させるためには、ループ処理が必要だと思いますが、PowerShellにおいて、インストールされたアプリ、インストールされた更新プログラム、適用されたグループポリシー、ネットワークカードの情報を1つずつ 取り出していく処理方法がよくわかりませんのでご教示いただけますでしょうか。

 インストールされたアプリ
 Get-WmiObject Win32_Product | Select-Object Name,Vendor,Version,Caption

 インストールされた更新プログラム
 New-Object -ComObject Microsoft.Update.Session
 
 適用されたグループポリシー
 gpresult /r

 ネットワークカードの情報
 Get-WmiObject -Class Win32_NetworkAdapter
 Get-WmiObject -Class Win32_NetworkAdapterConfiguration

投稿日時 - 2019-06-15 20:42:33

QNo.9626129

すぐに回答ほしいです

質問者が選んだベストアンサー

次のようにすれば
$Nam , $Ven , $Ver , $Cap に情報が入っています。

$obj = Get-WmiObject Win32_Product | Select-Object Name,Vendor,Version,Caption
$i=0; $Nam=foreach($item in $obj) {$item[$i].Name}
$i=0; $Ven=foreach($item in $obj) {$item[$i].Vendor}
$i=0; $Ver=foreach($item in $obj) {$item[$i].Version}
$i=0; $Cap=foreach($item in $obj) {$item[$i].Caption}

投稿日時 - 2019-06-16 19:17:33

補足

ネットワークカードの情報も以下で取得できました。

$obj = Get-WmiObject Win32_NetworkAdapterConfiguration
foreach ($item in $obj){
$nic_description = $item.Description
$nic_macaddress = $item.MACAddress
$nic_dhcpenabled = $item.DHCPEnabled
$nic_ipaddress = $item.IPAddress
$nic_ipsubnet = $item.IPSubnet
$nic_defaultipgateway = $item.DefaultIPGateway
$nic_dhcpserver = $item.DHCPServer
Write-Host "説明:" $nic_description
Write-Host "物理アドレス:" $nic_macaddress
Write-Host "DHCP 有効:" $nic_dhcpenabled
Write-Host "IPv4アドレス:" $nic_ipaddress
Write-Host "サブネット マスク:" $nic_ipsubnet
Write-Host "デフォルト ゲートウェイ:" $nic_defaultipgateway
Write-Host "DHCP サーバー:" $nic_dhcpserver

投稿日時 - 2019-06-17 22:47:03

お礼

ありがとうございます。

インストールされているアプリについては、以下で取得できたので、
インストールされた更新プログラム、ネットワークカードの情報についてはご教示いただいた方法を試してみます。

ActiveDirectory環境になりますが、グループポリシーは「Defalut Domain Policy」など適用されているポリシーを取得したいと考えておりますが、gpresult /rだとセキュリティグループの情報も表示されるので、これについてはもう少し調べてみることにします。 

$obj = Get-CimInstance -Class Win32_Product
foreach ($item in $obj){
$app_name = $item.Name
$app_vendor = $item.Vendor
$app_version = $item.Version
$app_installdate = $item.InstallDate
Write-Host "名前:" $app_name
Write-Host "発行元:" $app_vendor
Write-Host "インストール日:" $app_installdate
Write-Host "バージョン:" $app_version
} 

投稿日時 - 2019-06-16 20:44:47

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

各コマンドで取得された文字列から正規表現で取得すればよいのではないでしょうか。
各行に対してそれぞれ次の正規表現で目的の値を取り出せると思います。

●インストールされたアプリ
- 正規表現
 ^(\S+(\s\S+)*)\s*(\S+(\s\S+)*)\s*([\d\.]+)\s*(\S+(\s\S+)*)$
- 抽出グループ
 Name: $1
 Vendor: $3
 Version: $5
 Caption: $6

●インストールされた更新プログラム
- 正規表現
 ^(\S+(\s\S+)*)\s*(\S+(\s\S+)*)\s*([\d\.]+)$
- 抽出グループ
 Name: $1
 Program: $3
 Version: $5

●ネットワークカードの情報
- 正規表現
 ^(\S+):\s*(.+)$
- 抽出グループ
 項目名: $1
 内容: $2

なお、適用されたグループポリシーの体裁はよくわからなかったので記載していません。

投稿日時 - 2019-06-15 22:04:40

お礼

ありがとうございます。

例えば、アプリケーション情報の場合、抽出してforeachでループさせていくのかと思うのですが、どこで正規表現をしようすればよいのでしょうか。

試しにforeachで試しましたが、うまくいきませんでした。

$obj = Get-WmiObject Win32_Product | Select-Object Name,Vendor,Version,Caption

foreach($item in $obj) {
$Name = $item.Name
$Vender = $item.Vender
$Version = $item.Version
$Caption = $item.Caption
}

投稿日時 - 2019-06-16 15:34:03

あなたにオススメの質問