PowerShell √úbergabe von Variablen an ein Skript (Param)

Zu Beginn eines PowerShell Scripts können Parameter in der Funktion Param() definiert werden.

Param - √úbergabe von Variablen an ein Skript

Variablen innerhalb von "param"¬†k√∂nnen beim Aufruf des Skripts an das Skript √ľbergeben werden.

param (
[String]$var1="1",
[String]$var2="2"
)

 

Datentypen

Welche Dateitypen als Parameter zugelassen sind, wird mit [Datentyp]$Variablenname definiert. Eine Liste der möglichen Datentypen gibt es hier: PowerShell Variablen und Datentypen

Wird als Datentyp "switch" verwendet, m√ľssen f√ľr die Parameter keine Werte angegeben werden:

CmdletBinding

Mit dem Zustatz [CmdletBinding()] werden PowerShell Skripts oder Funktionen in cmdlets umgewandelt. PowerShell hängt an die Funktion dadurch noch zusätzliche Parameter an: 

Powershell ISE bietet dazu eine Snippet-Vorlage: cmdlet (advanced function), siehe auch:  Powershell ISE - Snippet 

Mandatory

Variablen mit dem¬†Zusatz Mandatory¬†werden f√ľr das Ausf√ľhren zwingend ben√∂tigt

Parameter mit mehreren Werten

Durch das Trennen¬†der Werte mit einem¬†Komma "," k√∂nnen mehrere¬†Variablen √ľbergeben werden. Diese k√∂nnen in einer Foreach-Schleife behandelt werden¬†¬†¬†

function folders
{
    [CmdletBinding()]
        Param(
        [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
        $Folders=(
            "d:",
            "e:",
            "c:")
        )

        foreach ($Folder in $Folders){
            write-host "folder:$($Folder)"
        }
}

Aufruf:

PS c:\> folders -folders "c:\temp","c:\test2"folder:c:\tempfolder:c:\test2

Parameter ohne Wert: switch

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$false)]
   [switch]$Option,
	
   [Parameter(Mandatory=$false)]
   [switch]$2ndOption
)
write-host $Option
write-host $2ndOption

Beim Aufruf ohne Parameter, werden die beiden optionalen Parameter mit $false zur√ľckgegeben:

PS C:\temp> .\parameter.ps1
False
False
PS C:\temp>

werden die Optionen beim Aufruf angegeben, wird der Switch Parameter auf $true gesetzt:

PS C:\temp> .\parameter.ps1 -Option
True
False
PS C:\temp>

 Auslesen der möglichen Parameter

PS C:\temp> (get-command .\parameter.ps1).parameters

Key                 Value                                         
---                 -----                                         
Option              System.Management.Automation.ParameterMetadata
2ndOption           System.Management.Automation.ParameterMetadata
Verbose             System.Management.Automation.ParameterMetadata
Debug               System.Management.Automation.ParameterMetadata
ErrorAction         System.Management.Automation.ParameterMetadata
WarningAction       System.Management.Automation.ParameterMetadata
InformationAction   System.Management.Automation.ParameterMetadata
ErrorVariable       System.Management.Automation.ParameterMetadata
WarningVariable     System.Management.Automation.ParameterMetadata
InformationVariable System.Management.Automation.ParameterMetadata
OutVariable         System.Management.Automation.ParameterMetadata
OutBuffer           System.Management.Automation.ParameterMetadata
PipelineVariable    System.Management.Automation.ParameterMetadata
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f√ľr deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

‚úćanonym
07.09.2016 14:06
User: Peter 
Beispiel "Parameter ohne Wert: Switch" funktioniert nicht, wenn man "-2ndOption" wählt. 
So wie es aussieht macht die Zahl "2" ein Problem
Bei mir hat es nur so funktioniert:
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$false)]
   [switch]$Option,
   	
   [Parameter(Mandatory=$false)]
   [switch]$zweiteOption
)
write-host $Option
write-host $zweiteOption