Добавление данных в массив PowerShell/Add-Member

49
4

Я пытаюсь написать сценарий PowerShell, который скомпилирует список групп в Active Directory вместе с членами каждой группы. Моя конечная цель - экспортировать это в CSV файлы, поэтому я хочу, чтобы конечный многомерный массив PowerShell имел следующий формат:

GroupName           GroupMember
Domain Admins Henry Doe
Domain Admins Melody Doe
Domain Names Doe Ray Me
Domain Users John Doe
Domain Users Jane Doe
(etc…)

Для этого я использую следующий код:

[array]$arrGroupMemberList = New-Object PSObject
Add-Member -InputObject $arrGroupMemberList -membertype NoteProperty -Name 'GroupName' -Value ""
Add-Member -InputObject $arrGroupMemberList -membertype NoteProperty -Name 'GroupMember' -Value ""
[array]$arrGroupMemberList = @()

[array]$arrGroupNameObjects = Get-ADGroup -Filter * | Where-Object {$_.Name -Like "Domain*"}

If ($arrGroupNameObjects.Count -ge 1)
{
## Cycle thru each group name and get the members
$arrGroupNameObjects | ForEach-Object {
[string]$strTempGroupName = $_.Name
$arrGroupMemberObjects = Get-ADGroupMember $strTempGroupName -Recursive
If ($arrGroupMemberObjects.Count -ge 1)
{
## Cycle thru the group members and compile into the final array
$arrGroupMemberObjects | ForEach-Object {
$arrGroupMemberList += $strTempGroupName, $_.Name
}
}
}
}

Моя проблема заключается в том, что в качестве моего массива я получаю следующее:

Domain Admins
Henry Doe
Domain Admins
Melody Doe
Domain Names
Doe Ray Me
Domain Users
John Doe
Domain Users
Jane Doe

Я пробовал несколько разных способов, и я искал, но не нашел ответа нигде. Я уверен, что это что-то простое, но что я делаю неправильно? Могу ли я создать многомерный массив с необходимыми данными, как я пытаюсь сделать? Если я использую вместо этого следующее:

            ## Cycle thru the group members and compile into the final array
$arrGroupMemberObjects | ForEach-Object {
$arrGroupMemberList[$intIndex].GroupName = $strTempGroupName
$arrGroupMemberList[$intIndex].GroupMember = $_.Name
$intIndex++

Я получаю ошибки:

Property 'GroupMember' cannot be found on this object; make sure it exists and is settable.
Property 'GroupName' cannot be found on this object; make sure it exists and is settable.

благодаря

**ОБНОВИТЬ**

Возможно, я обнаружил, где моя проблема, может быть, когда я добавляю элементы массива. В конце моего сценария PowerShell я добавляю следующую строку кода:

$arrGroupMemberList | Get-Member

Нет свойств, никаких элементов нет, хотя я добавил их с помощью командлета Add-Member ранее в скрипте. Я правильно использую командлет Add-Member?

спросил(а) 2014-07-23T17:03:00+04:00 5 лет, 7 месяцев назад
1
Решение
49

Я понял, что я делаю неправильно - я неправильно использовал Add-Member. Я пытался использовать Add-Member для добавления членов в коллекцию, и похоже, что это не так. Что-то такое простое, но я действительно не видел, чтобы он обсуждался где угодно. Поэтому я нашел несколько примеров и сделал пробную ошибку и заставил ее работать. Поэтому я хотел опубликовать обновление здесь, если у кого-то другая проблема. Следующий код работает так же, как я хочу (и создаст массив со списком групп из Active Directory вместе с членами группы в каждой группе):

[array]$arrGroupNameObjects = Get-ADGroup -Filter * | Where-Object {$_.Name -Like "Domain*"}

If ($arrGroupNameObjects.Count -ge 1)
{
## Cycle thru each group name and get the members
$arrGroupNameObjects | ForEach-Object {
[string]$strTempGroupName = $_.Name
$arrGroupMemberObjects = Get-ADGroupMember $strTempGroupName -Recursive
If ($arrGroupMemberObjects.Count -ge 1)
{
## Cycle thru the group members and compile into the final array
$arrGroupMemberObjects | ForEach-Object {
$objGroupMember = New-Object PSObject
Add-Member -InputObject $objGroupMember -membertype NoteProperty -Name 'GroupName' -Value $strTempGroupName
Add-Member -InputObject $objGroupMember -membertype NoteProperty -Name 'GroupMemberName' -Value $_.Name
[array]$arrGroupMemberList += $objGroupMember
}
}
}
}

ответил(а) 2014-07-24T16:59:00+04:00 5 лет, 7 месяцев назад
49

Похоже, вам нужно использовать следующую строку для добавления строк в таблицу (двухмерный массив).

$ arrGroupMemberList + =, ($ strTempGroupName, $ _. Name)


http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx

ответил(а) 2014-07-23T17:11:00+04:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема