【问题标题】:How to pass a parameter to commandToExecute with spaces for AgentName and AgentPool如何使用 AgentName 和 AgentPool 的空格将参数传递给 commandToExecute
【发布时间】:2021-05-07 13:14:45
【问题描述】:

代理名称:“测试代理”
代理池:“测试池”
当我通过这些唯一的测试和测试时。如何使这些与命令中的空格一起执行。
-vstsagent 是脚本文件变量名 (Agentscript.ps1)
parameters('AgentName') 是 json 模板参数。
请为总命令提出建议。

"commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -Command .\\Agentscript.ps1 -vstsAccount ', parameters('VSTSAccount'),' -vstsAgent ', parameters('AgentName'), '-vstsPoolName ', parameters('AgentPool'))]"

【问题讨论】:

    标签: azure visual-studio-code azure-devops arm-template


    【解决方案1】:

    如果您想动态地向 PowerShell 脚本传递参数,请尝试以下命令。

    "commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -File Agentscript.ps1', ' -vstsAccount ', parameters('VSTSAccount'), ' -vstsAgent ', parameters('AgentName'), ' -vstsPoolName ', parameters('AgentPool'))]"

    详情请参阅blogARM template best practices

    【讨论】:

    • 不工作。当我使用上面的一个错误时,比如-file。所以我删除了 -Command 并执行了。然后它也没有在代理池或 vstsPoolName 中占用空间。前池名称是“Windows 代理池”。它仅将 Windows 作为代理池名称。
    • 是的,它现在支持 Windows 代理。
    • 是的,它会起作用。但这里的问题是它没有在代理池名称中占用空格。如果我给出任何没有空格的池名称,它就可以工作。如果现有池名称有空格,则只需要第一个单词。部署通过。当我们检查代理池时,没有添加代理。但是当我检查 VM 包下载 > powershel 日志时,它只显示代理池的第一个单词。
    【解决方案2】:

    我找到了这个帖子:ARM - How to pass a parameter to commandToExecute with spaces?,也许你可以试试下面的命令:

    "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File \"Agentscript.ps1', ' -vstsAccount ', parameters('VSTSAccount'), ' -vstsAgent ', '\" \"', parameters('AgentName'), ' -vstsPoolName ', '\" \"', parameters('AgentPool'))]\""
    

    【讨论】:

    • "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File .\"agentInterService.ps1', '-vstsAccount', 参数('VSTSAccount'), '-PAT' , 参数('PATToken'), '-vstsAgent', 参数('AgentName'), '-vmUserName', 参数('vmUsername'), '-vstsPoolName', '\" \"', 参数('AgentPool') )]\"" 出现如下错误:\"命令执行完成,但失败,因为它返回了一个非零退出代码:'1'。该命令的错误输出为:''[concat' is不被识别为内部或外部命令
    • 如果是这样,似乎不支持空间。希望Azure专家能确认这个问题。
    【解决方案3】:
    "commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -Command .\\agentInterService.ps1  -vstsAccount ', '''' , parameters('VSTSAccount'), '''', ' -PAT ', '''', parameters('PATToken'), '''', ' -vstsAgent ', '''', parameters('AgentName'), '''', ' -Interactive ', '''', parameters('Interactive'), '''',' -AgentNo ', parameters('AgentNo'), ' -vmAdminPassword ', '''', parameters('vmAdminPassword'), '''', ' -vmAdminUserName ', '''', parameters('vmAdminUsername'), '''', ' -vstsPoolName ','''', parameters('AgentPool'), '''')]"
    

    如果参数中有空格,则此方法有效。

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2017-05-02
      • 2016-09-26
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多