PowerShell介紹 第十三回 定義引數
阿新 • • 發佈:2019-02-18
經常看到一些指令碼可以接受某種形式的輸入所, 輸入的可能是一個計算機名稱、 檔案路徑等等。曾經我會覺得很神奇,但是現在我已經知道怎麼去定義一個引數了。下面我們就來一起學習學習吧。
其實,也挺簡單的,用到的就是一下句子:
Param( [string]$computerName, [string]$filePath)
可以定義多個接受輸入的引數,中間使用逗號隔開,前面可以加[string]等限定輸入的型別。
此外,它還可以定義更多的屬性,例如:
Param( [parameter(Mandatory=$true, ValueFromPipeline=$true)] [String[]] $ComputerName ) [parameter(Mandatory=$true意思是它是必需的;ValueFromPipeline=$true)意思是它接受管道輸入; [String[]意思是它接受字串陣列輸入。 parameter的屬性有許多種,下面一一列舉說明:1. 必須命名引數
[parameter(Mandatory=$true)] 必需實際引數表示在函式執行時形式引數是必需的。如果未指定此實際引數,則形式引數是可選的。2. 位置命名引數
[parameter(Position=0)] 位置實際引數指定形式引數的位置。如果未指定此實際引數,則在設定形式引數時必須明確指定該形式引數的名稱或別名。3. ParameterSetName 命名引數
ParameterSetName 實際引數指定形式引數所屬的形式引數集。如果未指定引數集,則引數屬於函式定義的所有引數集。此行為意味著每個引數集必須有一個不屬於任何其他引數集的唯一引數。以下示例顯示了屬於兩個不同引數集的兩個引數的引數宣告。 Param ( [parameter(Mandatory=$true, ParameterSetName="Computer")] [String[]] $ComputerName ) Param ( [parameter(Mandatory=$true, ParameterSetName="User")] [String[]] $UserName )4. ValueFromPipeline 命名引數
ValueFromPipeline 實際引數指定形式引數通過管道物件接受輸入。
5. ValueFromPipelineByPropertyName 命名引數
valueFromPipelineByPropertyName 實際引數指定形式引數通過管道物件的屬性接受輸入。6. ValueFromRemainingArguments 命名引數
ValueFromRemainingArguments 實際引數指定形式引數接受未繫結到函式形式引數的其餘所有實際引數。7. HelpMessage 命名引數
HelpMessage 實際引數指定包含對形式引數的簡短說明的訊息。例如: Param ( [parameter(Mandatory=$true, HelpMessage="this is An array of computer names")] [String[]] $ComputerName )8. Alias 屬性
Alias 屬性為引數指定另一個名稱。可分配給引數的別名數目沒有限制。例如:
Param
(
[parameter(Mandatory=$true)]
[alias("CN")]
[String[]]
$ComputerName
)
以上8種引數屬於靜態引數,另外還有一種引數叫做驗證性引數,這些屬性定義 Windows PowerShell 執行時如何驗證高階函式的引數。例如:
9. AllowNull 驗證屬性
AllowNull 屬性允許將 cmdlet 必需形式引數的實際引數設定為 Null。例如: Param ( [parameter(Mandatory=$true)] [String] [AllowNull()] $ComputerName )10. AllowEmptyString 驗證屬性
AllowEmptyString 屬性允許將空字串作為 cmdlet 必需形式引數的實際引數。11. AllowEmptyCollection 驗證屬性
AllowEmptyCollection 屬性允許將空集合作為必需形式引數的實際引數。12. ValidateCount 驗證屬性
ValidateCount 屬性指定形式引數可接受的實際引數的最小和最大數目。如果實際引數的數目超出該範圍,則 Windows PowerShell 執行時會生成錯誤。例如: Param ( [parameter(Mandatory=$true)] [String[]] [ValidateCount(1,5)] $ComputerName )13. ValidateLength 驗證屬性
ValidateLength 屬性指定形式引數的實際引數的最小和最大長度。如果形式引數的實際引數的長度超出該範圍,則 Windows PowerShell 執行時會生成錯誤。14. ValidatePattern 驗證屬性
ValidatePattern 屬性指定對形式引數的實際引數模式進行驗證的正則表示式。如果形式引數的實際引數與此模式不匹配,則 Windows PowerShell 執行時會生成錯誤。例如: Param ( [parameter(Mandatory=$true)] [String[]] [ValidatePattern("[0-9][0-9][0-9][0-9]")] $ComputerName ) 說明:形式引數的實際引數必須是一個四位數,並且每一位必須是 0 到 9 中的一個數字。15. ValidateRange 驗證屬性
ValidateRange 屬性指定形式引數的實際引數的最小值和最大值。如果形式引數的實際引數超出該範圍,則 Windows PowerShell 執行時會生成錯誤。16. ValidateScript 驗證屬性
ValidateScript 屬性指定用於對形式引數的實際引數進行驗證的指令碼。如果指令碼結果為 false 或指令碼引發異常,則 Windows PowerShell 執行時會生成錯誤。例如: Param ( [parameter()] [Int] [ValidateScript({$_ -lt 4})] $Count ) 說明:Count 引數的值必須小於 4。17. ValidateNotNull 驗證屬性
ValidateNotNull 屬性指定形式引數的實際引數不能設定為 Null。如果引數值為 Null,則 Windows PowerShell 執行時會生成錯誤。18. ValidateNotNullOrEmpty 驗證屬性
ValidateNotNullOrEmpty 屬性指定形式引數的實際引數不能設定為 Null,也不能為空。如果指定了引數,但引數值為 Null、空字串或空陣列,則 Windows PowerShell 執行時會生成錯誤。 說了那麼多,最後上一個超級簡單的例子吧。param
(
$logpath="D:\test"
)
Get-childItem -path $logpath -recurse;
最後執行的效果是這樣的:
就這麼簡單,定義了一個可接受輸入的引數logpath。