Windows PowerShell: 指令碼的損毀課程

此延伸的 Windows PowerShell 專欄能夠促進您對這項超強技術的認識。

Don Jones

多個您會 Windows PowerShell 消化並瞭解其優點。這一點之後,本月的專欄即將成為一份很長。這是 Windows PowerShell 指令碼的閃電概觀包括如何建立參數化的指令碼。在接下來的幾個月,我將著重在此基礎建置的特定主題。

如果不是使用來執行主控台的 Windows PowerShell 命令,可以發現這太進階,但嘗試仍要的劃分到。您應該徹底了解 Windows PowerShell 安全性功能。您應該已經知道有關執行原則,且知道什麼設定您正在使用。如果您不知道"RemoteSigned"和"AllSigned,"之間的差異,以及其中一個可能比其他的原因,您可能無法供以下資料。

您也應該要知道如何在命令介面中,執行指令碼,並應該還記得您永遠都有提供路徑和檔名,以便執行指令碼。最後,您還應該知道在整合式指令碼環境 (ISE),並在主控台中執行指令碼之間的差異。ISE,在全域範圍中執行指令碼。在一般的殼層主控台中,指令碼會取得自己的範圍。我將會檢視範圍內,但您應該已經了解它的意義,以及它的功用。

如果您不覺得很趕上腳步,看看我的活頁簿中,"月份的書籍中學習 Windows PowerShell」 (Manning 出版物,2011年),以及 同一系列文件的 Web 站台 ,看看如果這些資源可以幫助您建置更穩固的基礎。

請試著跟著您先閱讀本篇文章中。請試著範例。如果您鍵入 (或複製並貼上) 到 Windows PowerShell ISE,開始於第 1 行指令碼範例,行號會對應與說明中的行號。

Windows PowerShell 指令碼檔案

Windows PowerShell 指令檔只是具有純文字檔案。PS1 檔名的副檔名。"1"未參考的 Windows PowerShell 版本,但而語言引擎的版本。Windows PowerShell 版本 1 和 2 使用的語言引擎第 1 版。這就是為什麼殼層的兩個版本會安裝到 v1.0 資料夾之下的 \Windows\System32\WindowsPowerShell。

Windows PowerShell 指令碼並非完全相同命令列批次檔,而且執行指令碼不精確地自行執行相同的命令,以相同順序相同。比方說,開啟主控台視窗,然後執行下列命令,在每一行之後按下 Enter 鍵 (請記住,不可以在此輸入行號):

Get-Service Get-Process

現在輸入指令檔或 ISE 指令碼編輯窗格中,並執行指令碼中的這些完全相同的行。 您會得到不同查詢結果。 您每次您按下 Enter,在 Windows PowerShell 中的啟動新的管線。 不論您所輸入的命令會執行該單一管線中。 在管線的最後,Windows PowerShell 會將它的內容轉換成文字顯示。 當您執行兩個命令在一般的主控台時,您已經在兩個不同的管線來執行此動作。

Windows PowerShell 已建構輸出的每一組唯一的顯示。 當您輸入到指令碼,不過,這兩個指令執行在相同的管線。 並不複雜的系統設定格式化的 Windows PowerShell 不足,無法建造相同唯一的輸出為兩組不同的結果。 請嘗試重新執行這個主控台中:

Get-Service;Get-Process

當您執行含有這些兩個命令的指令碼一樣,這些結果應該相同。 在此情況下,這兩個命令會在單一管線中執行。 這就是您執行指令碼時,發生了什麼事。

實際的結論,所有的這是指令碼都應該產生輸出的一種。 很好的主意,由於大部分的格式設定的系統限制。 一些其他考量,以及。 您不想至管線傾許多不同種類事物,同時在同一個指令碼。

著重於,一般而言,我們將討論的所有項目。 指令碼應產生輸出的只有一個型別。 它是否為儲存機制用於多個函式的指令碼是唯一的例外狀況。 在此情況下,每個函式應該會產生輸出的只有一個型別。

變數

您可以將變數想像成方塊。 您可以將一或多個項目,甚至不相似的項目,在這個方塊。 在方塊內有一個名稱,並在 Windows PowerShell 該名稱可以包含幾乎是任何項目。 "Var"可以是變數的名稱,如同 「 {我變數} 」。 在上述的第二個範例中,大括號括住變數的名稱包含空格,也就是很醜。 很好的作法是堅持變數的名稱,包括字母、 數字及底線。

使用變數的名稱會參考整個"box"。如果您想要參照] 方塊中的內容,新增貨幣符號: $ 時間差異 通常,您會看到 Windows PowerShell 變數前面要加上錢幣符號因為使用其中一種的重點是要取得內容。 請務必記得,錢幣符號不是變數名稱的一部分。 這是只是告訴 Windows PowerShell 的內容,而不是該方塊的提示。 範例:

$var = 'hello' $number = 1 $numbers = 1,2,3,4,5,6,7,8,9

這些範例會示範如何將項目放入使用指派運算子 (=) 的變數。 該最後一個範例先建立,因為 Windows PowerShell 會將所有的逗號分隔清單解譯為一個陣列或項目的集合。 第一個範例會指定包含在引號的字串中字元的字串物件。

還有一個方面的可能會混淆新手的 Windows PowerShell。 Windows PowerShell 不 「 瞭解 」 您可以將變數的名稱與任何意義。 變數的做法 $ 電腦名稱並未 「 說明 」 殼層變數會包含電腦名稱。

同樣地,$ 數字並未 「 說明 」 殼層變數會包含一個以上的數字。 如果您使用複數的變數名稱,就不關心殼層。 下列陳述式

$numbers = 1

都同樣有效到殼層,原狀

$numbers = 'fred.'

當變數不會包含多個值時,不過,您就可以使用特殊的語法來存取只是其中一。 您可以使用 $ 數字 [0] 成為第一個項目,$編號 [1] 是第二個、 $ 數字 [-1] 是最後一個,$ 數字-[2] 是第二個最後一個,依此類推。

引號

最佳的作法是使用單引號分隔的變數,除非有特定的理由,否則。 有三個特定的執行個體,您會想使用雙引號。

首先,當您要插入至字串的變數的內容。 只有雙引號括起來,Windows PowerShell,看起來,然後就可以取得 $,回到第一個變數的名稱中不合法的字元之後的所有內容是變數的名稱。 變數的名稱,並將 $,將會取代該變數的內容:

$name = 'Don' $prompt = "My name is $name"

$提示將現在包含 「 我的名字不 」,因為 $名稱會取代變數的內容。 這是一個很棒的技巧,而不必將它們串連在一起加入字串。

雙引號括起來,Windows PowerShell 也會尋找其逸出字元、 反單引號或抑音符號,並採取適當動作。 下面是幾個範例:

$debug = "`$computer contains $computer" $head = "Column`tColumn`tColumn"

在第一個範例中,第一個 $ 是要 「 逸出。 」如此便會移除其特殊的意義,與變數的存取子。 如果 $電腦所包含的伺服器], 然後 $ 偵錯會包含"$ 電腦包含伺服器"。

在第二個範例中,' t 代表水平定位字元,所以 Windows PowerShell 會將每個資料行之間的一個索引標籤。 您可以學到命令介面的其他特殊逸出字元 about_escape_characters [說明] 主題。

最後,請使用雙引號,當字串必須包含單引號:

$filter1 = "name='BITS'" $computer = 'BITS' $filter2 = "name='$computer'"

在這個範例中,常值字串是名稱 = '位元'。雙引號內包含整個段落。 $ 不存在,並 $filter2 得到包含完全相同的動作,但是 $filter2 取得並使用變數取代這一輪的雙引號。 請注意,只有最外層一組雙引號實際上重要。 在字串中的單引號不要 Windows PowerShell 到重要的。 這些單引號不只是常值的字元。 Windows PowerShell 不會解譯它們。

物件成員和變數

在 Windows PowerShell 中的所有項目是一個物件。 如 「 名稱 」 更簡單的字串是 System.String 型別的物件。 您可以管道取得成員即可查看其型別名稱 (也就是它是的物件的種類) 的任何物件,以及它的成員,包括它的屬性和方法:

$var = 'Hello' $var | Get-Member

告訴 shell 所使用的變數名稱之後的時間、 「 我不想存取這個變數的整個物件。 我要存取只是其中一個屬性或方法。期間之後, 提供的屬性或方法名稱。

方法名稱永遠會接著一組括號。 某些方法會接受輸入的引數,甚至那些在逗號分隔的清單中的括弧內。 其他方法需要任何引數,並因此括號是空的但別忘了括號:

$svc = Get-Service $svc[0]. name $name = $svc[1]. name $name.length $name.ToUpper()

請注意兩行。 同時也會藉由存取 $svc 變數中的第一個項目。 週期的方式,「 我不想整個物件。 我只想屬性或方法。這會存取 name 屬性。 列 5 將說明如何存取的方法,藉由提供一段時間之後, 它的名稱,後面接著括號。

一段時間通常是不合法的字元內變數的名稱,因為句號表示我們想要存取的屬性或方法。 也就是說,如下例所示兩個線條將不會運作不如預期的方式:

$service = 'bits' $name = "Service is $service.ToUpper()" $upper = $name.ToUpper() $name = "Service is $upper"

在兩行中,$名稱會包含 「 服務是位元。"ToUpper() 而在四行 $名稱會包含 「 服務 」 位元。

括號

除了從物件方法的用法,括號也做為執行順序標記的 Windows PowerShell 就像在代數。 亦即,括號會告訴命令介面 」 執行此第一個"。整個放在括號運算式就會取代該運算式所產生的任何內容。 下面是 mind-bending 的幾個範例:

$name = (Get-Service)[0]. name Get-Service -computerName (Get-Content names.txt)

在一列,$名稱將包含在系統上的第一個服務的名稱。 閱讀本文章花一點心思。 括號運算式的開頭。 這是什麼 Windows PowerShell 的開頭也。 "取得服務"解析成集合或陣列的服務。 [0] 存取陣列中,第一個項目,所以這會是第一個服務。 因為它由一個句點接下來,我們知道我們正在存取的屬性或方法,該服務,而不是整個服務物件。 最後,我們會拉出服務的名稱。

在兩行中,括號運算式讀取文字檔的內容。 假設該檔案包含的每一行,「 取得內容 」 的一個電腦名稱"會傳回電腦名稱的陣列。 那些紙送進"–computerName"參數的 「 Get-服務 」。在此情況下,命令介面可以摘要傳回的字串陣列的任何放在括號運算式
"–computerName"參數,因為參數為了接受字串陣列。

範圍

範圍是一種程式設計概念,做為 containerization 的系統。 已經儲存像是變數、 別名、 PSDrives 及其他的 Windows PowerShell 項目範圍內。 殼層維護的領域,階層架構,並有一組規則,以決定如何互動並彼此分享資訊的範圍。

殼層本身是單一的領域,稱為全域範圍。 當您執行指令碼時,就會建構新的範圍,並在其中執行的指令碼。 指令碼,例如新的變數,建立的任何項目會儲存指令碼的範圍內。 它不是可存取的最上層的殼層。

當指令碼完成執行時,其範圍會被捨棄,而清單中的任何項目建立該範圍就會消失。 例如,建立包含下列的指令碼 (別忘了輸入行號),然後從 [主控台] 視窗中執行這段指令碼:

New-PSDrive -PSProvider FileSystem -Root C:\ -Name Sys Dir SYS:

執行後指令碼,以手動方式執行"Dir SYS:",您應該會看到錯誤。 這是因為 SYS: 指令碼中所建立的磁碟機。 一旦完成指令碼,它所建立的所有項目已被捨棄。 SYS: 磁碟機不存在。 並非所有命令介面中的範圍限定。 在任何時候全域處理的項目例如模組。 指令碼可以載入模組和模組都已載入,指令碼完成之後。

如果領域嘗試存取不建立該範圍內的項目時,Windows PowerShell 就會到下一個較高的領域 (「 上層 」 的範圍)。 這就是為什麼 Dir 別名運作,因為您剛才的指令碼的輸入。 雖然目錄不存在指令碼的範圍內,它的下一個較高的範圍中存在: 全域範圍。 領域是自由地建立同名項目從較高層級的範圍,不過項目。 下面是嘗試另一個指令碼:

Dir New-Alias Dir Get-Alias Dir

可能看起來怪怪的但是第一次執行 「 Dir 」,它不存在指令碼的範圍內。 它使用較高層級的 Dir 別名。 該別名指向 Get-childitem,所以它會顯示類似目錄清單。

然後,指令碼建立新的別名,稱為 dir。 這會指向 Get 別名。 這是什麼執行第二次。 雖然這些受影響的最上層目錄的別名。 請嘗試重新執行 Dir 命令介面中,在執行前一個指令碼中之後,您仍然會收到目錄清單。

談到變數,範圍可以是特別令人混淆。 一般而言,在指定的範圍應該永遠不會存取範圍外的項目,特別是變數。 這樣,例如使用 $通用的語法: var 強制存取全域範圍 $var 變數,但這是除了在非常特殊的情況下不好的作法。

Windows PowerShell 指令碼語言

Windows PowerShell 包含少於二十關鍵字的最簡單的指令碼語言。 這就是完整的程式設計語言,如 vbscript 之類,包含幾乎 300 關鍵字要成為黑白強烈對比。

雖然很簡化,Windows PowerShell 語言是綽綽有餘這項工作。 現在,雖然您永遠可以取得更多說明這些藉由讀取適當的 [關於] 命令介面中的主題,我將會檢視其主要指令碼的建構。 比方說,幫助 about_switchcontains 參數的建構的詳細資訊,而說明 about_if 包含有關 If 建構。 執行 [說明有關 * 對所有 「 關於 」 主題的清單。

If 建構

這是 Windows PowerShell 主要決策建構。 在完整的表單中,它看起來像這樣:

If ($this -eq $that) { # commands } elseif ($those -ne $them) { # commands } elseif ($we -gt $they) { # commands } else { # commands }

"If"關鍵字是強制的組件,這個建構。 括號運算式如下必須評估 True 或 False。 Windows PowerShell 時,永遠會解譯零做為 False 和任何非零的值為 True。

Windows PowerShell 也會將內建的變數 $True,且 $False 會視為代表這些的布林值。 如果在括號內運算式可,則為 True,則下列組大括號中的命令執行。 如果運算式為 False,則不會執行命令。 這真的是所有您需要為有效的 If 建構。

您可以進一步藉由一或多個 「 ElseIf 」 區段。 相同方式為 If 建構這些工作。 取得這個鏡頭 — 自己放在括號的運算式。 如果是 True,則會執行下列的大括號內的命令。 如果沒有,則不會。

您可以總結 Else 區塊內,但如果沒有前一個區塊的執行會執行。 只將第一個,則為 True 的運算式相關聯的區塊會在執行中。 比方說,如果 $這不是等於 $,和 $那些是否不等於的 $它們,然後在四行命令將會執行,而無其他內容。 Windows PowerShell 甚至不會評估五列的第二個 elseif 運算式。

# 字元是註解字元,使傳回的 Windows PowerShell 基本上忽略從該處的任何項目,直到一個換行符號。 另外也請注意這些建構的設定與照顧。 您也可能會看到有些人從格式設定,就像這樣:

但這無所謂放置大括號的位置。 不過,不會有的影響是您一致您放置在讓您的指令碼可以輕易地讀取。 也很重要,以完全相同的層級中,每一行縮排大括號內。

Windows PowerShell 的 ISE 讓您使用 Tab 鍵來達到此目的,並且其預設值為 4 個字元縮排。 縮排程式碼是核心的最佳作法。 如果不這麼做,您必須正確地比對開頭和結尾大括號,以複雜指令碼很難時間。 此外,所有其他的 Windows PowerShell 兒童付你的樂趣。 看看這個不良格式的指令碼:

function mine { if ($this -eq $that){ get-service }}

這是很難閱讀、 偵錯、 疑難排解和維護。 而在右括號後面的間距不必要的它不會讓您的指令碼更容易閱讀。 縮排程式碼其實沒有必要的但是您的指令碼容易理解。 而是考慮這一點:

function mine { if ($this -eq $that){ get-service } }

殼層中,不必要的一個單一的右大括號置於單獨的一行,但它感謝的人類的眼睛。 是簡潔的格式子,而且您必須在您的指令碼較少的問題。

請勿在建構

這是在 Windows PowerShell 中的迴圈建構。 它的設計是只要某條件為 True,或直到條件變成重複的命令區塊,則為 True。 以下是基本的使用方式:

Do { # commands } While ($this -eq $that)

建構的變化,會永遠至少發生一次執行的大括號內的命令。 While 等到後第一次執行,則不評估條件。 您可以移動段時間,在此情況下命令才能執行如果條件為 True,在第一時間內:

While (Test-Path $path) { # commands }

注意第二個範例中並不會使用比較運算子,例如-eq. 這是因為測試路徑指令程式一開始先傳回 True 或 False 會受到影響。 沒有必要進行比較,設為 True 或 False 為了要使用的運算式。

為了簡化為 True 或 False 放在括號運算式只是使用這些指令碼的建構。 如果您使用的測試路徑] 等指令,它一定會傳回 True 或 False,這是所有您需要的。 如同以往一樣,示範如何使用這個建構的其他方式命令介面中沒有 「 關於 」 主題。

ForEach 建構

這個建構是類似指令的作業中。 只能在它的語法不同。 ForEach 的目的是取得陣列 (或集合,但在 Windows PowerShell 陣列一樣),並列舉陣列中的物件,以便您可以在使用一次:

$services = Get-Service ForEach ($service in $services) { $service.Stop() }

很容易 overthink 這個建構的新手。 請記住複數的英文字 「 服務 」 並不表示為 Windows PowerShell 的任何項目。 該變數的名稱用來提醒我們裡面有一或多個服務。 只是因為它是複數時,才會讓殼層以特殊方式來運作。

"In"關鍵字在兩行是 ForEach 語法的一部分。 $服務變數是由組成。 它無法輕易地被的 $fred 或 $咖啡,而且它會參加同樣的方式。

Windows PowerShell 會重複此建構的指令 — 包含在大括號內的那些 — 每個物件在第二個變數 ($服務) 中一次。 每一次,它將會從第二個變數 ($服務) 的單一物件,並將它放在第一個變數 ($服務)。

在這個建構中,使用第一個變數 ($服務) 使用個別的物件。 在第三行中的點代表 「 我不想使用整個物件,只是其中一個成員 — Stop 方法。"

很多時候當使用 ForEach 是無可避免,令人滿意。 不過,如果您有一些程式設計或指令碼處理經驗,有時候可以迅捷使用 ForEach,當它不是最好的方法。 前一個範例不是使用 ForEach 充分的理由。 這並不會比較容易:

Get-Service | Stop-Service

這裡的重點是要評估的 ForEach 使用。 請確定這是唯一的方式來完成手邊的工作。 以下是某些情況下,ForEach 可能是唯一合理的選擇:

  • 當您需要執行對物件有許多方法,而且沒有任何指令程式,以執行相等的動作。
  • 當您舉辦一系列的物件,並需要執行幾個連續的動作,針對每一個。
  • 當您執行的動作,只能對一個物件一次,但您的指令碼可能會使用一或多個物件,而您有無法事先知道。

其他建構

Windows PowerShell 有數個其他指令碼建構,如此類推包括參數。 這些會全部記錄在 「 關於 」 命令介面中的 [說明] 主題。 某些情況下,您可以使用這裡說明如何以取代這些其他建構的結構。 例如,您可以使用 If 取代參數會使用多個 ElseIf 區段的建構。 使用 ForEach,或甚至指令,您可以對進行取代。 比方說,有可能不會確實列出 10 個次迴圈:

1..10 | ForEach-Object -process { # code here will repeat 10 times # use $_ to access the current iteration # number }

它是由您選取最佳的建構來完成工作。 如果您正在瀏覽 Internet 上的有指令碼,準備好執行跨所有變化。

函數

函數是建構的一種特殊用來包含一群執行單一、 特定工作的相關指令。 一般而言,就可以 Windows PowerShell 中的任何指令碼,「 包裝 」 該函式中:

function Mine { Get-Service Get-Process } Mine

用來定義新的函式,稱為"Mine"。基本上變成我某個命令時,這表示您可以執行函式,只要輸入它的名稱。 這是哪一行五個執行。 它會執行函式。

函式通常都包含在指令碼檔案中。 單一指令碼可以包含多個函式。 函式可以自行甚至包含其他的函式。

不過,函式是範圍內的項目。 這表示您只能在其建立所在的相同範圍內使用函式。 如果您將函數放入指令檔,然後執行該指令碼時,此函式只能使用在指令碼中,且僅供指令碼的持續時間。 在指令碼完成執行時,此函式 — 要一切指令碼的範圍中 — 消失。 以下即為一例:

function One { function Two { Dir } Two } One Two

假設您輸入到一個單一的指令檔,並執行該指令碼。 線條七執行函式一開始於一列。 列五個執行的函式名為 2,在兩行所啟動的。 讓結果會是目錄清單,也就是在一行,三個函式兩者。

不過,執行下一行會是一行八個,而且這會導致錯誤。 指令碼未包含名為兩個函式。 函式兩者就埋一函式中。 如此一來,在於函式的一個範圍內。 其中一個函式中的其他方面,可以看到兩個。 嘗試從任何其他兩個呼叫會導致錯誤。

將參數加入至指令碼

很難建立要執行完全相同的作業,每次執行的指令碼。 更頻繁地,您必須包含變數的資料,或變數的行為的某些類型的指令碼。 您可以考慮到這些參數的變化。

在指令碼的頂端以特殊方式定義參數。 您可以在前面加上註解,此定義,但否則,它必須是第一個可執行程式碼,在指令碼中。 在 [參數定義] 區域中,每個參數是與下一個逗點分開。 跟上簡潔的格式設定的概念,很有幫助放置在其本身的行上的每個參數。 範例如下:

param ( [string]$computername, [string]$logfile, [int]$attemptcount = 5 )

這個範例會定義三個參數。 在指令碼,這些只可用和任何其他變數一樣。 您會注意到在四行中,我指派預設值為 $attemptcount 參數。 預設值會覆寫任何輸入參數,但如果沒有指定這個參數執行指令碼就會使用。

下面是幾種方式,在其中的指令碼可能會執行,假設我存 Test.ps1:

./test -computername SERVER ./test -comp SERVER -log err.txt -attempt 2 ./test SERVER err.txt 2 ./test SERVER 2 ./test -log err.txt -attempt 2 -comp SERVER

指令碼接受幾乎就像任何 cmdlet 的參數。 變數名稱做為參數名稱,指定以平常連字號在 Windows PowerShell 之前所有的參數名稱。 以下是如何運作的分析:

  • 在一列,我只能指定其中一個參數,$ 記錄檔會因此是空的且 $attemptcount 將包含 5,其預設值。
  • 在兩行中,我雖然我做的使用減短的參數名稱,指定所有的三個參數。 就如同指令程式,您只需要輸入足夠的哪種所談論的 Windows PowerShell 的參數名稱。
  • 第三行顯示一次所有的三個參數,雖然我這麼依位置,而不使用參數名稱。 只要我也還記得提供指令碼中有列出參數的正確順序的值,即可運作。
  • 如果您不小心,會發生什麼事的情況下一行四個節目。 在這裡,$ 電腦名稱會包含 [伺服器] 而且 $ 記錄檔會包含 2,而 $attemptcount 將包含 5。 這就可能不是我想要的。 當您不使用參數名稱時,是很難具彈性。 也很難進行解碼所想,這讓它很困難,以便疑難排解任何問題的其他人。
  • 五個的線條會更好的範例。 在這裡,我所指定的參數順序,但可正常運作是因為我使用參數名稱。 一般的規則是,我永遠使用最高等級的彈性的參數名稱。 我不需要記得其來源的順序。

進階指令碼

Windows PowerShell 會支援一種技術,以指定參數的其他資訊。 這可讓您宣告參數為強制性,接受來自管線的輸入等等。 這種技巧稱為指令程式繫結。

它不會變更指令碼會使用參數的方式。 它只是讓命令介面的參數的詳細資訊。 您會發現這個規則較常用於函式中的技術,但在語法中是有效的指令碼。 請看以下簡單範例:

[CmdletBinding()] param ( [Parameter(Mandatory=$True)] [string]$computername, [Parameter(Mandatory=$True)] [string]$logfile, [int]$attemptcount = 5 )

我新增的只是做為第一個可執行的指令碼內的程式碼行的 [CmdletBinding()] 指令。 沒有關係之前,但無其他內容的註解。 我也會新增到兩個我參數的 [Parameter()] 指令。 在該 [Paramater()] 指令時,我已經指出這些參數是強制性。 現在,如果某人嘗試執行指令碼,而不需要指定這些參數,Windows PowerShell 會提示他們輸入資訊。

請注意最後一個參數不會有任何特殊的指示,請而且所有的三個參數仍會出現在 [逗點分隔的清單 (表示前兩個參數會接著以逗點)。 有很大費周章,您可以指定為參數,您可以在閱讀有關其他指令的 about_functions_advanced_parameters [說明] 主題。

這是旋風檢閱的一些重要 Windows PowerShell 有關指令碼 」 的概念。 我希望您學到一些東西。 建立參數化的指令碼是特別有用,因為您可以讓查詢,且行為類似 Windows PowerShell 的原生指令程式的指令碼。

Don Jones

**Don Jones**是一個 Microsoft MVP 獎收件者 」 和 「 午餐 」 了解 Windows PowerShell 中月份的食譜 」 (Manning 出版物,2011年),設計來幫助系統管理員會變得有效率地使用 Windows PowerShell 一本書的作者。 先生也會提供公用的並附有 Windows PowerShell 教育訓練。 與他聯絡透過他的網站,在 ConcentratedTech.com

相關內容