Сценарий Powershell для отображения всех групп и пользователей, которых они содержат [дубликат]

На этот вопрос уже есть ответ здесь:

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

        Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -expandproperty name)

$Table = @()

$Record = [ordered]@{ "Group Name" = ""; "Name" = ""; "Username" = ""; }

Foreach ($Group in $Groups) {

$Arrayofmembers = Get-ADGroupMember -identity $Group | select name,samaccountname

foreach ($Member in $Arrayofmembers) { 
$Record.Set_Item("Group Name", $Group) 
$Record.Set_Item("Name", $Member.name) 
$Record.Set_Item("Username", $Member.samaccountname) 
$objRecord = New-Object PSObject -property $Record $Table += $objrecord

}

}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation

Он всегда возвращает следующие ошибки:

New-Object : A positional parameter cannot be found that accepts argument '+='.
At C:\Users\tech\Desktop\list.ps1:17 char:14
+ $objRecord = New-Object PSObject -property $Record $Table += $objrecord
+              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

New-Object : A positional parameter cannot be found that accepts argument '+='.
At C:\Users\tech\Desktop\list.ps1:17 char:14
+ $objRecord = New-Object PSObject -property $Record $Table += $objrecord
+              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Повторение снова и снова.

Любая помощь будет принята с благодарностью!

Кстати, это сервер 2012 R2

0
задан 17 January 2015 в 16:57
1 ответ

Ваша проблема (как указано в сообщении об ошибке) заключается в этой строке:

$objRecord = New-Object PSObject -property $Record $Table += $objrecord

Вам нужна была новая строка между $ Record и $ Table :

$objRecord = New-Object PSObject -property $Record
$Table += $objrecord

Однако вы можете упростить и удалить ее. Вот моя измененная версия вашего скрипта:

Import-Module ActiveDirectory

# Removed "Where" as it filtered nothing; no need for parens; no need to select name before expanding
$Groups = Get-AdGroup -filter * | select -expandproperty name

$Table = @()

foreach ($Group in $Groups) {
    $arrayofmembers = Get-ADGroupMember -identity $Group | select name,samaccountname

    foreach ($Member in $Arrayofmembers) { 
        # You can just declare an ordered object inline as a literal rather than pre-declaring.
        $table += [ordered]@{
            "Group Name" = $Group; 
            "Name" = $Member.name; 
            "Username" = $Member.samaccountname 
        }
    }
}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation 
1
ответ дан 4 December 2019 в 17:04

Теги

Похожие вопросы