您可以在 Azure 管道 YAML 文件的内联 powershell 脚本中使用函数吗?
Can you have a function in an inline powershell script in a Azure pipeline YAML file?
我希望能够使用函数简化 AzureCLI 任务中的一些内联 powerscript,类似于以下内容:
- task: AzureCLI@2
displayName: "My Task"
inputs:
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
Do-Something "hello" "world"
Do-Something "goodbye" "world"
function Do-Something {
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $Hello,
[Parameter(Mandatory=$true, Position=1)]
[string] $World
)
Write-Host "$Hello $World"
}
但是失败并出现以下错误:
+ Do-Something "hello" "world"
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (Do-Something:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException
##[error]Script failed with exit code: 1
这可能吗?如果是这样,我做错了什么?
Mathias R. Jessen提供了关键指针:
Azure 的使用 偶然 你的问题,它源于 PowerShell 的基本行为:
与其他语言不同,PowerShell 执行无 函数提升, ...
... 这意味着 你必须在 之前声明你的函数 你可以调用它们 ,即您的源代码必须将函数定义放在之前任何调用它的语句。
相关的概念性帮助主题,about_Functions,历史上并没有说清楚,很遗憾,但这已经得到纠正。现有 PowerShell 安装的离线帮助需要手动更新才能看到更改。
为您的代码拼出解决方案:
- task: AzureCLI@2
displayName: "My Task"
inputs:
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
# First, declare the function.
function Do-Something {
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $Hello,
[Parameter(Mandatory=$true, Position=1)]
[string] $World
)
Write-Host "$Hello $World"
}
# Now you can call it.
Do-Something "hello" "world"
Do-Something "goodbye" "world"
我希望能够使用函数简化 AzureCLI 任务中的一些内联 powerscript,类似于以下内容:
- task: AzureCLI@2
displayName: "My Task"
inputs:
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
Do-Something "hello" "world"
Do-Something "goodbye" "world"
function Do-Something {
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $Hello,
[Parameter(Mandatory=$true, Position=1)]
[string] $World
)
Write-Host "$Hello $World"
}
但是失败并出现以下错误:
+ Do-Something "hello" "world"
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (Do-Something:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException
##[error]Script failed with exit code: 1
这可能吗?如果是这样,我做错了什么?
Mathias R. Jessen提供了关键指针:
Azure 的使用 偶然 你的问题,它源于 PowerShell 的基本行为:
与其他语言不同,PowerShell 执行无 函数提升, ...
... 这意味着 你必须在 之前声明你的函数 你可以调用它们 ,即您的源代码必须将函数定义放在之前任何调用它的语句。
相关的概念性帮助主题,about_Functions,历史上并没有说清楚,很遗憾,但这已经得到纠正。现有 PowerShell 安装的离线帮助需要手动更新才能看到更改。
为您的代码拼出解决方案:
- task: AzureCLI@2
displayName: "My Task"
inputs:
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
# First, declare the function.
function Do-Something {
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $Hello,
[Parameter(Mandatory=$true, Position=1)]
[string] $World
)
Write-Host "$Hello $World"
}
# Now you can call it.
Do-Something "hello" "world"
Do-Something "goodbye" "world"