C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■97122 / 6階層)  PowerShellでファイルバージョン取得
□投稿者/ 魔界の仮面弁士 (3035回)-(2021/03/31(Wed) 14:11:17)
No97118 (けん さん) に返信
> まだ初心者ですので、コマンド内容を確認し、不明な点等がありましたらご教授等の対応
> をお願いいたします。

参考までに、先のコードの解説をば。


>>foreach($d in ls 'C:\Program Files\Common Files\*' -Directory -Recurse) {

ls すなわち Get-ChildItem コマンドレットに対して -Directory -Recurse を付与することで、
その下のすべてのディレクトリを列挙しています。

例:
 (Get-ChildItem 'C:\Program Files\Common Files\*' -Directory -Recurse).FullName

そしてそれを、foreach ステートメントでループ処理し、各ディレクトリごとに処理します。
この場合の $d はディレクトリ情報である [System.IO.DirectoryInfo] 型のデータが渡されます。


>> $f = @(ls "$($d)\*" -Include @('*.dll','*.exe'))

$d で渡されたディレクトリの直下にある、*.dll や *.exe を探します。
子ディレクトリまで探す必要は無いので、ここでは -Recurse を付けません。

列挙された結果は配列として $f に代入されますが、ここの処理が
 $f = ls "$($d)\*" -Include @('*.dll','*.exe')
ではなく、@( ) で囲む必要があることに注意してください。


例:
 # ファイルが 1 個だけの場合、ファイルサイズが返されます。
 # これは [System.IO.FileInfo] の Length プロパティとして解釈されるためです。
 (ls C:\Windows\System32\Calc.exe ).Length

 # @( ) で囲むと配列として扱われるので、
 # 見つかったファイルの個数「1」が得られます。
 @(ls C:\Windows\System32\Calc.exe ).Length


>> if ($f.Length -gt 0 ) {
>>  '[' + $d.FullName + ']'

列挙されたファイル数が 0 よりも大きかった時に、
そのディレクトリのパスを表示しています。
そのディレクトリに *.dll や *.exe が見つからなかったときは何もしません。


>>  $f | select Name, @{Name='Version'; Expression={(gp $_).VersionInfo.FileVersion}} | ft

gp というのは、Get-ItemProperty コマンドレットのエイリアスです。

個々のファイル情報を、select すなわち Select-Object コマンドレットで成形し、
それを ft すなわち Format-Table コマンドレットに渡して表示する処理です。

なお、@{ } の部分は「ハッシュテーブル」の構文です。
https://www.vwnet.jp/Windows/PowerShell/2017060701/PowerShellHashTable.htm

Select-Object の -Property に対して「式」を渡す場合には、
「Name (または Label)」と「Expression」をキーとしたハッシュテーブルを使います。

ハッシュテーブルの Name や Label は n または l、Expression は e と省略できるので
「@{Name='Version'; Expression={(gp $_).VersionInfo.FileVersion}}」を
「@{l='Version';e={(gp $_).VersionInfo.FileVersion}}」と書くこともできます。


>> }
>>}
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: PowerShellでファイルバージョン取得 /けん 返信無し
 
上記関連ツリー

PowerShellでファイルバージョン取得 / けん (21/03/30(Tue) 16:03) #97113
Re[1]: PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/30(Tue) 16:21) #97114
  └ Re[2]: PowerShellでファイルバージョン取得 / けん (21/03/30(Tue) 19:11) #97115
    └ Re[3]: PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/30(Tue) 21:15) #97116
      └ Re[4]: PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/30(Tue) 22:08) #97117
        └ Re[5]: PowerShellでファイルバージョン取得 / けん (21/03/31(Wed) 08:48) #97118
          ├ PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/31(Wed) 14:11) #97122 ←Now
          └ Re[6]: PowerShellでファイルバージョン取得 / けん (21/03/31(Wed) 13:37) #97121
            └ Re[7]: PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/31(Wed) 14:24) #97123
              └ Re[8]: PowerShellでファイルバージョン取得 / けん (21/03/31(Wed) 17:25) #97127
                └ Re[9]: PowerShellでファイルバージョン取得 / 魔界の仮面弁士 (21/03/31(Wed) 23:46) #97130
                  └ Re[10]: PowerShellでファイルバージョン取得 / けん (21/04/01(Thu) 19:28) #97131
                    └ Re[11]: PowerShellでファイルバージョン取得 / けん (21/04/04(Sun) 13:45) #97136 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信