lima-city: Webhosting, Domains und Cloud
2 Pluspunkte 0 Minuspunkte

Ich habe eine Powershell Funktion mit Parametern.

function Testfunc 
{

	Param(
		$name,
		$age,
		$consent = $false
	)

	if($consent -eq $true) 
	{
		Write-Output "consent = true"
	}

}

Wenn ich den Parameter consent angebe funktioniert es

Testfunc -name "toni" -age 22 -consent $true

aber wenn ich ihn weglasse

Testfunc -name "toni" -age 22 -consent

dann kommt ein Fehler:

Testfunc : Missing an argument for parameter 'consent'. Specify a parameter of type 'System.Object' and try again.
At line:59 char:33
+ Testfunc -name "toni" -age 22 -consent
+                                 ~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Testfunc], ParameterBindingException
    + FullyQualifiedErrorId : MissingArgument,Testfunc

Es gibt doch Funktionen wo man keinen Wert angeben muss, wie kann ich auch so einen Parameter machen wo man nur den Parameternamen angibt aber keinen Wert?

von (6 Punkte)  

1 Antwort

0 Pluspunkte 0 Minuspunkte

In PowerShell kannst du einen Switch-Parameter verwenden, wenn du möchtest, dass ein Parameter nur durch seine Anwesenheit als $true gewertet wird.

function Testfunc 
{
	Param(
		[string]$name,
		[int]$age,
		[switch]$consent
	)

	if ($consent) 
	{
		Write-Output "consent = true"
	}
	else
	{
		Write-Output "consent = false"
	}
}
von (1.1k Punkte)  
Aber dann kann ich den Standardwert doch nicht mehr setzen oder?

Param(
    $name,
    $age,
    $consent = $false
)
Doch, genau dafür ist [switch] gedacht – es ist standardmäßig $false, und wird nur $true wenn du es beim Aufruf angibst. Du brauchst keinen eigenen Standard Wert setzen, das macht Powershell automatisch bei [switch].