Я пытаюсь выяснить причину, по которой я могу запустить скрипт, используя переменную $groups с Get-Content, но он не будет работать, если переменная $groups идет со списком Get-ADGroup, который я сделал ниже...
Блок, который работает:
$groups = Get-Content C:\groups.csv
$results = @()
$file = "C:\Usuarios_Grupos_Darwin_AD.csv"
foreach($Group in $Groups) {
$results +=Get-ADGroupMember -Id $Group -Recursive | %{Get-ADUser -Identity $_.SamAccountName -Properties Enabled,Name} | Select @{Expression = {$Group};Label=”Group Name”},SamAccountName,Name,Enabled
}
$results | export-csv -notypeinformation -Delimiter ";" -path $file
Блок, который не работает: (изменена только первая строка)
$groups = Get-ADGroup -Filter {Name -like '*Darwin*'} -Properties * | select -property Name
$results = @()
$file = "C:\Usuarios_Grupos_Darwin_AD.csv"
foreach($Group in $Groups) {
$results +=Get-ADGroupMember -Id $Group -Recursive | %{Get-ADUser -Identity $_.SamAccountName -Properties Enabled,Name} | Select @{Expression = {$Group};Label=”Group Name”},SamAccountName,Name,Enabled
}
$results | export-csv -notypeinformation -Delimiter ";" -path $file
Вот ошибка:
Get-ADGroupMember : Cannot bind parameter 'Identity'. Cannot create object of type "Microsoft.ActiveDirectory.Management.ADGroup". The adapter cannot set the value of property
"Name".
At line:11 char:34
+ $results +=Get-ADGroupMember -Id $Group -Recursive | %{Get-ADUser -Id ...
+ ~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADGroupMember], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember
Я пытаюсь встроить список вывода в один скрипт, не создавая csv с другим скриптом.
Заранее спасибо !!
Кристоф, этот способ тоже сработал как шарм! Спасибо брат !! Я использовал это прямо сейчас из-за срочности, потому что оно выводит имя группы без CN=...... Могу ли я как-нибудь помочь вам, например, проголосовать за ваш профиль или что-то в этом роде? Я думаю, что пока не могу голосовать за все ответы, потому что я новичок в стеке без большого количества очков.





Несколько замечаний о вашем коде:
-Filter должен быть строкой, а не блоком сценария$results += очень затратно, потому что весь массив необходимо перестраивать в памяти при каждом добавленииGet-ADGroupMember также может возвращать компьютер и (если не используется с -Recursive) также групповые объекты, а не только пользователей, поэтому вы не можете напрямую передать Get-ADUser-Properties *, если вам нужно только одно свойствоПопробуй это:
# Get-ADGroup already returns objects with these properties:
# DistinguishedName, GroupCategory, GroupScope, Name, ObjectClass, ObjectGUID, SamAccountName, SID
$groups = Get-ADGroup -Filter "Name -like '*Darwin*'"
$file = "C:\Usuarios_Grupos_Darwin_AD.csv"
# let PowerShell collect the objects for you instead of using +=
$results = foreach($Group in $Groups) {
# Get-ADGroupMember can return objects of type users and computers (also groups when used without -Recursive)
# so filter the result to get only user objects
$Group | Get-ADGroupMember -Recursive | Where-Object { $_.objectClass -eq 'user' } | ForEach-Object {
$_ | Get-ADUser | Select @{Name = 'Group Name'; Expression = {$Group.Name}}, SamAccountName, Name, Enabled
}
}
$results | Export-Csv -Path $file -NoTypeInformation -Delimiter ";"
@Jonathan Пожалуйста, если мой ответ решил вашу проблему, дайте нам знать. Кроме того, поскольку вы новичок на платформе, могу я попросить вас прочитать тур, где вы можете прочитать, как пометить вопрос как выполненный.
Тео, прости, чувак! Я разместил ответ не в том месте, хахаха, поэтому он был удален. Ваши советы по powershell были очень полезными, спасибо большое. Единственный вопрос, который у меня возник, заключается в том, есть ли способ выбрать только имя группы, которое будет отображаться в csv, а не различающееся имя. Это выглядит как "CN=GroupNameblabla OU=XXX DC=Xxxx...." Спасибо!!
@ Джонатан Должно быть так, как ты хочешь. Я изменил выражение, чтобы сохранить $Group.Name вместо DistinguishedName.
Я думаю, это может сработать, если вы измените первую строку:
$groups = (Get-ADGroup -Filter {Name -like '*Darwin*'} -Properties * | select -property Name).Name