ちょっと面白いスクリプトがあったので紹介。
Changing Units - Power Tips - Powershell.com Powershell Scripts, Tips and Resources
コードは以下のとおり。
001 002 003 004 005 006 007 008 009 010 011 | dir $env:windir | Select-Object Mode, LastWriteTime, Length, Name | ForEach-Object { if ($_.Length -ne $null) { $_.Length = $_.Length | Add-Member ScriptMethod ToString { ('{0:0.0} KB' -f ($this/1KB)) } -Force -pass } $_ } | Sort-Object Length |
ファイルのレングスをKB単位で編集したいんだけど、そこで文字列に編集しちゃうとその後ソートが上手くいかない。
なのでLengthはそのままに、LengthのToStringメソッドをオーバーライドしちゃいましょうって感じ。
ToStringのオーバーライドはC#とかであれば良くやることだと思うがPowershellでは、あまりそういう発想がなかった。
また、this自動変数なんかも、こんな時につかうのかぁって感じ。
ただ、素直にやるなら集計プロパティを使えば良いだけのような気もする。(その後にまた処理が続くのであれば上記が有効の局面もあるのでしょう)
001 002 003 004 005 006 007 008 009 010 | dir $env:windir | Select-Object Mode, LastWriteTime, Length, Name | sort-Object Length | select Mode, LastWriteTime, @{ name="Length" expression={ if($_.length){'{0:0.0} KB' -f ($_.length/1KB)} } }, Name |
0 件のコメント:
コメントを投稿