我遇到了一个本应非常简单的任务的问题,但由于某些原因无法正常工作。
我正在使用Powershell v5的Windows 10 PC上通过Powershell ISE运行此代码。
目标:创建一个JSON文件数组,目的是将JSON数据中的特定值分配给Powershell变量,然后将这些变量输入到Exchange联机功能中以创建数千个新的Office 365组。
问题:尽管值似乎正确地填充了每个数组,但该数组中的某些变量正在被级联。请参阅下面的特定错误。
示例代码:
这是一个示例JSON文件(注意:我仅在每个文件中使用非常有限的数据子集):
{
"Alias": "testmigrationlist7",
"DisplayName": "Test Migration List 7",
"IsHiddenFromAddressList": true,
"EmailAddresses": [
{
"Action":"Add",
"Value": "testmigrationlist7@testlab.local",
"AddressPrimary": true,
"AddressProtocol": "SMTP"
}
],
"Members": {
"Recipients": [
{
"Action":"Add",
"Value":"testuser1"
},
{
"Action":"Add",
"Value":"testuser2"
}
]
},
"AcceptMessagesOnlyFrom": {
"All":"restricted",
"Recipients": [
{
"Action":"Remove",
"Value":"testuser1"
},
{
"Action":"Add",
"Value":"testuser2"
}
]
}
}
获取所有JSON文件的内容:
$allObjects = @(Get-ChildItem -path c:\tmp\json\*.json | Get-Content -Raw | ConvertFrom-Json)
然后我测试上面的数组,它似乎可以按预期输出:
$allObjects.displayname
Test Migration List 7
Test Migration List 8
$allObjects.alias
testmigrationlist7
testmigrationlist8
现在,获取上述数据并遍历数组的代码:
function import-UnixDL2Group {
New-UnifiedGroup -Alias $allobjects.alias -displayname `
$allobjects.displayname -Owner testowner1 -Members `
$allobjects.members.recipients.value `
-emailaddresses $allobjects.emailaddresses.value
}
foreach($_ in $allObjects.alias){import-UnixDL2Group}
以上内容输出以下错误并停止:
无法将参数“别名”绑定到目标。异常设置“别名”:“属性表达式“ testmigrationlist7 testmigrationlist8”无效........”
注意它如何尝试同时使用两个别名和一个别名的空格:
"testmigrationlist7 testmigrationlist8"
DisplayName也一样。
如果仅使用1个JSON文件进行测试,则它可以正常工作:
$JSONinput = (get-content -path c:\tmp\json\test1.json -raw) | ConvertFrom-Json
function import-UnixDL2GroupTest {
New-UnifiedGroup -Alias $JSONinput.alias -displayname $JSONinput.displayname `
-Owner testowner1 -Members $JSONinput.members.recipients.value `
-emailaddresses $JSONinput.emailaddresses.value
}
$JSONinput | import-UnixDL2GroupTest
我敢肯定,我忽略了一些非常简单的事情,但目前答案仍在我身旁。任何指导将不胜感激。
谢谢您的考虑。
更新:我也尝试过定义一个简单的数组以将JSON数据从图片中取出,但是我遇到了同样的错误,因此它必须是foreach循环。
$manualArray = @("testmigrationlist7","testmigrationlist8")
function import-Unix2GroupManual {
New-UnifiedGroup -Alias $manualArray -displayname $manualArray `
-Members testuser1,testuser2
}
foreach($_ in $manualArray){import-Unix2GroupManual}
答案 0 :(得分:0)
您的代码尝试一次调用具有 all 别名的New-UnifiedGroup
(因为您正在函数内部使用全局变量$allobjects
),此方法不起作用。另外,$_
是automatic variable,将当前对象保存在管道中。通常不建议您出于自己的目的而覆盖自动变量,因为它会导致... 有趣的副作用。
像这样设置函数参数:
function Import-UnixDL2Group {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
$InputObject,
[Parameter(Position=1, Mandatory=$false)]
[String]$Owner = 'testowner1'
)
Process {
New-UnifiedGroup -Alias $InputObject.alias `
-DisplayName $InputObject.displayname `
-Owner $Owner `
-Members $InputObject.members.recipients.value `
-EmailAddresses $InputObject.emailaddresses.value
}
}
并像这样调用它:
$allObjects | Import-UnixDL2Group
问题应该消失了。