PowerShell 问题将 AD 中的用户信息添加到数组中
PowerShell issue adding user information from AD into Array
任何擅长散列 tables 的人都可以帮助解决这个问题。我有多个全球组,我收集组中的每个成员。我正在尝试将它们添加到散列 table,每一行都包含有关要返回的用户帐户的所有信息,其中 $group 是键。
当我使用 $vdiArr.add 时,出现错误 Cannot find an overload for "add" and the argument count: "9"。
当我删除散列命令时,它工作正常,但数组中的数据似乎到处都是。我试图在数组中的一行中获取每个用户的信息。例如 vdiArr[0]={theirGroup,Name, GivenName, LastName 等等....
clear-host
$count = $null
$date = Get-Date -format "MM-dd-yyyy_hh-mm-ss"
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
$vdiArr=[System.Collections.ArrayList]@{}
$vdiArr=@{}
foreach($group in $vdiGrps)
{
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
$ADgroup
$vdiArr.add($group,$ADgroup.name,$ADgroup.GivenName,$ADgroup.Surname,$ADgroup.UserPrincipalName,$ADgroup.SamAccountName,$ADgroup.SamAccountName,$ADgroup.Enabled,$ADgroup.DistinguishedName)
#$vdiArr.group = $group
#$vdiArr.Name = $ADgroup.name
#$vdiArr.GivenName = $ADgroup.GivenName
#$vdiArr.Surname = $ADgroup.Surname
#$vdiArr.UserPrincipalName = $ADgroup.UserPrincipalName
#$vdiArr.SamAccountName = $ADgroup.SamAccountName
#$vdiArr.Enabled = $ADgroup.Enabled
#$vdiArr.DistinguishedName = $ADgroup.DistinguishedName
}
$arrOutput += New-Object -TypeName psobject -Property $vdiArr
Out-File -InputObject $arrOutput -FilePath "$home\Desktop\test.csv"
尝试以下操作:
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
# Create empty array list.
$vdiArr=[System.Collections.ArrayList] @()
foreach($group in $vdiGrps)
{
# Get users in group.
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
# Loop over all users in group and add them to the output array.
foreach($user in $ADgroup) {
$null = $vdiArr.Add([pscustomobject] @{
Group = $group
Name = $user.name
GivenName = $user.GivenName
Surname = $user.Surname
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Enabled = $user.Enabled
DistinguishedName = $user.DistinguishedName
})
}
}
Out-File -InputObject $vdiArr -FilePath "$HOME\Desktop\test.csv"
$null = ...
抑制 .Add()
调用的(不需要的)输出。
上述方法演示了如何从哈希表构造自定义对象,但请注意,如果您将 Group
属性 作为计算的 属性 添加到您的 Select-Object
调用,您可以将生成的对象 直接 添加到输出数组。
至于你试过的:
$vdiArr=[System.Collections.ArrayList]@{}
可能不是您想要的,因为将空的 hashtable 文字 - @{}
- 转换为 [System.Collections.ArrayList]
会导致空数组列表 - 与 [System.Collections.ArrayList] @()
相同(从空的 array 文字转换)或 New-Object System.Collections.ArrayList
就是说,您的下一条语句 - $vdiArr=@{}
- 完全覆盖了您之前的语句并将一个空的哈希表分配给 $vdiArr
,使 $vdiArr
[hashtable]
的类型([System.Collections.Hashtable]
).
你的 .Add()
调用失败了,因为哈希表的 .Add()
方法只接受 2 个参数——键和新条目的名称——不你给它的 9。
也就是说,即使 $vdiArr
是一个 [System.Collections.ArrayList]
实例,正如您可能希望的那样,.Add()
调用也不会起作用,因为 [System.Collections.ArrayList]
的 .Add()
方法只接受一个 单个 参数——要添加的新元素。
任何擅长散列 tables 的人都可以帮助解决这个问题。我有多个全球组,我收集组中的每个成员。我正在尝试将它们添加到散列 table,每一行都包含有关要返回的用户帐户的所有信息,其中 $group 是键。
当我使用 $vdiArr.add 时,出现错误 Cannot find an overload for "add" and the argument count: "9"。 当我删除散列命令时,它工作正常,但数组中的数据似乎到处都是。我试图在数组中的一行中获取每个用户的信息。例如 vdiArr[0]={theirGroup,Name, GivenName, LastName 等等....
clear-host
$count = $null
$date = Get-Date -format "MM-dd-yyyy_hh-mm-ss"
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
$vdiArr=[System.Collections.ArrayList]@{}
$vdiArr=@{}
foreach($group in $vdiGrps)
{
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
$ADgroup
$vdiArr.add($group,$ADgroup.name,$ADgroup.GivenName,$ADgroup.Surname,$ADgroup.UserPrincipalName,$ADgroup.SamAccountName,$ADgroup.SamAccountName,$ADgroup.Enabled,$ADgroup.DistinguishedName)
#$vdiArr.group = $group
#$vdiArr.Name = $ADgroup.name
#$vdiArr.GivenName = $ADgroup.GivenName
#$vdiArr.Surname = $ADgroup.Surname
#$vdiArr.UserPrincipalName = $ADgroup.UserPrincipalName
#$vdiArr.SamAccountName = $ADgroup.SamAccountName
#$vdiArr.Enabled = $ADgroup.Enabled
#$vdiArr.DistinguishedName = $ADgroup.DistinguishedName
}
$arrOutput += New-Object -TypeName psobject -Property $vdiArr
Out-File -InputObject $arrOutput -FilePath "$home\Desktop\test.csv"
尝试以下操作:
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
# Create empty array list.
$vdiArr=[System.Collections.ArrayList] @()
foreach($group in $vdiGrps)
{
# Get users in group.
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
# Loop over all users in group and add them to the output array.
foreach($user in $ADgroup) {
$null = $vdiArr.Add([pscustomobject] @{
Group = $group
Name = $user.name
GivenName = $user.GivenName
Surname = $user.Surname
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Enabled = $user.Enabled
DistinguishedName = $user.DistinguishedName
})
}
}
Out-File -InputObject $vdiArr -FilePath "$HOME\Desktop\test.csv"
$null = ...
抑制.Add()
调用的(不需要的)输出。上述方法演示了如何从哈希表构造自定义对象,但请注意,如果您将
Group
属性 作为计算的 属性 添加到您的Select-Object
调用,您可以将生成的对象 直接 添加到输出数组。
至于你试过的:
$vdiArr=[System.Collections.ArrayList]@{}
可能不是您想要的,因为将空的 hashtable 文字 - @{}
- 转换为 [System.Collections.ArrayList]
会导致空数组列表 - 与 [System.Collections.ArrayList] @()
相同(从空的 array 文字转换)或 New-Object System.Collections.ArrayList
就是说,您的下一条语句 - $vdiArr=@{}
- 完全覆盖了您之前的语句并将一个空的哈希表分配给 $vdiArr
,使 $vdiArr
[hashtable]
的类型([System.Collections.Hashtable]
).
你的 .Add()
调用失败了,因为哈希表的 .Add()
方法只接受 2 个参数——键和新条目的名称——不你给它的 9。
也就是说,即使 $vdiArr
是一个 [System.Collections.ArrayList]
实例,正如您可能希望的那样,.Add()
调用也不会起作用,因为 [System.Collections.ArrayList]
的 .Add()
方法只接受一个 单个 参数——要添加的新元素。