質問: デフォルトのpowershell lsコマンドで人間が読めるファイルサイズを表示する powershellでデフォルトのls(get-childitem)を変更して、* nixマシンのls -hのように人間が読めるファイルサイズを表示するにはどうすればよいですか?ls -lhは、ファイルサイズを使用して単純なロジックを実行するので、非常に小さいファイルのバイト、1kを超えるファイルのキロバイト(10k未満の場合は小数点以下1桁)、1mを超えるファイルのメガバイト(小数点以下1桁)を表示します。 10mb未満の場合)。
回答: これを試してps> gc c:\scripts\type\shrf.ps1xml <types> <type> <name>system.io.fileinfo</name> <members> <scriptproperty> <name>filesize</name> <getscriptblock> switch($this.length) { { $_ -gt 1tb } { "{0:n2} tb" -f ($_ / 1tb) } { $_ -gt 1gb } { "{0:n2} gb" -f ($_ / 1gb) } { $_ -gt 1mb } { "{0:n2} mb " -f ($_ / 1mb) } { $_ -gt 1kb } { "{0:n2} kb " -f ($_ / 1kb) } default { "{0} b " -f $_} } </getscriptblock> </scriptproperty> </members> </type> </types> ps> update-typedata -appendpath c:\scripts\type\shrf.ps1xml -verbose ps> get-childitem $env:windir | select name,filesize,length ps> # you can paste this in your profile ps> ps3で動的型データを使用することもできます。 ps> update-typedata -typename system.io.fileinfo -membername filesize -membertype scriptproperty -value { switch($this.length) { { $_ -gt 1tb } { "{0:n2} tb" -f ($_ / 1tb) } { $_ -gt 1gb } { "{0:n2} gb" -f ($_ / 1gb) } { $_ -gt 1mb } { "{0:n2} mb " -f ($_ / 1mb) } { $_ -gt 1kb } { "{0:n2} kb " -f ($_ / 1kb) } default { "{0} b " -f $_} } } -defaultdisplaypropertyset mode,lastwritetime,filesize,name