PowerShellでカスタムオブジェクトを作成してみる -2- 応用編

はじめに

前回は、PowerShell カスタムオブジェクト作成の基本の型について紹介しました。
思ったよりも簡単に作成できる、と思った方も多いのではないでしょうか。

blog.jbs.co.jp

今回は基本の型を使って、複数のデバイスから情報を収集し、1つの CSV ファイルに出力してみたいと思います。

事前準備

PowerShell の実行元 ⇔ 実行先のデバイス間で、リモートコマンドの実行を許可する必要があります。
※実行の許可を行う際は、セキュリティに十分留意した上で行う必要があります。

learn.microsoft.com

実現したいこと

  • 管理サーバーから同一ネットワーク内の複数デバイスに PowerShell リモート接続
  • OS バージョンとビルド、言語、ローカルタイムゾーンの情報を取得
  • 1つの CSV ファイルにまとめて出力

やってみる

実際にスクリプトを書いてみます。
ホスト名のリストを読み込んで、OS 情報の取得とカスタムオブジェクトの作成を繰り返し実行します。

#出力パスを定義
$CurrentPath = "C:\Work\Get-Script"
$ToDay = $(Get-Date).ToString("yyyyMMdd")
$FilePath = $CurrentPath + "\" + $ToDay + "_Get-OSInfo.csv" 

#リモート接続するデバイスのホスト名のリストを定義
$HostList = "C:\Work\Get-Script\HostList.txt"

$Collection =New-Object System.Collections.ArrayList
#ホスト名のリストから一行ずつ読み込んで繰り返し処理を実行 ForEach ($HostName in Get-Content $HostList) {

#OS情報を取得 $OS = (gwmi win32_OperatingSystem -ComputerName $HostName).Caption $Build = (gwmi win32_OperatingSystem -ComputerName $HostName).BuildNumber
$Language = (gwmi win32_OperatingSystem -ComputerName $HostName).OSLanguage
$TimeZone = (gwmi win32_OperatingSystem -ComputerName $HostName).CurrentTimeZone

$Property = New-Object -TypeName PSObject $Property |Add-Member -Type NoteProperty -Name "ホスト名" -Value $HostName    
$Property |Add-Member -Type NoteProperty -Name "オペレーティングシステム" -Value $OS
$Property |Add-Member -Type NoteProperty -Name "ビルド" -Value $Build
$Property |Add-Member -Type NoteProperty -Name "言語" -Value $Language
$Property |Add-Member -Type NoteProperty -Name "タイムゾーン" -Value $TimeZone

#戻り値の後始末
[void]$Collection.add($Property)
$Property = "" }
$Collection
|Export-Csv $FilePath -Encoding Default -NoTypeInformation -Force

出力結果は以下のようになりました。
同じプロパティが縦に並ぶので、比較しやすいですね。

注意点として、デバイス毎に値の数が異なるような結果になるものは
プロパティ列に値がきれいに収まらないので、この方法の出力に不向きです。

おわりに

いかがでしたでしょうか。
カスタムオブジェクトの基本の型を応用して、欲しい値だけを一括で見やすく CSV ファイルに出力することができました。
スクリプトの中で読み込むホスト名も、外部データとして読み込む形式にすることで、ホスト名のリストを編集するだけで、色々な組み合わせのデータを素早く収集することが可能です。
カスタムオブジェクトの活用に、本記事が少しでも役に立てば幸いです。

執筆担当者プロフィール
岡田 美穂

岡田 美穂(日本ビジネスシステムズ株式会社)

Microsoft 365(E3・E5)導入プロジェクトを中心に従事。週末は推し活(アイドル)に勤しんでいます。

担当記事一覧