• ベストアンサー
  • すぐに回答を!

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

  • 質問No.9626129
  • 閲覧数140
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数1

お礼率 77% (679/879)

【環境】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

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

  • 回答No.2
  • ベストアンサー

ベストアンサー率 42% (1518/3544)

次のようにすれば
$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}
補足コメント
Engineer480907

お礼率 77% (679/879)

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

$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
お礼コメント
Engineer480907

お礼率 77% (679/879)

ありがとうございます。

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

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

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 69% (95/136)

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

●インストールされたアプリ
- 正規表現
 ^(\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

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

お礼率 77% (679/879)

ありがとうございます。

例えば、アプリケーション情報の場合、抽出して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
結果を報告する
    • 2019/06/25 22:17
    • コメントNo.1

    お陰様で大分、PC情報取得ツールとしての形ができあがってきました。

AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ