Борьба с заявлениями If - PullRequest
0 голосов
/ 21 марта 2019

У меня проблемы с пониманием значений переменных в PowerShell, и я проверяю их с помощью операторов if.

$LDAPDirectoryService = '10.10.XXX.XXX:389'
$DomainDN = 'o=Enterprise'
#$LDAPFilter = '(&(objectCategory=Person)(memberOf=cn=alc-01-Planung-rw,ou=KT,o=enterprise))'

$LDAPFilter = '(&(cn=alc-01-Planung-rw))'

$null = [System.Reflection.Assembly]::LoadWithPartialName('System.Net')

$LDAPServer = New-Object System.DirectoryServices.Protocols.LdapConnection $LDAPDirectoryService
$LDAPServer.AuthType = [System.DirectoryServices.Protocols.AuthType]::Anonymous

$Scope = [System.DirectoryServices.Protocols.SearchScope]::Subtree
$AttributeList = @('*')

$SearchRequest = New-Object System.DirectoryServices.Protocols.SearchRequest -ArgumentList $DomainDN,$LDAPFilter,$Scope,$AttributeList

$groups = $LDAPServer.SendRequest($SearchRequest)
$groups

if ($groups -eq $null) {"No Group found"}
if ($groups -eq " ") {"No Group found"}

foreach ($group in $groups.Entries) {
    $users = $group.attributes['member'].GetValues('string') 
    foreach ($user in $users) {
        Write-Host $user
    }
}

Я хочу проверить, существует ли группа, а затем, существуют ли пользователи в этой группе. Я перепробовал много утверждений, но ни одно из них не помогло. Он не нулевой и не пустой, даже если в консоли ничего не записано.

Это то, что я получаю, когда использую группу, которой не существует:

Screenshot

Кто-нибудь может показать мне решение?

1 Ответ

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

Какую версию PowerShell вы используете? Почему вы не используете для этого встроенные командлеты группы AD или не используете ADDS, а какую-то другую службу LDAP?

Или, возможно, вы работаете в OSX / Linux и используете PSCore, которого нет, а еще нет командлетов ADDS / RSAT?

Для ваших целей ...

Я хочу проверить, существует ли группа, а затем, если пользователи существуют в эта группа.

... В Windows, с PowerShell 3x или выше, это действительно только это ...

# Get all AD groups and all members of each group
Clear-Host
(Get-ADGroup -Filter '*').Name | 
%{
    "`n*** The members of $PSItem are as follows: ***`n"
    If((Get-ADGroupMember -Identity $PSItem).Count -ge 1)
    {
        (Get-ADGroupMember -Identity $PSItem).SamAccountName
    }
    Else
    {
        Write-Warning -Message "$PSItem does not exist or has no members."
    }
}


# Filtered
Clear-Host
((Get-ADGroup -Filter '*').Name -match 'Domain Admins|Domain Users' ) | 
%{
    "`n*** The members of $PSItem are as follows: ***`n"
    If((Get-ADGroupMember -Identity $PSItem).Count -ge 1)
    {
        (Get-ADGroupMember -Identity $PSItem).SamAccountName
    }
    Else
    {
        Write-Warning -Message "$PSItem does not exist or has no members."

    }
}

Используя ваш подход LDAP, хотя ... Как насчет этого ...

'Administrators','Distributed COM Users' | 
ForEach {
    # Define LDAP search root, the Global catalog of the domain
    $sLDAPSearchRoot = "LDAP://$((Get-ADDomainController).IPv4Address):389"

    # The Groupname to looking for
    ($sGroupName = "$_")

    # The LDAP query - query string
    $sSearchStr = "(&(objectCategory=group)(name="+$sGroupName+"))"

    # Get the search object
    $oSearch = New-Object directoryservices.DirectorySearcher($oADRoot,$sSearchStr)

    # Looking for the group
    $oFindResult = $oSearch.FindAll()

    # On success, get a DirectoryEntry object for the group
    $oGroup = New-Object System.DirectoryServices.DirectoryEntry($oFindResult.Path)


    # And list all members
    If (($oGroup.Member).Count -ge 1) 
    { 
        $oGroup.Member | 
        %{($oMembers = New-Object System.DirectoryServices.DirectoryEntry($sLDAPSearchRoot+"/"+$_))}
    }
    Else
    { Write-Warning -Message "$($oGroup.Member) does not exist or has no members"}
}
...