2016-09-27 78 views
1

我有一個包含這在頂部有一個PowerShell腳本:VSTS發佈錯誤:參數無法找到匹配的參數名稱「服務器」

Param(
    # [snip] 
    [string] [Parameter(Mandatory=$true)] $Server 
) 

在我VSTS版本的定義,我添加了一個Azure的PowerShell的任務調用腳本,傳入的參數爲:

-Server '$(ServerName)' [snip] 

然而,當我觸發一個新的版本,在這個腳本的一步,我得到這個錯誤:

##[error]A parameter cannot be found that matches parameter name 'Server'. 

我在日誌輸出中驗證了服務器名稱已正確傳遞。我甚至複製/粘貼記錄的命令,並修復路徑後,它在本地運行沒有問題。

爲什麼會發生這種情況,我該如何解決?

+0

它_sounds_就像你的腳本/函數加載的早期定義。 – Matt

+0

@Matt你能詳細說明一下嗎?如果是這樣的話,不應該意味着[改變參數名稱](// stackoverflow.com/a/39730146/2747593)不會影響任何東西嗎? –

+0

是的,我知道。它的一系列時間錯誤我暗示我無法複製,因爲我沒有環境。這就像你製作的腳本v1,它沒有那個名字,然後你「發佈」它。接下來,您更新腳本以使其更好,但忽略「發佈」它。然後,測試會失敗,因爲您會認爲某個版本不存在。然後,最後,再次測試腳本的v3並「測試」順利進行「發佈」。這將會改變名稱的固定形式。建議相關不等於因果關係。 – Matt

回答

1

更改參數的名稱解決了問題。我的腳本現在包含:

Param(
    # [snip] 
    [string] [Parameter(Mandatory=$true)] $ServerName 
) 

我傳遞參數爲:

-ServerName '$(ServerName)' [snip] 

至於爲什麼,我只能猜測。我檢查了source code,但找不到任何明顯的東西。我唯一的猜測是,出於某種原因,Azure PowerShell任務覆蓋了$Server(儘管我不確定日誌輸出爲什麼會在這種情況下顯示正確的參數)。

0

您的$Server變量已被聲明。當你想測試代碼或類似的東西時,我給你一些技巧。首先刪除變量和清除屏幕,如下例:

cls 
Remove-Variable server 
function ssssss 
{ 
    param 
    (
     [string][parameter(Mandatory = $true)]$server 
    ) 
    Write-Host $server 
} 
ssssss -server "Enter servername here" 

它工作正常。

+0

感謝您的編輯 – saftargholi

+0

我不認爲這將適用於我的情況。當我將'Remove-Variable'調用添加到我的腳本中時,在VSTS中運行時出現錯誤'無法找到名稱爲'Server'的變量。'正如我在[我的回答](// stackoverflow.com/a/ 39730146/2747593),我認爲VSTS必須做一些奇怪的事情,把一些變量作爲副作用。 –

+1

'$ server'只能在函數的本地上下文中使用。我不認爲這是一個範圍問題。 – Matt

相關問題