it-swarm.com.de

Übergabe einer Variablen an ein Powershell-Skript über die Befehlszeile

Ich bin neu bei Powershell und versuche, mir die Grundlagen beizubringen. Ich muss ein ps-Skript schreiben, um eine Datei zu analysieren, was nicht allzu schwierig war.

Jetzt möchte ich es ändern, um eine Variable an das Skript zu übergeben. Diese Variable wird der Parsing-String sein. Nun ist die Variable immer 1 Wort und nicht eine Menge von Wörtern oder mehreren Wörtern.

Das scheint zwar sehr einfach, wirft aber ein Problem für mich auf. Hier ist mein einfacher Code:

$a = Read-Host
Write-Host $a

Wenn ich das Skript von meiner Befehlszeile aus laufe, funktioniert die Übergabe der Variablen nicht:

.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"

Wie Sie sehen können, habe ich viele Methoden ohne Erfolg ausprobiert, indem das Skript den Wert übernahm und ausgab.

Das Skript wird ausgeführt und wartet darauf, dass ich einen Wert eingebe. Wenn ich das tue, wird dieser Wert übernommen.

Ich möchte nur, dass es meinen übergebenen Wert ausgibt. Was für ein winziges Ding fehlt mir?

Vielen Dank.

48
cquadrini

Hier ist ein gutes Tutorial zu Powershell-Parametern:

PowerShell ABCs - P steht für Parameter

Grundsätzlich sollten Sie eine param -Anweisung in der ersten Zeile des Skripts verwenden

param([type]$p1 = , [type]$p2 = , ...)

oder verwenden Sie die integrierte Variable $ args, die automatisch mit allen Argumenten gefüllt wird.

49
Brian Stephens

Machen Sie dies in Ihrer test.ps1 in der ersten Zeile

param(
[string]$a
)

Write-Host $a

Dann kannst du es mit anrufen

./Test.ps1 "Here is your text"

Gefunden hier

60
Solaflex

Deklarieren Sie den Parameter in test.ps1:

 Param(
                [Parameter(Mandatory=$True,Position=1)]
                [string]$input_dir,
                [Parameter(Mandatory=$True)]
                [string]$output_dir,
                [switch]$force = $false
                )

Führen Sie das Skript über Ausführen OR von Windows Taskplaner aus:

powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"

oder,

 powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"
7
Shilpa11

Bestandener Parameter wie unten,

Param([parameter(Mandatory=$true,
   HelpMessage="Enter name and key values")]
   $Name,
   $Key)

.\script_name.ps1 -Name name -Key key

0
kalaivani

Durch die Benennung der Parameter mit param können Sie die Reihenfolge der Parameter ignorieren:

ParamEx.ps1

# Show how to handle command line parameters in Windows PowerShell
param(
  [string]$FileName,
  [string]$Bogus
)
write-output 'This is param FileName:'+$FileName
write-output 'This is param Bogus:'+$Bogus

ParaEx.bat

rem Notice that named params mean the order of params can be ignored
powershell -File .\ParamEx.ps1 -Bogus FooBar -FileName "c:\windows\notepad.exe"
0
mxmoss