web-dev-qa-db-de.com

Wie übergebe ich die erforderlichen Parameter an das Skript in Powershell ISE?

Siehe Titel.

Ich habe die erforderlichen Parameter im Kopf eines Skripts angegeben:

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Wenn ich das Skript mit Powershell ISE debuggen möchte: Wie kann ich diese Parameter füllen?

69
eckes

Verwenden Sie den Befehlsbereich. Öffnen Sie die Skriptdatei im ISE-Editor und setzen Sie die Haltepunkte (F9). Geben Sie dann im Befehlsbereich einen Befehl ein, der dieses Skript mit den erforderlichen Parametern aufruft. Ich glaube nicht, dass es eine andere (eingebaute) Möglichkeit gibt, dies in ISE zu tun.

70
Roman Kuzmin
  1. Öffnen Sie das Skript (myscript.ps1) in Windows Powershell ISE
  2. Drücken Sie F9 bei der Variablen, die Sie überprüfen möchten (debuggen). Zum Beispiel die 2. Zeile im Beispiel unten, in der die Variable $ outputText zugewiesen wird
  3. Geben Sie im Shell-Fenster den relativen Pfad des Skripts zusammen mit dem Parameterwert an. Zum Beispiel:.\Myscript.ps1 "Mein Wert"
  4. Drücken Sie die Eingabetaste (Sie müssen nicht drücken F5)
  5. Sie können die Debugging-Haltepunkte gelb hervorheben. Stellen Sie den Cursor auf die gewünschte Variable, um den aktuellen Wert zu überprüfen.

A sample showing PowerShell debugging with ISE and command parameter

22
Ashraf Alam

Es geht auch anders. Sie können die automatische Variable $PSDefaultParameterValues Verwenden, die (seit Version 3) vorhanden ist, um Cmdlets neue Standardargumente und erweiterte Funktionen zur Verfügung zu stellen (doesn ' t mit normalen Funktionen arbeiten). Es funktioniert jedoch auch beim Debuggen in ISE für Skripts. Sie müssen [CmdletBinding()] oder [Parameter()] wie für eine erweiterte Funktion deklarieren.

Also für dein Beispiel,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

sie würden so etwas auf der ISE-Eingabeaufforderung ausführen:

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

Sie können den Parameterwert auch auf einen Skriptblock setzen, der zur Laufzeit automatisch ausgeführt wird:

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

Die Variable ist eine Hashtabelle und es gilt die gesamte Standardsyntax, mit der Ausnahme, dass der Schlüssel den Namen des Skripts (oder der erweiterten Funktion oder des Cmdlets) gefolgt von einem haben muss Doppelpunkt dann der Parametername. Sie können Standardeinstellungen für mehrere Skripts oder Befehle sowie für jeden mehrere Parameter festlegen (jeder Parameter ist ein neuer Tabelleneintrag).

Auf diese Weise können Sie einfach schlagen F5 um das Skript wie gewohnt auszuführen. Die Parameter werden aus der Variablen übernommen, sodass Sie nichts eingeben müssen.

Andere Anwendungsfälle für $PSDefaultParameterValues Könnten Anpassungen sein, z. B. dass der Get-Verlauf nur die letzten 10 Einträge abruft, es sei denn, Sie geben den Parameter -Count Im Befehl an. Da die Einträge nur für die aktuelle Sitzung bestehen bleiben, sollten Sie Ihrem Profil Anpassungen hinzufügen. Sie können weitere Informationen abrufen, indem Sie an der Eingabeaufforderung Get-Help about_Parameters_Default_Values Eingeben oder die gleichen Informationen unter TechNet anzeigen.

15