Сценарий Powershell для запроса Active Directory - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь запросить всех пользователей в нескольких подразделениях с одним и тем же именем.Получите атрибут SamAccountName, а затем проверьте наличие файла в определенном месте с этим именем.

Вот что у меня есть:

$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'" 
$ous | ForEach-Object {
    $AccountName = Get-ADUser -Filter * -SearchBase $_.DistinguishedName |
                   Select SamAccountName
    Test-Path "\\domain.net\SYSVOL\domain.net\IA\$AccountName.pdf"
}

Если файл не найден.Я хочу добавить пользователя в группу, однако вот кикер.Учетная запись должна быть добавлена ​​в группу несоответствия для организации, к которой принадлежит эта учетная запись.

IE учетная запись администратора с именем:

OU=Admin-User-Accounts,OU=Administration,OU=ORG1,OU=ORGS,DC=domain,DC=net

будет добавлена ​​в группу с именем«ORG1 IA - Несоответствующие пользователи», расположенные под:

OU=Groups,OU=ORG1,OU=Information Assurance,OU=ORGS,DC=domain,DC=net

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Кажется, что одна из переменных неверна, потому что PowerShell дает мне следующее:

Get-ADPrincipalGroupMembership: не удалось проверить аргумент для параметра «Идентичность». Аргумент нулевой или пустой. Укажите аргумент, который не является пустым или пустым, а затем попробуйте команду еще раз.

Хорошо, вот что у меня есть на основании вашего поста выше Постанота:

# query all users in multiple OUs
(Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'") |
ForEach{
    # Collect all members of the current OU
    $AccountNames = Get-ADUser -SearchBase $PSItem -Filter *

    # Process each member in the current OU collection
    ForEach($AccountName in $AccountNames)
    {
        "Processing $($AccountName.SamAccoutnName)`n"

        # Initialize properties needed for processing
        $UserOrg = $AccountName.DistinguishedName.split(",")[1]
        $MemberCheckOU = "OU=Admin-User-Accounts,OU=Administration,OU=$UserOrg,OU=ORGS,DC=domain,DC=net"
        $NonCompliantOU = "OU=Groups,OU=$UserOrg,OU=Information Assurance,OU=ORGS,DC=domain,DC=net"

        # Validate user file existence for the current user
        If(-Not (Test-Path -LiteralPath "\\domain.net\SYSVOL\domain.net\IA\$($AccountName.SamAccoutnName).pdf)"))
        {
            # if no file Process the user groupmebership modification
            "Processing $($AccountName.SamAccoutnName)"

            # Notify that the file was not found and processing is required
            Write-Warning -Message "$($($AccountName.SamAccoutnName).pdf) not found. Process group modify actions"       

            # If the current user is in the MemberCheckOU, add to the NonCompliantOU
            If(Get-ADPrincipalGroupMembership -Identity $($AccountName.SamAccoutnName) | Where-Object -Property DistinguishedName -Match $MemberCheckOU )
            { Add-ADGroupMember -Identity "$UserOrg IA - Non-Compliant Users" -Members $($AccountName.SamAccoutnName) }
            Else
            {
                # Do something else
            }
        }
        Else
        { 
          # Notify that the file was found and no processing required
          Write-Host "$($AccountName.pdf) found. No further actions taken" -ForegroundColor Green }
    }
}
0 голосов
/ 14 марта 2019

Глядя на оригинальный фрагмент скрипта:

$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'" 
$ous | ForEach-Object {
    $AccountName = Get-ADUser -Filter * -SearchBase $_.DistinguishedName |
                   Select SamAccountName   # note 1
    Test-Path "\\domain.net\SYSVOL\domain.net\IA\$AccountName.pdf"   # note 2
}

Примечание 1: в итоге вы получите $ accountname.accountname, содержащее ваше значение. Я думаю, что вы захотите расширить это вместо этого. Примечание 2: Powershell может запутаться и подумать, что вы ищете переменную $ accountname.pdf

Вместо этого попробуйте это ...

$ous = Get-ADOrganizationalUnit -Filter "Name -eq 'Admin-User-Accounts'" 
$ous | ForEach-Object {
    $AccountName = $(Get-ADUser -Filter * -SearchBase $_.DistinguishedName).SamAccountName 
    Test-Path "\\domain.net\SYSVOL\domain.net\IA\$($AccountName).pdf"   
}

здесь мы сохраняем значение .SamAccountName для запроса к $ AccountName, и добавляя $ ($ accountname), мы очищаем переменную, которую хотим, и что .pdf не является частью имени переменной.

Теперь, обратите внимание, что это никуда не сохраняет результаты, оно просто высвечивает их на экран.

0 голосов
/ 14 марта 2019

Ну, ваш пост немного сбивает с толку, и нет никакой возможности проверить его, потому что у меня ничего подобного нет.

Тем не менее, запросы пользователей во всех подразделениях или на предприятиях - обычное дело.

Однако имя подразделения, как и любое другое имя объекта AD, должно быть уникальным.Таким образом, запрос одного и того же имени подразделения не является чем-то особенным в одном лесу / домене AD.Если вы имели в виду запрос каждого OU для одного и того же имени пользователя, тогда хорошо.

Пошагово объясните, как вы объясняете свой вариант использования, который выложили.

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

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

# query all users in multiple OUs
(Get-ADOrganizationalUnit -Filter *).DistinguishedName |
ForEach{
    # Collect all members of the current OU
    $AccountNames = Get-ADUser -SearchBase $PSItem -Filter *

    # Process each member in the current OU collection
    ForEach($AccountName in $AccountNames)
    {
        "Processing $($AccountName.SamAccoutnName)`n"

        # Initialize properties needed for processing
        $UserOrg = $AccountName.DistinguishedName.split(",")[1]
        $MemberCheckOU = "OU=Admin-User-Accounts,OU=Administration,OU=ORG1,OU=$UserOrg,DC=domain,DC=net"
        $NonCompliantOU = "OU=Groups,OU=ORG1,OU=Information Assurance,OU=$UserOrg,DC=domain,DC=net"

        # Validate user file existence for the current user
        If(-Not (Test-Path -LiteralPath "\\domain.net\SYSVOL\domain.net\IA\$($AccountName.SamAccoutnName).pdf)"))
        {
            # if no file Process the user groupmebership modification
            "Processing $($AccountName.SamAccoutnName)"

            # Notify that the file was not found and processing is required
            Write-Warning -Message "$($($AccountName.SamAccoutnName).pdf) not found. Process group modify actions"       

            # If the current user is in the MemberCheckOU, add to the NonCompliantOU
            If(Get-ADPrincipalGroupMembership -Identity $($AccountName.SamAccoutnName) | Where-Object -Property DistinguishedName -Match $MemberCheckOU )
            { Add-ADGroupMember -Identity $NonCompliantOU -Members $($AccountName.SamAccoutnName) }
            Else
            {
                # Do something else
            }
        }
        Else
        { 
          # Notify that the file was found and no processing required
          Write-Host "$($AccountName.pdf) found. No further actions taken" -ForegroundColor Green }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...