2011-08-23 14 views

Odpowiedz

27

podać go w atrybucie nad każdym parametrem tak:

function Do-Something{ 
    [CmdletBinding()] 
    param(
     [Parameter(Position=0,mandatory=$true)] 
     [string] $aMandatoryParam, 
     [Parameter(Position=1,mandatory=$true)] 
     [string] $anotherMandatoryParam) 

    process{ 
     ... 
    } 
} 
9

Aby parametr obowiązkowy dodać „obowiązkową = $ true” do opisu parametrów. Aby parametr opcjonalny po prostu zostaw to pole "Obowiązkowe".

Ten kod działa dla obu parametrów i funkcji skryptowych:

[CmdletBinding()] 
param(
    [Parameter(Mandatory=$true)] 
    [String]$aMandatoryParameter, 

    [String]$nonMandatoryParameter, 

    [Parameter(Mandatory=$true)] 
    [String]$anotherMandatoryParameter 

) 

Upewnij się, że „param” Stwierdzenie to jest pierwsza (z wyjątkiem poleceń i pustych linii) w obu skryptu lub funkcji.

Można użyć „Get-Help” cmdlet, aby sprawdzić parametry zostały określone prawidłowo:

PS C:\> get-help Script.ps1 -full 
[...] 
PARAMETERS 
    -aMandatoryParameter <String> 

     Required?     true 
     Position?     1 
     Default value 
     Accept pipeline input?  false 
     Accept wildcard characters? 

    -NonMandatoryParameter <String> 

     Required?     false 
     Position?     2 
     Default value 
     Accept pipeline input?  false 
     Accept wildcard characters? 

    -anotherMandatoryParameter <String> 

     Required?     true 
     Position?     3 
     Default value 
     Accept pipeline input?  false 
     Accept wildcard characters? 
+0

tylko ciekaw, co się dzieje, gdy powiedzmy .bat wywołuje .ps1 i obowiązkowy parametr pozostaje na zewnątrz. Jak wygląda odpowiedź/błąd PS1? – Quanda

+0

Po wywołaniu skryptu PowerShell bez podania parametrów wymaganych, skrypt wykona interaktywny monit przed wykonaniem, np. "Wartości zasilania dla następujących parametrów: aMandatoryParameter:" – llmora

Powiązane problemy