2017-09-19 1 views
0

Ich bin beauftragt, ein Skript zu erstellen, die die folgende Aufgabe ausführen kann. Beispiel: Wir haben ein Domain-ABC.Powershell - Überprüfen Sie mehrere Benutzer und schließen Sie doppelte Benutzer und add count

Es gibt 4 Sicherheitsgruppen, genannt A, B, C und D.

Peter ist Mitglied der A- und B-Gruppe. David ist Mitglied der B- und C-Gruppe. John ist Mitglied einer Gruppe. B-Gruppe ist auch ein Mitglied Eine Gruppe.

Wir möchten die Gesamtzahl der Benutzer in A, B-Gruppen finden. Die Benutzer, die bereits in der Gruppe sind, werden in der Zählung ausgeschlossen. Auf der Basis von oben zeigt das Skript eine Gesamtanzahl von A & B = 3 Benutzern anstelle von 5 Benutzern. Ich habe versucht, an einem Skript zu arbeiten, das den Benutzer in A- und B-Gruppen zählt und auch jede Gruppe in A- und B-Gruppe. Wenn sich John in A und B befindet, fügt das Skript nur 1 Anzahl hinzu. Auch wenn David in der B-Gruppe, aber nicht in der Gruppe A ist, wird 1 Zählung hinzugefügt.

Bearbeiten: nach der Änderung des Codes mit Ihnen helfen, es gibt keinen Fehler. Das angezeigte Ergebnis ist jedoch leer.

$groups = $A_group, $B_Group 
$gm  = @() 
foreach ($group in $groups) { 
    $gm += Get-ADGroupMember $group | 
      where {$_.objectclass -eq 'user'} | 
      select SamAccountName 
} 
($gm.samaccountname | Select -Unique).Count 
Write-Output $total = ($gm.samaccountname | Select -Unique).Count 
+1

wo definieren Sie Ihre $ Gesamtvariable? – guiwhatsthat

+0

Wie * genau * hat der Code "nicht funktioniert"? Was war das erwartete Ergebnis? Was war das tatsächliche Ergebnis? Hast du Fehler bekommen? Was haben sie gesagt? –

+0

'$ total = ($ gm.samaccountname | Select -Unique) .Count; Write-Output $ total' –

Antwort

0

Da sind verschachtelte Gruppen [Gruppen innerhalb Gruppen], das einzige, was Sie fehlen die -recursive Parameter für Get-ADGroupMember. Dadurch werden die Benutzer auch in die verschachtelte ADGroup B aufgenommen, anstatt nur den ADGroup B-Namen zurückzugeben.

Ändern Sie diese Zeile wie folgt:.

$gm += Get-ADGroupMember $group -Recursive | where objectclass -eq 'user' | select SamAccountName 

Ich weiß nicht, was die letzte Zeile tut [Scheint falsch und unnötig] Die folgende Zeile genug ist, dass Sie die Gesamtzahl zu erhalten.

$total = ($gm.samaccountname | Select -Unique).count 
+0

Ich habe einen Fehler bekommen, als ich den Code ausgeführt habe. char: 17 + wo <<<< objectclass -eq 'Benutzer' | + CategoryInfo: InvalidArgument: (:) [Where-Object], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.WhereObjectCommand Where-Object: kann nicht binden Parameter 'filter'. Der Wert "objectclass" des Typs "System.String" kann nicht in den Typ "System.Management.Automation.ScriptBlock" konvertiert werden. – Power988

+0

Bei ps1: 28 char: 17 + wo <<<< objectclass -eq 'Benutzer' | + CategoryInfo: InvalidArgument: (:) [Where-Objekt], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.WhereObjectCommand – Power988

+0

Nicht sicher, warum es keine Antwort stattdessen muss den Kommentar verwenden? – Power988

Verwandte Themen