@ Oɔɯǝɹ'nun cevabındaki dokümanlar, eğer biraz teğet bir kaynaksa iyidir.
Yaşlanan PowerShell ISE'sini değiştirmesi planlanan Visual Studio Code'u kullanır ve ardından en azından kısmen Resmi Olmayan PowerShell En İyi Yöntemleri ve Stil Kılavuzu'na dayanan çeşitli biçimlendirme seçenekleri içeren VS Code PowerShell uzantısını yüklerseniz . Hem VS Kodu hem de PowerShell uzantısı Microsoft tarafından yönetilir, bu yüzden resmi olmayan bir kılavuz olabileceği kadar resmi.
Belirttikleri her şeye katılmıyorum. Örneğin, gerekli değilse noktalı virgüllerin beklendiği PHP, Java, C # ve SQL'den geliyorum. Kod onlarsız bana yanlış geliyor, bu yüzden onları dahil ediyorum. Bir olsaydı #requires SemicolonTerminator
ben bir çizgi kırma boşluk konusunda endişe gerekmez yüzden script'lerime çoğunda etkinleştirmek istiyorum. Kaçan satırbaşı ve diğer VB-izmlerinden nefret ediyorum.
Bunların geri kalanı benim görüşüm:
Gerçek cmdlet adını mı yoksa takma adını mı kullanıyorsunuz?
Açık olun. Kaydedilmiş bir komut dosyasında asla takma ad kullanmayın; varsayılan bir takma ad bile. Bir kullanıcının varsayılan takma adları değiştirmesini engelleyen hiçbir şey yoktur. Değişmez olduklarını varsaymak daha güvenlidir.
Cmdlet parametre adını tam veya yalnızca kısmen belirtin (dir -Recurse vs. dir -r)
Yine, açık olun. Tam parametre adları en iyi ileri uyumluluğa sahiptir. -r
bugün açık olabilir, ancak bir komutun gelecekteki sürümlerinin yeni parametreler eklemesini engelleyen hiçbir şey yoktur. Bir IDE (ISE veya VS Kodu) kullanacaksınız. Ctrl+ SpaceTuşuna basın ve bu parametreyi otomatik tamamlayın.
Not ls -r
olduğu belirsiz. -ReadOnly
parametresinin başka bir parametresidir Get-ChildItem
.
Cmdlet'ler için dize bağımsız değişkenleri belirtirken, bunları tırnak işaretleri içine alırsınız (New-Object 'System.Int32' ve New-Object System.Int32
Genel olarak, tırnak işaretleri yalnızca gerektiğinde kullanılmalıdır (örn., New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
Mümkün olduğunda tek tırnak kullanın ve tek tırnakları kapsüllemek veya değişkenleri gömmek gerektiğinde yalnızca tırnak işaretleri kullanın.
İşlevleri ve filtreleri yazarken parametre türlerini belirtir misiniz?
Özellikle aynı parametreye sahip çok çeşitli tipleri kabul etmem gerekmiyorsa ve tek tek parametre setleri yazmak istemediğimde genellikle yaparım.
(Resmi) doğru davaya cmdlet'ler yazar mısınız?
Pascal davası. Evet.
BEGIN ... PROCESS ... END gibi anahtar kelimeler için yalnızca büyük harfle yazıyor musunuz?
Ben gibi ifadeler, operatörler ve dil yapıları gördüm Begin
, If
, ForEach
, -NotIn
yanı sıra begin
, if
, foreach
, -notin
. Şahsen, küçük harf tercih ediyorum ve Pascal durumu olarak komutları bırakıyorum, ancak ikisi de eşit derecede yaygın.
Diğerleri:
Her zaman parametreleri belirtin. Konumsal düzene güvenmeyin. New-Object -TypeName System.Int32
bitti New-Object System.Int32
. Bunun üzerinde anlaşılıp anlaşılmadığını bilmiyorum, ama yine de, genel olarak "açık olun" fikrini destekliyor gibi görünüyor.
Bir modül yazıyorsam, ile belirtilen standart fiilleri kullanıyorum Get-Verb
. Ancak, bu liste son derece dardır, bu yüzden sadece kendim çalışacağım komut dosyaları için tek başına komut dosyası adları kullanmaz. Genel fiil listesindeki sorun, içine yönelmesidir Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Bir PDF dosyasındaki belirli sayfaları ayıklayan bir komut dosyası yazıyorsam, çağırmıyorum Get-ExtractedAccountPDFPages.ps1
. Ben arıyorum Extract-AccountPDFPages.ps1
. Bir programın kendisi olarak çalışan ve çok doğası gereği modüler olması amaçlanmamış bir komut dosyasının keşfedilebilirliğinden endişe etmiyorum.
Daha okunabilir, daha somut veya daha bakım yapılabilir olduğunda kuralları çiğneyin.