Rechner im AD LDAP mit Powershell auflisten

Ich hab ein wenig mit Powershell herumgespielt (weil ich das Script das auch in de.Hackin9.org 08/2011 abgebildet war nicht verstanden habe). Dabei kam dann folgendes funktionierendes Script heraus, es sortiert mit alle Rechner des AD LDAPs und zeigt diese in einem grafischen Viewer mit Betriebsystemversion und Servicepack Level an:
$ldapSearcher = new-object directoryservices.directorysearcher;
$ldapSearcher.filter = "(objectclass=computer)";
$computers = $ldapSearcher.findall();
$pcs = @();
foreach ($c in $computers) {
  $pc = "" | Select-Object Name,OS,SP,SPN;
  $pc.Name=$c.properties["cn"];
  $pc.OS=$c.properties["operatingsystem"];
  $pc.SP=$c.properties["operatingsystemservicepack"];
  $pc.SPN=$c.properties["serviceprincipalname"];
  $pcs += $pc;
}
$pcs | sort-object OS,SP,Name | Out-GridView;
Ich habe aber keine Ahnung wie man einfacher aus den Dictionary Entries des $c.Properties Member direkte Properties machen kann ohne diese mit einer foreach Schleife und direktem Assignment aufwändig zu kopieren. Ich hoffe ein mitlesender Powershell Guru kann mir das kurz sagen? :) Update: Max Trinidad (@MaxTrinidad) hat mich auf die Idee mit New-Object gebracht, damit lässt sich das Script etwas vereinfachen und die Attribute in Strings konvertieren:
$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"]; }
}
Und darauf aufbauend (aber ohne String Konvertierung) dann die Lösung mit der Automatischen Übernahme aller Dictionary Einträge aus dem AD Objekt:
$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;

Trackbacks


Deprecated: Function create_function() is deprecated in /var/www/itblog.eckenfels.net/data/plugins/serendipity_event_markdown/lib/Michelf/Markdown.php on line 1502

Hope This Helps am : Windows 2008 / 7 - Powershell alle Rechner mit Betreibssystem in eine Datei

Vorschau anzeigen

Fatal error: Uncaught Error: Call to undefined function mb_convert_encoding() in /var/www/itblog.eckenfels.net/data/templates_c/2k11/b5/ec/fc/b5ecfc87d304c2e099898d2117cb5f736eee79ca_0.file.trackbacks.tpl.php:62 Stack trace: #0 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_internal_template.php(371): content_589e781fde6d88_91821900(Object(Smarty_Internal_Template)) #1 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_template_compiled.php(202): Smarty_Internal_Template->getRenderedTemplateCode() #2 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_internal_template.php(246): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #3 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/Smarty.class.php(820): Smarty_Internal_Template->render(true, false, false) #4 /var/www/itblog.eckenfels.net/data/include/functions_smarty.inc.php(81): Smarty->fetch('file:/var/www/i...', NULL, NULL, Object(Serendipity_Smarty), false) #5 in /var/www/itblog.eckenfels.net/data/templates_c/2k11/b5/ec/fc/b5ecfc87d304c2e099898d2117cb5f736eee79ca_0.file.trackbacks.tpl.php on line 62