Powershell阵列问题

时间:2018-07-12 14:03:11

标签: powershell office365

我遇到了一个本应非常简单的任务的问题,但由于某些原因无法正常工作。

我正在使用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}

1 个答案:

答案 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

问题应该消失了。