2016-09-27 53 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

相关问题