2016-10-05 6 views
4

ich nach einer Möglichkeit, ein Powershell-Skript für einen Parameter bitten zu müssen, die zwingend sein muss, aber mit einem Standardwert angezeigt, zB:Power zwingend notwendigen Parameter mit Standardwert angezeigt

.\psscript 
    Supply values for the following parameters: 
    parameter1[default value]: 
    parameter2[1234]: 

Ich möchte Nach Eingabe fragen, aber einige Standardwerte angeben.

Wenn ich die obligatorische Option verwende, fragt sie nach den Werten, aber zeigt nicht den Standardwert an oder verarbeitet den angegebenen Wert. Wenn ich es nicht verpflichtend mache, fragt PowerShell den Wert überhaupt nicht ab.

Hier einige Skriptbeispiele Ich habe versucht:

[CmdletBinding()] 
    Param(
     [parameter(Mandatory=$true)] $SqlServiceAccount = $env:computername + "_sa", 
     [parameter(Mandatory=$true)] $SqlServiceAccountPwd 
    ) 

Dieses Skript für Parameter fragt sich aber nicht zeigen, oder den Standardwert verarbeiten, wenn ich nur auf den ersten Parameter eingeben drücken.

[CmdletBinding()] 
    Param(
     [parameter(Mandatory=$false)] $SqlServiceAccount = $env:computername + "_sa", 
     [parameter(Mandatory=$true)] $SqlServiceAccountPwd 
    ) 

Dieses Skript fragt nicht nach dem ersten Parameter, sondern verarbeitet den Standardwert.

Antwort

1

Hier ist ein kurze Beispiel, die helfen könnten:

[CmdletBinding()] 
    Param(
     $SqlServiceAccount = (Read-Host -prompt "SqlServiceAccount ($($env:computername + "_sa"))"), 
     $SqlServiceAccountPwd = (Read-Host -prompt "SqlServiceAccountPwd") 
    ) 
    if (!$SqlServiceAccount) { $SqlServiceAccount = $env:Computername + "_sa" } 
    ... 
2

Es gibt keine Möglichkeit zu tun, was Sie wollen, mit einem obligatorischen Parameter und Powershell-Aufforderung für Sie.

Sie müssten es stattdessen optional machen (entfernen Sie zwingend), dann implementieren Sie die Eingabeaufforderung Code selbst (Read-Host, aber leere Antwort als Standard nehmen; so etwas).

0

Per Definition: Pflichtparameter haben keine Standardwerte. Selbst wenn Sie eine angeben, wird PowerShell nach einem Wert fragen, sofern nicht beim Aufruf des Befehls angegeben. Es gibt jedoch einen "hacky" Weg, um zu bekommen, wonach Sie fragen. Als Variablen (und als Folge davon - Parameter) einen beliebigen Namen haben, können Sie wünschen, dann ist es genug Befehl mit Parameter zu definieren, die die Aufforderung übereinstimmen würden Sie gerne sehen:

function foo { 
    param (
     [Parameter(Mandatory = $true)] 
     [Alias('Parameter1')] 
     [AllowNull()] 
     ${Parameter1[default value]}, 
     [Parameter(Mandatory = $true)] 
     [Alias('Parameter2')] 
     [AllowNull()] 
     ${Parameter2[1234]} 
    ) 
    $Parameter1 = 
     if (${Parameter1[default value]}) { 
      ${Parameter1[default value]} 
     } else { 
      'default value' 
     } 
    $Parameter2 = 
     if (${Parameter2[1234]}) { 
      ${Parameter2[1234]} 
     } else { 
      1234 
     } 
    [PSCustomObject]@{ 
     Parameter1 = $Parameter1 
     Parameter2 = $Parameter2 
    } 
} 

Wenn sie aufgerufen w/o Parameter, wird Funktion präsentieren Benutzer mit Eingabeaufforderung, die Parameternamen entspricht. Wenn sie mit -Parameter1 notDefaultValue und/oder mit -Parameter2 7 aufgerufen werden, treten Aliase ein und weisen dem ausgewählten Parameter den übergebenen Wert zu. Da solche Variablen keinen Spaß machen, ist es sinnvoll, Variablen (standardmäßig oder vom Benutzer übergeben) Werte zuzuweisen, die unserem Alias ​​/ falschen Parameternamen entsprechen.

Verwandte Themen