เอกสารในคำตอบของ @ oɔɯǝɹนั้นดีถ้าแหล่งที่มาที่สัมพัทธ์ค่อนข้าง
หากคุณใช้ Visual Studio รหัสซึ่งมีการวางแผนที่จะแทนที่ริ้วรอย PowerShell ISE แล้วติดตั้งส่วนขยาย VS รหัส PowerShellที่มีตัวเลือกการจัดรูปแบบหลายอย่างที่เป็นอย่างน้อยบางส่วนขึ้นอยู่กับทางการ PowerShell ปฏิบัติที่ดีที่สุดและคู่มือสไตล์ ทั้ง VS Code และส่วนขยาย PowerShell ได้รับการจัดการโดย Microsoft ดังนั้นจึงเป็นเรื่องเกี่ยวกับแนวทางทางการที่ไม่เป็นทางการ
ฉันไม่เห็นด้วยกับทุกสิ่งที่พวกเขาระบุ ตัวอย่างเช่นฉันมาจาก PHP, Java, C # และ SQL ที่คาดว่าจะใช้เครื่องหมายอัฒภาคหากไม่จำเป็น รหัสดูเหมือนผิดกับฉันหากไม่มีพวกเขาดังนั้นฉันจึงรวมมัน หากมี#requires SemicolonTerminator
ฉันจะเปิดใช้งานในส่วนใหญ่ของสคริปต์ของฉันดังนั้นฉันไม่ต้องกังวลเกี่ยวกับช่องว่างแบ่งบรรทัด ฉันเกลียดการหลบกลับจากการขึ้นบรรทัดใหม่และ VB-isms อื่น ๆ
ส่วนที่เหลือเป็นความคิดเห็นของฉัน:
ใช้ชื่อจริงหรือชื่อแทน cmdlet หรือไม่
จะไม่คลุมเครือ อย่าใช้นามแฝงในสคริปต์ที่บันทึกไว้ แม้กระทั่งนามแฝงเริ่มต้น ไม่มีอะไรหยุดผู้ใช้จากการเปลี่ยนนามแฝงเริ่มต้น มันปลอดภัยกว่าที่จะคิดว่าพวกมันไม่เปลี่ยนรูป
ระบุชื่อพารามิเตอร์ cmdlet เป็นแบบเต็มหรือบางส่วนเท่านั้น (dir -Recurse กับ dir -r)
อีกครั้งไม่ต้องสงสัย ชื่อพารามิเตอร์แบบเต็มมีความเข้ากันได้ดีที่สุด -r
อาจจะไม่ชัดเจนในวันนี้ แต่ไม่มีอะไรหยุดรุ่นอนาคตของคำสั่งจากการแนะนำพารามิเตอร์ใหม่ คุณกำลังจะใช้ IDE (ทั้ง ISE หรือ VS Code) กดCtrl+ Spaceและเติมพารามิเตอร์อัตโนมัติให้สมบูรณ์
ทราบว่าls -r
เป็นที่คลุมเครือ เป็นพารามิเตอร์ของผู้อื่น-ReadOnly
Get-ChildItem
เมื่อระบุอาร์กิวเมนต์สตริงสำหรับ cmdlets คุณใส่คำพูดไว้ในเครื่องหมายคำพูด (New-Object 'System.Int32' กับ New-Object System.Int32
โดยทั่วไปควรใช้อัญประกาศเฉพาะเมื่อจำเป็นเท่านั้น (เช่นNew-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
ใช้คำพูดเดี่ยวเมื่อคุณสามารถทำได้และใช้เครื่องหมายคำพูดคู่เฉพาะเมื่อคุณจำเป็นต้องใส่ในเครื่องหมายคำพูดเดี่ยวหรือต้องการฝังตัวแปร
เมื่อคุณเขียนฟังก์ชั่นและตัวกรองคุณระบุประเภทของพารามิเตอร์หรือไม่
ฉันมักจะทำเว้นแต่ฉันจะต้องยอมรับประเภทที่หลากหลายด้วยพารามิเตอร์เดียวกันโดยเฉพาะและไม่ต้องการเขียนชุดพารามิเตอร์แต่ละชุด
คุณเขียน cmdlets ในกรณีที่ถูกต้อง (เป็นทางการ) หรือไม่?
กรณีปาสกาล ใช่.
สำหรับคำหลักเช่น BEGIN ... กระบวนการ ... END คุณเขียนด้วยตัวพิมพ์ใหญ่เท่านั้นหรือไม่
ผมเคยเห็นงบประกอบการและโครงสร้างภาษาBegin
, If
, ForEach
, -NotIn
เช่นเดียวกับbegin
, if
, ,foreach
-notin
โดยส่วนตัวแล้วฉันชอบตัวพิมพ์เล็กและใช้คำสั่งเป็นตัวพิมพ์เล็ก แต่ก็เหมือนกันทั้งคู่
อื่น ๆ :
ระบุพารามิเตอร์เสมอ อย่าพึ่งพาคำสั่งตำแหน่ง มากกว่าNew-Object -TypeName System.Int32
New-Object System.Int32
ฉันไม่ทราบว่ามีการตกลงกันหรือไม่ แต่ดูเหมือนว่าจะสนับสนุนแนวคิดทั่วไปของ
Get-Verb
ถ้าผมเขียนโมดูลผมใช้คำกริยามาตรฐานที่ระบุไว้โดย รายการนี้แคบมาก ๆ ดังนั้นชื่อสคริปต์แบบสแตนด์อโลนสำหรับสคริปต์ที่มีเพียงฉันเท่านั้นที่จะทำงานไม่ได้ Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
ปัญหาเกี่ยวกับรายการกริยาทั่วไปก็คือว่ามันมีแนวโน้มที่ต่อเข้า ถ้าผมเขียนสคริปต์ที่สารสกัดจากหน้าเว็บบางหน้าจากไฟล์ PDF Get-ExtractedAccountPDFPages.ps1
ที่ฉันไม่ได้เรียกมันว่า Extract-AccountPDFPages.ps1
ผมเรียกมันว่า ฉันไม่กังวลเกี่ยวกับการค้นพบสคริปต์ที่ทำงานเป็นโปรแกรมและไม่ได้ตั้งใจให้เป็นแบบแยกส่วนเพราะเป็นเรื่องปกติ
ทำลายกฎเมื่ออ่านง่ายกว่าเป็นรูปธรรมมากขึ้นหรือบำรุงรักษาได้มากขึ้น