Active Directory mit der PowerShell auslesen

Für einige PowerShell-Scripte (die ich auch hier veröffentlichen werde, sobald sie fertig sind) brauche ich eine Liste aller Computer, die in unserem Active Directory bekannt sind. Nichts einfacher als das:

  1. # Returns a list of all computers (running Windows XP) in the local LDAP
  2. function GetComputersFromLDAP()
  3. {
  4.         trap
  5.         {
  6.                 write-host ("Error while retrieving computers from LDAP: " + $_.exception.message) -foregroundcolor "red";
  7.                 return $false;
  8.         }
  9.         $pcs = @();
  10.         $ldapSearcher = new-object directoryservices.directorysearcher;
  11.         $ldapSearcher.filter = "(objectclass=computer)";
  12.         $computers = $ldapSearcher.findall();
  13.         foreach ($computer in $computers)
  14.         {
  15.                 if ($computer.properties["operatingsystem"] -eq "Windows XP Professional")
  16.                 {
  17.                         $pc = "" | select-object Name;
  18.                         $pc.Name = $computer.properties["name"];
  19.                         $pcs += $pc;
  20.                 }
  21.         }
  22.         return ($pcs | sort-object Name);
  23. }

Über das zurückgegebene Array kann man dann wie folgt iterieren:

  1. foreach ($pc in $pcs)
  2. {
  3.         write-host $pc.Name;
  4. }

Über uns Stefan

Polyglot Clean Code Developer

8 Kommentare

  1. Pingback:PowerShell: Verfügbaren Hauptspeicher (RAM) für mehrere PCs ermitteln » Stefan Macke

  2. Hi,

    das sieht ja schon ganz nett aus. Wie wäre es aber z.B. gleich gewisse Keys als Schlüssel zu benutzen, z.B. einen Server oder gar Printserver auszulesen und zwar anhand des „Merkmals“?? –

    Gruß

    p

  3. @pollewetzer: Es steht dir frei, dass Script zu erweitern 🙂 Für meine Zwecke reicht es aus…

  4. Pingback:IT Blog

  5. Hallo Bernd. Du hast natürlich recht, die $dir-Zeile bewirkt gar nichts. Das muss wohl noch aus einer früheren Version des Scripts übriggeblieben sein. Ich habe sie aus dem Listing entfernt.

  6. Pingback:Verweis auf mein PowerShell-Script in der aktuellen Ausgabe der hakin9 » Stefan Macke

  7. Und hier noch eine Version mit konvertierung von einer ausgewählten anzahl an Attributen und einer noch eleganteren Version die einfach alle Attribute aus dem AD Object in Not-Properties umkopiert:

    $ldapSearcher = new-object directoryservices.directorysearcher;
    $ldapSearcher.filter = "(objectclass=computer)";
    $computers = $ldapSearcher.findall();
    [Array] $pcs = $null;
    foreach ($c in $computers)
    {
        $pcs += New-Object PSobject -property @{
          Name = [string]$c.properties["cn"];
          OS = [string]$c.properties["operatingsystem"];
          SP = [string]$c.properties["operatingsystemservicepack"];
          SPN = [string]$c.properties["serviceprincipalname"];
        }
    }
    
    $ldapSearcher = new-object directoryservices.directorysearcher;
    $ldapSearcher.filter = "(objectclass=computer)";
    $computers = $ldapSearcher.findall();
    [Array] $pcs = $null;
    $computers | ForEach-Object { $pcs += New-Object PSobject -property $_.Properties; }
    $pcs | Out-GridView;
    

    (mit Unterstützung von @MaxTrinidad)

    Gruss
    Bernd

  8. Schön,
    ich mach es mir einfacher.

    LinuxServer verbunden mit Winserver SMBSTATUS = Alle verbundenen PCs

    Das Script ist aber natürlich auch nicht schlecht.
    🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax