PowerShellでの奇妙な振る舞い
PowerShell というより、Shellオブジェクト(Folderオブジェクト?)というべきなのかしらん。
Zipに格納されたファイル名を取得するのにNameプロパティを使っているPowerShellプログラムで、環境によって拡張子があったり、なかったりすると、相談された。
ふと、思いついてExplorerのフォルダオプションにある、拡張子の表示のON/OFFを切り替えてみたら、そのON/OFFに合わせてNameプロパティに拡張子が出力されたりされなかったのが同期した。(PowerShellコンソールを閉じなくてもOK)
以下のようになる。
PS C:\Windows> $shell = New-Object -ComObject Shell.Application PS C:\Windows> $shell.NameSpace("D:\temp\a.zip").Items() | ForEach-Object { $_.Name } a.wav PS C:\Windows> $shell.NameSpace("D:\temp\a.zip").Items() | ForEach-Object { $_.Name } a
Nameプロパティは使っちゃだめだ・・・。
Pathプロパティのフルパスから、Split-Path <ファイル名> -Leaf でファイル名を取得する方向が安定と思われる。
« 株:現物買い約定(シチズンホールディングス:NISA枠) | トップページ | 覚書:PowerShellの配列を舐めるループについて »
« 株:現物買い約定(シチズンホールディングス:NISA枠) | トップページ | 覚書:PowerShellの配列を舐めるループについて »
コメント