2012-04-14 49 views
0

我想寫一個PS函數,需要-Computername參數。下面是我使用的代碼:命名參數不工作在我的腳本

function Get-Foo { 
param(
    [Parameter(Mandatory=$False,Position=0,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)] 
    [string[]]$Computername = $env:COMPUTERNAME 
) 

然而,當我運行功能Get-Foo -Computername BAZ它從來沒有通過指定的參數BAZ,而是始終使用$env:COMPUTERNAME值。我通常對PowerShell不熟悉,而且對編寫函數很感興趣,所以希望有人能夠很快看到我在哪裏出錯。我從另一個可以工作的腳本中剪切並修改param行,所以我不知道爲什麼它在這裏不起作用...謝謝。

回答

0

你是怎麼稱呼它的?它適用於我所有可以設置的各種方式:

function Get-Foo { 
    param(
     [Parameter(Mandatory=$False,Position=0,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)] 
     [string[]]$Computername = $env:COMPUTERNAME 

    ) 
    Write-Host $Computername 
} 

Get-Foo -COmputername "hi" 
"hi" | Get-Foo 
$obj = New-Object PsObject -Property @{ Computername='hi' } 
$obj | Get-Foo 

所有這些都輸出「hi」。

+0

我沒有看到你所看到的......當我運行那個確切的腳本時,我沒有輸出。我在Win8 CTP上運行PS 3.0,但我不認爲這很重要...... – 2012-04-14 03:13:51

+0

也只是嘗試過(在相同的Win8機器上)使用PS 2.0,同樣的事情 - 沒有輸出。非常非常奇怪...... – 2012-04-14 03:17:56

+0

好的,這是因爲我沒有學過:)我只是在沒有參數的情況下調用函數「Get-Foo」。所以它總是採用默認值:-P在上面的測試中,我只複製了功能塊,並嘗試在命令行中將它作爲帶有參數的腳本運行。顯然我有很多東西要學習......無論如何感謝您的幫助! – 2012-04-14 04:01:10

相關問題