Проблемы с операторами If

#powershell #if-statement #logical-operators

#powershell #if-statement (оператор if) #логические операторы

Вопрос:

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

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

$LDAPFilter = '(amp;(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
    }
}
  

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

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

Скриншот

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

Комментарии:

1. Попробуйте if ($groups.matcheddn -eq $null) { 'no group found' }

2. К сожалению, это остается тем же самым

3. Я думаю, что $groups это массив, поэтому вы могли бы протестировать Count свойство с помощью if ($groups.Count -eq 0) or if (!($groups.Count)) . Не могу проверить это сам прямо сейчас..

4. Это не массив «$ Groups. Записи «остается 1 при любых обстоятельствах

5. что вы получаете в ответ, когда группа ДЕЙСТВИТЕЛЬНО существует?

Ответ №1:

Какую версию PowerShell вы используете? Почему вы не используете встроенные командлеты группы AD для этого или используете не ADD, а какую-то другую службу 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 = "(amp;(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"}
}