На этот вопрос уже есть ответ здесь:
В настоящее время я пытаюсь написать сценарий, который отображает каждую группу и пользователя в домене.
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
Ваша проблема (как указано в сообщении об ошибке) заключается в этой строке:
$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