在PowerShell中为变量中的每一行初始化数组

问题描述

我正在尝试为 CSV 文件中的每个唯一部门初始化数组。到目前为止,我有这个,但它似乎没有按预期工作。

$Org = Import-Csv Org.csv

$Dept_Unique = $Org.Department | Select-Object -Unique

这给了我正确的输出,并将列出 CSV 中所有部门的所有唯一值。

Accounting Team
Human Resources
@R_672_4045@ion Technology

然后我尝试用一​​些随机值为每个部门初始化一个数组。

$Dept_Unique | ForEach-Object {
     $_ = @('User1','User2','User3')
}

我的预期输出是...

${Human Resources}[1]
User2

但是,我收到了 Cannot index into a null array.。这告诉我数组没有按照我想要的方式初始化。任何帮助将不胜感激,谢谢!

解决方法

如果您想以存储在不同变量中的值创建一个命名的新变量,请使用New-Variable

$Dept_Unique | ForEach-Object {
    New-Variable -Name $_ -Value @('User1','User2','User3')
}

...但我怀疑您真正想要的只是根据部门对所有用户名进行分组 - 为此,您需要使用 Group-Object cmdlet 而不是 {{ 1}}(以下假设您的 csv 中有 Select-Object -Unique 列):

Username

这将为每个唯一的 $Org |Group-Object Department |Select-Object @{Name='Dept';Expression='Name'},@{Name='Users';Expression={ @($_.Group.Username) }} 值创建一个对象,具有两个属性:Department(部门名称)和 Dept,一组与部门关联的用户名