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

75

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?

eckes
quelle

Antworten:

79

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 in ISE eine andere (eingebaute) Möglichkeit gibt, dies zu tun.

Roman Kuzmin
quelle
7
Dieser Ansatz funktionierte bei mir nicht, da mein Dateipfad Leerzeichen enthielt. Die Lösung bestand darin, die "kaufmännische Und-Funktion" folgendermaßen zu verwenden: PS C: \ Windows> & ("c: \ mein Ordner \ script.ps1") ) -myArg 123 -anotherArg abc
Emil G
1
Sie können tatsächlich den relativen Pfad verwenden :. \ Script.ps1
Ashraf Alam
27
  1. Öffnen Sie das Skript (myscript.ps1) in Windows Powershell ISE
  2. Drücken Sie F9auf die Variable, die Sie überprüfen möchten (Debuggen). Zum Beispiel die zweite Zeile im folgenden Beispiel, 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.

Ein Beispiel für das PowerShell-Debugging mit ISE und Befehlsparameter

Ashraf Alam
quelle
2
Wie unterscheidet sich diese Antwort von der akzeptierten?
eckes
5
Der Gedanke, mehr Details mit Illustrationen zu erklären, wird für andere hilfreich sein. Zum Beispiel ist die Angabe des relativen (oder absoluten) Ortes erforderlich, der überhaupt nicht angegeben wurde.
Ashraf Alam
16

Es geht auch anders. Sie können die $PSDefaultParameterValuesautomatische Variable verwenden, die (seit Version 3) vorhanden ist, um Cmdlets und erweiterten Funktionen neue Standardargumente bereitzustellen (funktioniert nicht mit normalen Funktionen). Es funktioniert jedoch für Skripte, auch beim Debuggen in ISE. Sie müssen [CmdletBinding()]oder deklarieren[Parameter()] möchten wie Sie es für eine erweiterte Funktion tun würden.

Also für Ihr 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, außer dass der Schlüssel den Namen des Skripts (oder der erweiterten Funktion oder des Cmdlets) gefolgt von einem Doppelpunkt und dann den Parameternamen haben muss. Sie können Standardeinstellungen für mehrere Skripte oder Befehle und mehrere Parameter für jeden festlegen (jeder Parameter ist ein neuer Tabelleneintrag).

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

Andere Anwendungsfälle für $PSDefaultParameterValueskönnen Anpassungen sein, z. B. dass der Get-History nur die letzten 10 Einträge abruft, es sei denn, Sie geben den -CountParameter im Befehl an. Da Einträge nur für die aktuelle Sitzung bestehen bleiben, möchten Sie Ihrem Profil Anpassungen hinzufügen . Sie können mehr lesen, indem Sie Get-Help about_Parameters_Default_Valuesan der Eingabeaufforderung eingeben oder dieselben Informationen in TechNet anzeigen .

PatrickFranchise
quelle
Ein weiteres Beispiel für einen Skriptblock. Sie könnten Ihr Skript automatisch die neueste Zip-Datei verwenden lassen. $PsDefaultParameterValues=["ExampleScript.ps1:G_ARCHIVE"]={(ls *.zip | sort lastwritetime | select -last 1).fullname}Diese Art von Dingen ist sehr nützlich, wenn Sie ständig neue Versionen eines externen Datensatzes erstellen, um Ihr Skript zu testen und zu debuggen.
PatrickFranchise
$ PSDefaultParameterValues.Item ("KEY") = "VALUE" ist eine weitere Alternative
RichardOD
1
Es funktioniert nur in Skripten, wenn Parameter mit einem [Parameter()]Dekorator deklariert werden , was im Beispiel @eckes nicht der Fall ist.
Laurent CAPRANI
Du hast recht. Ich erwähnte, dass es eine erweiterte Funktion sein musste, aber nicht, dass Sie dasselbe mit einem Skript tun mussten.
PatrickFranchise
-2

Es gibt eine viel einfachere Möglichkeit, die erforderlichen Parameter in ISE festzulegen:

F5Stellen Sie vor dem Drücken von ISE den gewünschten Parameter ein. Normalerweise kommentiere ich den Parameter, den ich brauche, Beispiel: # $ G_ARCHIVE = "C: \ Temp \ TestFile_001.txt"

Ich wähle alles nach "#" aus und drücke F8. Wenn ich das Skript F5das nächste Mal mit debugge , wird der Parameter auf den Wert gesetzt, mit dem ich teste, ohne dass die Parameter über die Befehlszeile übergeben werden müssen.

S. Barij
quelle