ค้นหาเว็บไซต์

ความเกียจคร้านของ PowerShell เพิ่มเติม


dir c:\work\ -file  | where {$_.length -gt 100KB} | Select Name,
@{Name="Modified";Expression={$_.lastWritetime}},
@{Name="SizeKB";Expression={[math]::Round($_.length/1KB,2)}} |
Sort SizeKB -Descending

หากคุณอ่านบทความล่าสุด คุณก็รู้อยู่แล้วว่าฉันสามารถใช้ทางลัดคุณสมบัตินามแฝงได้ แต่คุณยังสามารถกำหนดคุณสมบัติประเภทอื่นได้ สมมติว่าฉันมักจะต้องการรับขนาดไฟล์เป็น KB และการใช้ Select-Object ตลอดเวลากับ hashtable แบบกำหนดเองนั้นค่อนข้างน่าเบื่อ แต่ฉันสามารถทำได้ด้วย Update-TypeData:

Update-TypeData -TypeName System.IO.FileInfo -MemberType ScriptProperty -MemberName SizeKB -Value {[math]::Round($this.length/1KB,2)} 

เมื่อกำหนด ScriptProperty ตัวแปร $this จะถูกนำมาใช้แทน $_ การใช้นามแฝงที่สร้างไว้ก่อนหน้านี้ทำให้คำสั่งของฉันเขียนได้ง่ายขึ้นมาก:

PS C:\> dir c:\work\ -file  | where {$_.sz -gt 100KB} | Sort SizeKB -Descending | format-table Name,
Modified,SizeKB -AutoSize

Name                      Modified                 SizeKB
----                      --------                 ------
WeeklyProcs.xml           12/27/2013 12:39:52 PM 16660.45
SSCERuntime_x64-ENU.msi   2/11/2010 8:36:32 PM     3567.5
SSCERuntime_x86-ENU.msi   2/11/2010 8:36:18 PM       3090
test.exe                  1/14/2014 10:43:15 AM    540.54
psight.csv                3/4/2014 10:12:46 AM     508.31
WMIExplorer.exe           5/21/2012 1:32:15 PM        452
test2.exe                 5/4/1999 4:33:24 PM      270.27
test2.ext                 5/4/1999 4:33:24 PM      270.27
PS4NewFeatures-m3.camproj 3/29/2014 7:13:43 PM     255.65
du.exe                    5/29/2014 11:42:40 AM    218.19
chi-hvr2-health-full.htm  1/23/2014 10:01:27 AM    127.96
windowtime.xml            6/16/2014 1:32:03 PM     102.17

ด้วยนามแฝง ฉันสามารถใช้มันได้ทุกที่ในนิพจน์ PowerShell ฉันขอฝากตัวอย่างไว้ให้คุณอีกตัวอย่างหนึ่ง:

Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumKB -Value {[math]::Round($this.sum/1KB,2)} -Force
Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumMB -Value {[math]::Round($this.sum/1MB,2)} -Force
Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumGB -Value {[math]::Round($this.sum/1GB,2)} -Force

ฉันมักจะต้องการได้รับมูลค่ารวมของบางสิ่งบางอย่าง แต่บ่อยครั้งฉันต้องการมันในรูปแบบอื่น เช่น MB หรือ GB ตอนนี้ฉันมีมันแล้ว

PS C:\> dir c:\work\*.xml | where {$_.sz -gt 1kb} | measure -Property Size -Sum


Count    : 7
Average  :
Sum      : 17199422
Maximum  :
Minimum  :
Property : Size
SumKB    : 16796.31
SumMB    : 16.4
SumGB    : 0.02

PS C:\> (ps chrome | measure ws -sum).SumGB
1.23

นั่นจะช่วยประหยัดการพิมพ์ได้อย่างแน่นอน ฉันน่าจะทำสิ่งที่คล้ายกันสำหรับคุณสมบัติสูงสุดและต่ำสุดเช่นกัน

แล้วคุณพิมพ์อะไรอยู่ตลอดเวลา? มันเป็นสิ่งที่คุณฉลาดกว่านี้หรือเปล่า? ฉันหวังว่าคุณจะแบ่งปันเพื่อที่ฉันจะได้ใช้ประโยชน์จากความเกียจคร้านของคุณ ฉันหมายถึง ประสิทธิภาพ!

บทความที่เกี่ยวข้อง