2013-05-07 27 views
41

Jestem nowy w Power Shell i próbuję uczyć się podstaw. Muszę napisać skrypt ps, aby przetworzyć plik, który nie był zbyt trudny.Przekazywanie zmiennej do skryptu powershell za pomocą wiersza polecenia

Teraz chcę to zmienić, aby przekazać zmienną do skryptu. ta zmienna będzie łańcuchem parsującym. Teraz zmienną zawsze będzie 1 słowo, a nie zestaw słów lub wiele słów.

Wydaje się to proste, ale stwarza dla mnie problem. Oto mój prosty kod:

$a = Read-Host 
Write-Host $a 

Kiedy uruchomić skrypt z mojego wiersza polecenia zmienna mijania nie działa:

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

Jak widać, próbowałem wiele Methos bez powodzenia , skryptu przyjmującego wartość i wyprowadzającego go.

Skrypt uruchamia się i czeka na wpisanie wartości, a kiedy to zrobię, wyświetli tę wartość.

Po prostu chcę, aby wyprowadził moją przekazaną wartość, co mi brakuje?

Dziękuję.

+1

Możliwy duplikat [Jak obsługiwać argumenty wiersza poleceń w PowerShell] (http://stackoverflow.com/questions/2157554/how-to-handle-command-line-arguments-in-powershell) –

Odpowiedz

38

Oto dobry tutorial PowerShell params:

PowerShell ABC's - P is for Parameters

Zasadniczo należy użyć param oświadczenie o pierwszej linii skryptu

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

lub użyj polecenia $ args wbudowaną zmienną, która jest automatycznie wypełniane wszystkie args .

+1

łącze jest zerwane –

+0

@MichaelHedgpeth: Wygląda na tymczasowy problem; teraz jest z powrotem. Nie znam bardziej stałego łącza do artykułu. –

+1

masz rację, dziękuję za obserwację. –

54

Producent ten w test.ps1, w pierwszej linii

param(
[string]$a 
) 

Write-Host $a 

Następnie można nazwać z

./Test.ps1 "Here is your text" 

Znalezione here

+0

Id raczej wywołać to za pomocą ./Test.ps1-a = "Tu jest twój tekst", ale jego drukowanie jest takie: -a = Tutaj jest twój ciąg znaków – ozzy432836

+0

@ ozzy432836 Ja też wolę tę składnię, ale nie jest ona wbudowana w powershell. Bez miejsca PS postrzega to jako pojedynczy nienazwany argument. Możesz oczywiście zaimplementować własne przetwarzanie argumentów, ale możesz uznać, że nie będzie to, czego inni się spodziewają.Wbudowana funkcja Powershell pozwala na argumenty o nazwach i bez nazw (aka pozycyjne), obowiązkowe i opcjonalne argumenty z wartościami domyślnymi i automatycznie generuje pomoc. To dużo do wyrzucenia, ponieważ (i ja) wolę "=" ponad spacją. Zmarnowałem czas, wymyślając to koło w języku C#. Mało kto może się tym przejmować. –

5

stwierdzenie parametr w test.ps1:

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

uruchomić skrypt z Run lub Windows Task Scheduler:

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

lub

powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'" 
Powiązane problemy