PowerShellでシステム情報を取得(9)

前回、情報のファイル出力を行いましたが、タイトル行

echo "VENDOR,MODEL,SERIAL,CPU,MEMORY,HDD Model,HDD Size,OS,bit,VERSION" >> <出力ファイル名>  #タイトル行

を書いています。システム情報を取得する機器が1台だけならいいかもしれませんが、ふつうは何台もあるはずです。そうすると、毎回毎回タイトル行が出力されて煩わしいです。そこで、タイトル行がすでにある場合はタイトル行の出力を行わないという処理を行おうと思います。方法は出力するファイル名の1行目を読んで、"HDD Model"という単語が含まれていたらタイトル行を出力しないというように処理したいと思います。

指定したファイルの読み込みは「Get-Content」コマンドレットを用います。1行目だけ読み込みたい場合は

Get-Content <ファイル名> | Select-Object -First 1

でOK。-Firstの後ろの1は初めから1行目という意味で、初めから3行なら -First 3 となります。

ということで、タイトル行がある場合、"HDD Model"という文字列を含むか含まないかで判別するようにします。

#ファイルの1行目を変数$lineに入れる
$line = Get-Content <ファイル名> | Select-Object -First 1

if ($line.Contains("HDD Model")) {
#HDD Modelを含んだ時の処理
   echo "$vendor,$model,$serial,$cpu,$memory,$HDmodel,$HDsize,$os,$bit,$ver" >> <ファイル名> }
else {
#HDD Modelを含まない時の処理
   echo "VENDOR,MODEL,SERIAL,CPU,MEMORY,HDD Model,HDD Size,OS,bit,VERSION" >> <出力ファイル名>  #タイトル行
   echo "$vendor,$model,$serial,$cpu,$memory,$HDmodel,$HDsize,$os,$bit,$ver" >> <ファイル名> }

このコードだと含んでも含まなくてもシステム情報は必要であって、同じ行が2行あるのは冗長です。そこで、含まない時だけタイトル行を入れるというように考えて、条件式に論理否定演算子( -! )を入れて書き換えます。

#ファイルの1行目を変数$lineに入れる
$line = Get-Content <ファイル名> | Select-Object -First 1

if (-! $line.Contains("HDD Model")) {
  #HDD Modelを含まない時の処理
   echo "VENDOR,MODEL,SERIAL,CPU,MEMORY,HDD Model,HDD Size,OS,bit,VERSION" >> <出力ファイル名> } #タイトル行
#システム情報出力
echo "$vendor,$model,$serial,$cpu,$memory,$HDmodel,$HDsize,$os,$bit,$ver" >> <ファイル名>

この方がコードがすっきりします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です