การตัดทอนชื่อคุณสมบัติ
น่าเศร้าที่ไม่เหมือนพารามิเตอร์คุณสมบัติ / วิธีการ (สิ่งใดก็ตามที่เข้าถึงด้วยจุด.
) ไม่สามารถย่อให้สั้นลงได้ในรูปแบบที่ชัดเจน
แต่ cmdlet บางอย่างสามารถทำงานกับชื่อคุณสมบัติและรับสัญลักษณ์แทนและมีชุดพารามิเตอร์ที่รู้จักกันน้อย%
และ?
มีประโยชน์
โดยปกติเราจะส่งผ่าน scriptblock และอ้างอิงถึงรายการด้วย$_
แต่ก็มีรูปแบบอื่นที่ใช้ชื่อคุณสมบัติและยอมรับสัญลักษณ์แทน
$o|select Le*
$o|%{$_.Length}
ด้วยคุณสมบัติเช่น.Length
เราไม่สามารถใช้เวทย์มนตร์ v3 ที่ปกติจะทำงานกับอาเรย์เพราะLength
เป็นคุณสมบัติของอาเรย์เองดังนั้นทั้งสองข้างต้นสามารถใช้เพื่อรับความยาวของสมาชิกแต่ละคน select
มาในนิด ๆ หน่อย ๆ สั้น
แต่%
สามารถใช้ชื่อคุณสมบัติได้โดยตรงและส่งคืนค่านั้น:
$a|% Length
ซึ่งสามารถย่อให้สั้นด้วย wildcard สัญลักษณ์แทนจะต้องแก้ไขเป็นคุณสมบัติเดียว (หรือวิธีการเพิ่มเติมในภายหลัง) ดังนั้นมันจะโยนข้อผิดพลาดที่เป็นประโยชน์หากไม่ได้ระบุว่าสมาชิกที่สามารถแก้ไขได้
ในกรณีของLength
, Le*
เป็นปกติที่สั้นที่สุด แม้ในสตริงเดียววิธีนี้จะสั้นกว่าเพียง 1 ไบต์โดยใช้คุณสมบัติ
$a.Length # 9 #(doesn't work on array)
$a|%{$_.Length} # 15
$a|% Le* # 8
แต่ขึ้นอยู่กับสิ่งที่คุณทำกับสิ่งนี้ คุณสามารถทำได้$a.Length*5
แต่จะทำกับการแสดงออกของท่อที่คุณจะต้องห่อมัน($a|% Le*)*5
; อาจยังคงคุ้มค่าถ้ามันเทียบกับอาร์เรย์ แต่ประเด็นคือมันไม่เหมาะสมเสมอไปที่จะทดแทน
มันทำงานร่วมกับวิธีการต่าง ๆ ได้เช่นกันและคุณสามารถละทิ้งสิ่ง()
ที่ทำให้ชื่อเต็มมีความยาวเท่ากันได้ เมธอดต้องมีโอเวอร์โหลดที่ไม่มีพารามิเตอร์ (คุณสามารถส่งอาร์กิวเมนต์โดยวางไว้หลังชื่อเมธอดซึ่งดีมาก):
$a.ToUpper() # 12
$a|% *per # 9
ด้วยข้อโต้แย้ง:
'gaga'-replace'g','r' # 21
'gaga'|% *ce g r # 16
สิ่งเหล่านี้จะไม่เหมือนกันทุกประการซึ่ง-replace
ผู้ประกอบการทำการแทนที่ regex แต่ถ้าคุณเพียงแค่ทำการแทนที่สตริงก็สามารถสั้นลงเพื่อใช้วิธีนี้ได้ ช่วยให้สตริงนั้นเป็นอาร์กิวเมนต์ cmdlet แทนที่จะเป็นวิธีการโต้แย้งดังนั้นจึงไม่จำเป็นต้องมีการเสนอราคา
คุณสมบัติของวัตถุ
?
สามารถใช้ชื่อคุณสมบัติ (บางส่วน) ได้เช่นกันและใช้ "โอเปอเรเตอร์" กับมัน (ในรูปแบบของพารามิเตอร์สวิตช์) สิ่งนี้อาจสั้นกว่าการใช้Where-Object
วิธีการบล็อกสคริปต์มาตรฐานหากชื่อคุณสมบัติยาวพอและไม่ซ้ำกัน
$a|?{$_.Length-gt5} # 19
$a|? Le* -GT 5 # 14
($a|% Le*)-gt5 # 14 - Lengths, not objs