共用方式為


Windows PowerShell: 的空白字元,請

適當的格式化 (包括順手加入一些空白字元) 可以使您的 Windows PowerShell 命令更加容易理解。

Don Jones

看看下列函式,並告訴我您認為它即可。 這是真實,完整功能 「 進階函數 」。您的目標是 (不需實際執行) 只是告訴我什麼它應該執行:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)][string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try {$continue = $true $cs = Get-WmiObject -EV mybad -EA Stop -Class Win32_computersystem -ComputerName $computer } catch {$continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } }if ($continue) { $proc = Get-WmiObject win32_processor -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj }}}}

它很難判斷,對吧吗? 這是因為這個函式會顯示 「 全部常見錯誤,指令碼和範例,您會發現,在網際網路上和的許多您自己的資料夾。 它不會使用空白字元。 現在請看這個修改過的範例:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try { $continue = $true $cs = Get-WmiObject -EV mybad -EA Stop ` -Class Win32_computersystem ` -ComputerName $computer } catch { $continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } } if ($continue) { $proc = Get-WmiObject win32_processor ` -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj } } } }

喔,那是更容易遵循。 {建構} 中的命令會縮排。 命令很長得很好換行。 它會比較容易閱讀。

它會因此更容易地讓他人能夠運用設定格式時,偵錯指令碼。 試著尋找放錯位置的單一或遺漏的大括號時並沒有用。 您無法移視力不佳。 問題在於許多您不知道如何達成這種格式設定。 現在讓我們解決該問題。

縮排

大多數的指令碼編輯器工作使用 Tab 鍵,包括可用 Windows PowerShell ISE Windows PowerShell 第 2 版安裝程式所附的很好。 一些將四或五個空格,而非實際的定位字元,但這是沒問題。 大部分可讓您反白顯示的命令區塊,然後按下索引標籤,以縮排它們全部或按 Shift + Tab 鍵縮排它們。

是十分方便,但是它卻要牢記尋找清除程式碼,進而輕易地執行這項操作。 大部分編輯器會同時維護您縮排,這表示當您完成鍵入一條線和叫用的輸入,游標會啟動下一行的同一個縮排的位置。

分行

這是許多小於-明顯這一輪,特別是在 Windows PowerShell 指令碼。 其概念是,試著避免行包裝在水平,除非絕對必要。 Windows PowerShell 實際上可讓您中斷行後會告訴命令介面有多個來自,] 時的任何字元包括:

  • 逗點
  • 分號
  • 管道

查看 「 增強 」 的範例,以瞭解我的意思。

您也可以使用 Windows PowerShell 逸出字元: 反單引號 (')。 逸緊接換行的反單引號,如果它 」 出 「 該換行字元。 這會強制將視為相同的邏輯行的一部份的實體下行的 Windows PowerShell。 換句話說,它是種行接續字元。 我討厭這一個,不過。 很難看到螢幕上和列印],而且很容易混淆您的監視器或在頁面上的 [碳粉偏離一死像素。

它也很容易誤用。 如果您遵循以空格、 索引標籤或另一個硬碟方式,請-參閱空白字元反,它將不會做為行接續字元。 它不會逸出換行。 我已使用過幾次在 「 增強 」 的範例中,如此您就可以看到它。 請隨意如果沒有更好的方式使用該技巧。

一致性

一致的格式是很重要的。 比方說,我想要執行建構函式,就像這樣:

if ($continue) { # some code goes here }

就像此格式設定好,而其他人:

if ($continue) { # some code goes here }

使用以格式化您,但挑選一個並嚴格遵守使用它。 目標是要讓您的程式碼,一致且容易閱讀。

返回先前畫面並重新格式化

挖掘那些醜陋舊的指令碼執行,並且花幾分鐘的時間,重新格式化這些部分。 您也會很好的友善進行任何不良的人必須在六個月走,並找出您所想的。 此外,機率是很好的 「 不良人員 」 將會是您。

Don Jones

**Don Jones**就是 Microsoft MVP 獎收件者的 「 了解 Windows PowerShell 中月的書籍"息 (Manning 的發行集安全,2010年),設計來幫助系統管理員會變得有效率地使用 Windows PowerShell 書籍作者。 先生也會提供公用及線上 Windows PowerShell 的訓練。 在他的網站透過網站與他聯絡 ConcentratedTech.com

相關內容