Các tài liệu trong câu trả lời của @ oɔɯǝɹ là một nguồn tốt, nếu hơi tiếp tuyến.
Nếu bạn sử dụng Visual Studio Code, được lên kế hoạch để thay thế PowerShell ISE đã cũ, sau đó cài đặt tiện ích mở rộng VS Code PowerShell , bao gồm một số tùy chọn định dạng ít nhất một phần dựa trên Hướng dẫn về phong cách và thực tiễn tốt nhất của PowerShell . Cả VS Code và tiện ích mở rộng PowerShell đều do Microsoft quản lý, do đó, đây là hướng dẫn chính thức như một hướng dẫn không chính thức.
Tôi không đồng ý với mọi thứ họ nêu. Ví dụ: tôi đến từ PHP, Java, C # và SQL nơi có dấu chấm phẩy nếu không cần thiết. Mã có vẻ sai đối với tôi mà không có họ, vì vậy tôi bao gồm chúng. Nếu có một cái #requires SemicolonTerminator
tôi sẽ kích hoạt nó trên hầu hết các tập lệnh của mình thì tôi không phải lo lắng về việc khoảng trắng sẽ phá vỡ một dòng. Tôi ghét việc quay trở lại xe ngựa và các đồng vị VB khác.
Phần còn lại là ý kiến của tôi:
Sử dụng tên cmdlet thực hay bí danh?
Hãy rõ ràng. Không bao giờ sử dụng bí danh trong tập lệnh đã lưu; thậm chí là một bí danh mặc định. Không có gì ngăn người dùng thay đổi bí danh mặc định. Sẽ an toàn hơn khi cho rằng chúng không bất biến.
Chỉ định tên tham số cmdlet đầy đủ hoặc chỉ một phần (dir -Recurse so với dir -r)
Một lần nữa, hãy rõ ràng. Tên tham số đầy đủ có khả năng tương thích tốt nhất. -r
có thể không rõ ràng ngày hôm nay, nhưng không có gì ngăn cản các phiên bản tương lai của lệnh giới thiệu các tham số mới. Bạn sẽ sử dụng IDE (Mã ISE hoặc VS). Nhấn Ctrl+ Spacevà tự động hoàn thành tham số đó.
Lưu ý đó ls -r
là mơ hồ. -ReadOnly
là một tham số khác của Get-ChildItem
.
Khi chỉ định đối số chuỗi cho lệnh ghép ngắn, bạn có đặt chúng trong dấu ngoặc kép (New-Object 'System.Int32' so với New-Object System.Int32
Nói chung, chỉ nên sử dụng dấu ngoặc kép khi cần thiết (ví dụ: New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
Sử dụng dấu ngoặc đơn khi bạn có thể và chỉ trích dẫn khi bạn cần đóng gói dấu ngoặc đơn hoặc cần nhúng biến.
Khi viết các hàm và bộ lọc bạn có chỉ định các loại tham số không?
Tôi thường làm, trừ khi tôi đặc biệt cần chấp nhận nhiều loại với cùng một tham số và không muốn viết các bộ tham số riêng lẻ.
Bạn có viết lệnh ghép ngắn trong trường hợp đúng (chính thức) không?
Trường hợp Pascal. Đúng.
Đối với các từ khóa như BEGIN ... QUY TRÌNH ... HẾT bạn chỉ viết chúng bằng chữ hoa?
Tôi đã nhìn thấy báo cáo, các nhà khai thác, và các cấu trúc ngôn ngữ như Begin
, If
, ForEach
, -NotIn
cũng như begin
, if
, foreach
, -notin
. Cá nhân, tôi thích chữ thường và để lại các lệnh như trường hợp Pascal, nhưng cả hai đều phổ biến như nhau.
Khác:
Luôn chỉ định tham số. Đừng dựa vào thứ tự vị trí. New-Object -TypeName System.Int32
trên New-Object System.Int32
. Tôi không biết nếu điều đó được thỏa thuận, nhưng, một lần nữa, nó dường như ủng hộ ý tưởng chung về "không mơ hồ".
Nếu tôi đang viết một mô-đun, tôi sử dụng các động từ tiêu chuẩn được chỉ định bởi Get-Verb
. Tuy nhiên, danh sách này cực kỳ hẹp, vì vậy tên tập lệnh độc lập cho các tập lệnh mà chỉ bản thân tôi sẽ chạy thường không có. Vấn đề với danh sách động từ chung là nó có xu hướng hướng vào Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Nếu tôi đang viết một tập lệnh trích xuất một số trang nhất định từ tệp PDF, tôi sẽ không gọi nó Get-ExtractedAccountPDFPages.ps1
. Tôi đang gọi nó Extract-AccountPDFPages.ps1
. Tôi không quan tâm đến khả năng khám phá của một tập lệnh chạy như một chương trình và không có ý định được mô đun hóa bởi chính bản chất của nó.
Phá vỡ các quy tắc khi nó dễ đọc hơn, cụ thể hơn hoặc dễ bảo trì hơn.