В настоящее время у меня есть сценарий, который я пытаюсь изменить, который может извлекать из групп AD имена пользователей, имя, адрес электронной почты и менеджеров:
$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
$params = @{
LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
Properties = 'mail', 'manager'
}
foreach($member in Get-ADUser @params) {
[pscustomobject]@{
Username = $member.SamAccountName
Name = $member.Name
Mail = $member.Mail
Manager = $member.Manager
GroupName = $_.Name
}
}
} | Export-csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation
Проблема в том, что данные менеджера просто отображают имя отличающегося имени менеджера, например. CN=Manager1,CN=Пользователи,DC=Мой,DC=Домен,DC=сеть
Я искал в Интернете и пытался заставить это работать, но не смог этого сделать.
Я искал в Интернете и нашел скрипт, который проверяет отдельные группы AD, а не подразделение (найдено через https://forums.powershell.org/t/getaduser-need-manager-name-and-email-in). -results/16471/4)
$adGroupList = 'BI_FINANCE_FULL','BI_FIN_EXP_FACILITIES_FULL_R1'
$results = foreach ($group in $adGroupList) {
Get-ADGroupMember -identity $group -Recursive |
Get-ADUser -Properties * |
Select-Object @{Name='Group';Expression = {$group}},
displayname,
name,
employeeID,
Department,
title,
physicalDeliveryOfficeName,
Manager,
@{Name='ManagerName';Expression = {Get-ADUser -Identity $_.Manager | Select-Object -ExpandProperty DisplayName}},
sAMAccountName,
givenName,
surname,
UserPrincipalName
}
$results | Export-Csv -Append “C:\temp\GetADGroupMember4.csv” -NoTypeInformation -Encoding UTF8
ОБНОВЛЕНИЕ 1
Только что запустил приведенный выше сценарий, и с ним возникает та же проблема: сведения о менеджерах предоставляются, но поле имени менеджера пусто, а поле менеджеров имеет значение отличающееся имя (так же, как мой сценарий выше)
ОБНОВЛЕНИЕ 2
Я изменил код по запросу (вероятно, сделал это неправильно):
$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
$params = @{
LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
Properties = 'mail', 'manager'
}
foreach($member in Get-ADUser @params) {
Manager = (Get-ADuser $member.Manager).DisplayName
[pscustomobject]@{
Username = $member.SamAccountName
Name = $member.Name
Mail = $member.Mail
Manager = $member.Manager
GroupName = $_.Name
}
}
} | Export-csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation
При попытке запустить код получаю следующую ошибку:
Manager : The term 'Manager' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At C:\Users\TestUser\Desktop\Audit.ps1:9 char:5
+ Manager = (Get-ADuser $member.Manager).DisplayName
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (Manager:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Я пытался добавить код Manager = (Get-ADuser $member.Manager).DisplayName
в другие области кода, но все равно не получилось.
Обновление 3
Я попробовал это, но, пытаясь разместить строку кода в разных областях, я не стал публиковать кучу ненужного кода.
Внес запрошенное вами изменение и получил следующее сообщение об ошибке:
Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the
command again.
At C:\Users\TestUser\Desktop\Audit.ps1:13 char:42
+ Manager = (Get-ADUser $member.Manager).DisplayName
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Обновление 4
Теперь сценарий работает, но отображаемое имя менеджера не переносится из AD в CSV:
ОБНОВЛЯТЬ
Похоже, что это только один менеджер AD и повторяется для всех пользователей:
Приносим извинения за ту же проблему, что означает, что данные менеджера указаны как имя менеджера. Я обновлю вопрос.
Это имеет смысл, вы по-прежнему выбираете Manager
как есть, но что вы получаете в качестве значения в добавленном столбце ManagerName
?
Извините, я запутался. поле ManagerName в CSV-файле пусто.
В вашем первом скрипте вам не хватает Manager = (Get-ADuser $member.Manager).DisplayName
@SantiagoSquarzon, где я добавляю эту строку кода? Я знаю глупый вопрос, но попробовал и не получилось
в первом фрагменте кода у вас есть цикл для foreach($member in Get-ADUser @params) {
для свойства Manager
@SantiagoSquarzon попробовал это, но безуспешно. См. мое Обновление 2, догадавшееся об ошибке пользователя с моей стороны.
Смотри мой ответ, потом удалю
Кроме того, Get-ADGroupMember также может возвращать объекты типа группа или компьютер, поэтому вы не можете просто передать команду Get-ADUser без предварительной фильтрации объектов .ObjectClass
.
Первый фрагмент кода правильный, вам просто нужно запросить AD, чтобы получить отображаемое имя менеджера из $member.Manager
(отличительное имя менеджера). Некоторым пользователям может не быть назначен менеджер, поэтому вы можете просто добавить условие, которое проверяет, заполнен ли атрибут .Manager
. Это может быть:
$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
$params = @{
LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
Properties = 'mail', 'manager'
}
foreach ($member in Get-ADUser @params) {
$manager = if ($member.Manager) {
(Get-ADUser $member.Manager -Properties DisplayName).DisplayName
}
else {
'No manager assigned in AD'
}
[pscustomobject]@{
Username = $member.SamAccountName
Name = $member.Name
Mail = $member.Mail
Manager = $manager
GroupName = $_.Name
}
}
} | Export-Csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation
Пожалуйста, не могли бы вы увидеть обновление 3.
@S.Mahmood, эта ошибка возникает, когда пользователю не назначен менеджер. Вы ищете только пользователей, у которых ЕСТЬ менеджер, или всех?
некоторые делают некоторые нет. Я бы предпочел, чтобы все эти поля emtpy-менеджеров не были большой проблемой, НО менеджеры, назначенные в AD, нам нужны с помощью этого скрипта, если это возможно. Было бы хорошо, если бы в поле emtpy было указано «в AD не назначен менеджер».
@S.Mahmood посмотреть обновление
Как добраться, скрипт работает, НО отображаемое имя менеджера не вводится в CSV, оно пустое - см. обновление 4.
@S.Mahmood пропал -Properties DisplayName
мойб
Сантьяго сейчас добивается прогресса, но, пожалуйста, дождитесь обновления 4.
@S.Mahmood попробуйте обновление
Сантьяго, ты как всегда МУЖЧИНА!!!! Спасибо!!
@S.Mahmood рад, что это было полезно, извините за опечатки
Не нужно извиняться, я рад, что получил от вас помощь.
«Я обнаружил, и возникает та же проблема» — какая та же проблема? Вы не поделились никакими ошибками или выводами :)