2014-03-18 129 views
7

編寫一個.ps1 powershell腳本,我想知道如何找到用戶傳遞了多少個參數。例如,我需要我的程序來處理檢查多個文件中的字符串。因此,用戶應該能夠在Powershell如何計算參數的數量

./Script "a" ex1.txt

./Script "a" ex1.txt ex2.txt

我知道在bash我們可以使用$#鍵入但我怎麼在PowerShell中進行檢查。謝謝

回答

11

在腳本或函數中,您可以通過自動填充的變量$args訪問傳入的參數。 $args是一個數組,因此您可以找到通過其Count屬性傳遞的參數數量。

一個例子:

function PrintArgs() 
{ 
    Write-Host "You passed $($args.Count) arguments:" 
    $args | Write-Host 
} 

調用PrintArgs

> PrintArgs 'a' 'b' 'c' 
You passed 3 arguments: 
a 
b 
c 
+2

假設您的腳本被一個或多個開關參數調用,$ args.Count爲0.使用$ PSBoundParameters作品,請參閱Cookie Monster的答案。 –

4

您使用內置$Args和它的屬性Count

$Args.Count 

這會給你多少個用戶傳遞給腳本的參數。

6

Read through a few help files如果你有時間;他們通常非常有幫助!從幫助

get-help * 
get-help *parameters* 
get-help about_Parameters 
get-help about_Automatic_Variables 
get-help about_Functions* 
#etc... 

筆記應該可以幫助您:

的$ args

包含傳遞給函數,腳本未申報的參數和/或參數 值的數組,或腳本塊。 創建函數時,可以通過使用 param關鍵字或在函數名稱後面添加 圓括號中逗號分隔的參數列表來聲明參數。

在事件操作中,$ Args變量包含的對象代表正在處理的事件的事件參數 。僅在事件註冊 命令的操作塊中填充此變量 。此變量的值也可以在Get-Event返回的PSEventArgs對象(System.Management.Automation.PSEventArgs) 的SourceArgs 屬性中找到。

$ PSBoundParameters

包含傳遞給腳本 或功能及其當前值的參數的字典。在聲明參數的作用域中,此變量的值僅爲 ,例如腳本或函數。 您可以使用它來顯示或更改參數 的當前值或將參數值傳遞給另一個腳本或函數。

如果你最終使用兩個參數綁定和非綁定的參數,你可以稍微將二者結合起來(example

題外話:

我強烈建議不要使用的$ args。你應該總是使用綁定參數,當你被迫不使用綁定參數的情況很少。

爲什麼?所有帶參數的函數都應遵循最佳實踐,並使用param()塊作爲參數。如果您閱讀幫助文件中的參數,您會發現使用param塊可以爲您提供各種有用的功能,如驗證,強制強制參數,接受管道輸入等。在讓PowerShell執行均勻更多的工作與你[cmdletbinding()]

乾杯!