2013-05-07 152 views
41

我是PowerShell的新手,試圖自我介紹基礎知識。我需要編寫一個ps腳本來解析文件,這並不難。通過命令行將變量傳遞給PowerShell腳本

現在我想改變它來傳遞一個變量給腳本。該變量將是解析字符串。現在,變量總是1個單詞,而不是一組單詞或多個單詞。

這看起來很簡單,但對我來說卻是個問題。這是我簡單的代碼:

$a = Read-Host 
Write-Host $a 

當我從我的命令行運行腳本的變量傳遞不起作用:

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

正如你所看到的,我已經嘗試了許多methos沒有成功,腳本將價值輸出。

該腳本確實運行,並等待我鍵入一個值,當我這樣做時,它會迴應該值。

我只是想要它輸出我傳入的值,我錯過了什麼微乎其微的東西?

謝謝。

+1

的可能的複製[如何處理PowerShell中的命令行參數](http://stackoverflow.com/questions/2157554/how-to-handle-command-line-arguments-in-powershell) – 2016-02-03 11:55:39

回答

38

這裏有PowerShell的PARAMS一個很好的教程調用它:

PowerShell ABC's - P is for Parameters

基本上,你應該對劇本

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

第一線使用param語句,或者使用的$ args內置變量,它是自動填充所有參數的個數。

+1

鏈接被破壞 – 2014-09-23 14:26:01

+0

@MichaelHedgpeth:看起來這是一個暫時的問題;它現在正在備份。我不知道這篇文章有更長久的鏈接。 – 2014-09-23 15:28:31

+1

你是對的,感謝後續 – 2014-09-23 18:56:00

54

認爲這種方式你test.ps1,在第一行

param(
[string]$a 
) 

Write-Host $a 

然後你就可以用

./Test.ps1 "Here is your text" 

找到here

+0

我寧願用./Test.ps1調用它-a =「這是你的文本」,但它的打印$ a是這樣的:-a =這裏是你的字符串 – ozzy432836 2017-02-21 23:06:33

+0

@ ozzy432836我更喜歡這種語法,但它並不是內置的電源外殼。沒有空間,PS將它視爲一個單一的未命名的論點。你當然可以實現你自己的參數解析,但你可能會認爲它不會是其他人所期望的。Powershell的內置功能允許使用默認值命名和未命名(aka位置)參數,強制參數和可選參數,並自動生成幫助。因爲你(我)喜歡在空間上放置一個'=',所以很多東西都可以扔掉。我浪費了我的時間在C#中重新發明這個輪子我的用戶很少能夠關心。 – 2018-02-27 03:23:22

5

聲明中test.ps1參數:

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

運行從運行或Windows計劃任務的腳本:

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

,或者

powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'" 
相關問題