【发布时间】:2020-11-20 14:53:04
【问题描述】:
我在 Azure 自动化中有一个 powershell Runbook,其中包含以下代码:
param
(
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
[String] $ADMINUSERS,
)
#parse User data
function Get-GroupUser
{
[CmdletBinding()]
Param
(
[Parameter()]
[string]$inputUsers
)
$userlist = $Local:inputUsers.split(',')
if ($Local:inputUsers -notlike "*@*") {
$userlist.replace(' ','')
}
else {
$returnArray = @()
foreach ($user in $($inputUsers | convertFrom-Json)) {
$returnArray += $user.split('@')[0]
}
$returnArray
}
Get-GroupUser -inputUsers $ADMINUSERS
我对 $ADMINUSERS 的第一个输入如下所示:
["johndoe@abc.biz","janedoe@abc.biz"]
当 Runbook 运行时,它立即失败并出现以下错误:
Cannot process argument transformation on parameter 'ADMINUSERS'. Cannot convert value to type System.String. (Cannot convert value to type System.String. (Cannot convert value to type System.String.))
$ADMINUSERS 的第二个输入如下所示:
johndoe,janedoe
这样就成功完成了。
有什么想法可以在 Azure 自动化中修复我的 Runbook 上的第一个输入错误吗?
注意:当我从服务器本地运行两个输入时,它成功完成。
【问题讨论】:
-
您将参数声明为字符串,函数将其拆分为逗号以获得一个数组。这意味着你需要发送一个 string 而现在你正在发送数组..
"johndoe@abc.biz","janedoe@abc.biz"-->"johndoe@abc.biz,janedoe@abc.biz"和johndoe,janedoe-->"johndoe,janedoe" -
将此特定数组转换为字符串的最佳方法是什么?
-
我刚刚在我的评论中向你展示了不是吗?这当然是硬编码的。如果您有一个字符串数组并希望从中创建一个逗号分隔的字符串,请使用
-join运算符,例如$string = "johndoe@abc.biz","janedoe@abc.biz" -join ',' -
我应该提到的一件事是输入来自存储帐户队列,它看起来像这样: "AdminUser": " [\"johndoe@abc.biz\",\"janedoe @abc.biz"]"。在运行手册输入部分,它显示如下:ADMINUSERS ["johndoe@abc.biz","janedoe@abc.biz"]
标签: azure powershell azure-automation runbook