2017-06-09 67 views
2

我很困惑如何在強制變量爲空的情況下做錯誤處理。powershell強制性參數拋出錯誤,當空

function parse-com{ 
    [CmdletBinding()] 
    Param 
    (
     [Parameter(Mandatory=$True)] 
     [string[]]$list 
    ) 
... 

在這種情況下,如果沒有參數傳遞爲$名單,然後提示我輸入,但如果我只需點擊進入(傳遞一個空至$列表),那麼我拋出一個錯誤。我寧願做的是拋出一個用法說明和/或優雅地退出。實施例...

PS C:\Users\memyself> parse-com 
cmdlet parse-com at command pipeline position 1 
Supply values for the following parameters: 
list[0]: 
parse-com : Cannot bind argument to parameter 'list' because it is an empty array. 
At line:1 char:1 
+ parse-com 
+ ~~~~~~~~~ 
    + CategoryInfo   : InvalidData: (:) [parse-com], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyArrayNotAllowed,parse-com 
+1

查找到的參數使用[ValidateScript(https://powershell.org/2013/05/21/validatescript-for-beginners/),而不是僅讓強制。 –

回答

4

當通過一個$null值,滿足Mandatory要求。如果你想要命令然後在執行之前失敗,那麼你應該使用@JeffZeitlin建議的驗證。

這聽起來像你需要驗證的是,值不是$null也不是一個空的數組。對於您可能用戶[ValidateNotNullOrEmpty()]

function parse-com{ 
    [CmdletBinding()] 
    Param (
     [Parameter(Mandatory=$True)] 
     [ValidateNotNullOrEmpty()] 
     [string[]]$list 
    ) 
+0

我寄予了很高的期望,但我無法真正看到它除了拋出一個不同的錯誤之外什麼都不做。 – klaypigeon

+0

D:\ MyCOMTracker \ D:\ MyCOMTracker \ parse-com.ps1 cmdlet命令管道位置上的parse-com.ps1 1 以下參數的供應值: list [0]: D:\ MyCOMTracker \ parse-com.ps1:無法驗證參數「列表」上的參數。參數爲空,空或參數 集合中的元素包含空值。提供一個不包含任何空值的集合,然後再次嘗試該命令。 + CategoryInfo:InvalidData:(:) [parse-com.ps1],ParentContainsErrorRecordException + FullyQualifiedErrorId:ParameterArgumentValidationError,parse-com.ps1' – klaypigeon

+0

@klaypigeon「Validate」的意思是在執行該命令之前拋出該錯誤。如果你只想接受一個空值,那麼取出'mandatory'和'validate',你就必須編寫你自己的邏輯來圍繞函數內部的參數'$ null'做什麼。 – BenH