Dokumen dalam jawaban @ o are adalah sumber yang baik, jika agak tangensial.
Jika Anda menggunakan Visual Studio Code, yang direncanakan untuk menggantikan PowerShell ISE yang menua, dan kemudian instal ekstensi VS Code PowerShell , yang mencakup beberapa opsi pemformatan yang setidaknya sebagian didasarkan pada Panduan Praktik Terbaik dan Gaya Panduan PowerShell . Baik VS Code dan ekstensi PowerShell dikelola oleh Microsoft, jadi ini sama resminya dengan panduan tidak resmi.
Saya tidak setuju dengan semua yang mereka nyatakan. Misalnya, saya berasal dari PHP, Java, C #, dan SQL di mana titik koma diharapkan jika tidak diperlukan. Kode terlihat salah bagi saya tanpa mereka, jadi saya memasukkannya. Jika ada #requires SemicolonTerminator
saya akan mengaktifkannya pada sebagian besar skrip saya jadi saya tidak perlu khawatir tentang spasi putih melanggar garis. Saya benci melarikan diri kembali kereta dan VB-isme lainnya.
Sisanya adalah pendapat saya:
Gunakan nama cmdlet asli atau alias?
Bersikaplah jelas. Jangan pernah menggunakan alias dalam skrip yang disimpan; bahkan alias default. Tidak ada yang menghentikan pengguna untuk mengubah alias default. Lebih aman untuk menganggap mereka tidak berubah.
Tentukan nama parameter cmdlet secara penuh atau hanya sebagian (dir -Recurse versus dir -r)
Sekali lagi, jadilah ambigu. Nama parameter lengkap memiliki kompatibilitas maju terbaik. -r
mungkin tidak ambigu hari ini, tetapi tidak ada yang menghentikan versi masa depan dari suatu perintah untuk memperkenalkan parameter baru. Anda akan menggunakan IDE (baik ISE atau VS Code). Tekan Ctrl+ Spacedan lengkapi parameter itu secara otomatis.
Perhatikan bahwa ls -r
ini ambigu. -ReadOnly
adalah parameter lain dari Get-ChildItem
.
Ketika menentukan argumen string untuk cmdlet Anda menyertakannya dalam tanda kutip (New-Object 'System.Int32' versus New-Object System.Int32
Secara umum, tanda kutip hanya boleh digunakan bila perlu (mis New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
. , Gunakan tanda kutip tunggal jika Anda bisa, dan hanya tanda kutip ganda saat Anda perlu merangkum tanda kutip tunggal atau perlu menyematkan variabel.
Saat menulis fungsi dan filter, apakah Anda menentukan jenis parameter?
Saya biasanya melakukannya, kecuali saya secara khusus perlu menerima berbagai jenis dengan parameter yang sama dan tidak ingin menulis set parameter individu.
Apakah Anda menulis cmdlet dalam case (resmi) yang benar?
Kasus pascal. Iya.
Untuk kata kunci seperti MULAI ... PROSES ... AKHIR Anda menulisnya dalam huruf besar saja?
Saya telah melihat laporan, operator, dan konstruksi bahasa sebagai Begin
, If
, ForEach
, -NotIn
serta begin
, if
, foreach
, -notin
. Secara pribadi, saya lebih suka huruf kecil dan meninggalkan perintah sebagai huruf Pascal, tetapi keduanya sama-sama umum.
Lainnya:
Selalu tentukan parameter. Jangan mengandalkan pesanan posisional. New-Object -TypeName System.Int32
selesai New-Object System.Int32
. Saya tidak tahu apakah itu disetujui, tetapi, sekali lagi, tampaknya mendukung gagasan umum "menjadi tidak ambigu".
Jika saya menulis modul, saya menggunakan kata kerja standar yang ditunjukkan oleh Get-Verb
. Daftar ini sangat sempit, namun, nama skrip yang berdiri sendiri untuk skrip yang hanya saya sendiri yang akan sering jalankan tidak. Masalah dengan daftar kata kerja generik adalah bahwa ia cenderung ke arah Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Jika saya menulis skrip yang mengekstrak halaman tertentu dari file PDF, saya tidak menyebutnya Get-ExtractedAccountPDFPages.ps1
. Saya menyebutnya Extract-AccountPDFPages.ps1
. Saya tidak khawatir tentang kemampuan menemukan script yang berjalan sebagai program itu sendiri dan tidak dimaksudkan untuk bersifat modular.
Langgar aturan saat lebih mudah dibaca, lebih konkret, atau lebih bisa dipelihara.