531
d4shoerncheN
goscho
zanko

Clients einer Domäne in der PowerShell anzeigen?

Mitglied: McKenna
03.02.2012
09:41:33 Uhr
442 Aufrufe
3 Antworten
Moin,

ich bin gerade dabei eine Softwareinventarisierung über die PowerShell zu machen.
Bis jetzt habe ich nur rausgefunden wie ich die installierte Software auf einem Client im der Domäne abrufen kann und dementsprechend auch filtern kann, z.B. nach dem Hersteller der Software und so weiter.
Nur möchte ich gerne das alle Clients einer Domäne nach der entsprechenden Software abgesucht werden und ich dann mehrere geordnete Listen zurück bekomme wo die einzelnen Clients mit der Software angezeigt werden.
Kann mir jemand sagen ob es einen Befehl für die PowerShell gibt, der mir alle Clients einer Domäne anzeigt?
Und wenn, ob es dann möglich ist die Ausgabe zu sortieren das er mir nicht die installierte Software von allen in einer Liste anzeigt?

Ich verwende nur Win7 und XP Clients und als Server nur Windows Server 2008 R2.

Bin dankbar für jede Antwort!

Mitglied: SlainteMhath
SlainteMhath schreibt am 03.02.2012 um 09:51:20 Uhr
Moin,

Versuchs mal mit "Get-ADComputer".
Damit du mit PS auf das AD zugreifen kannst muss am DC der Active Directory Web Service laufen, und am Client (der das Script ausführt) muss das RSAT installiert sein.

Guckst Du auch hier face-smile

lg,
Slainte
Mitglied: McKenna
McKenna schreibt am 03.02.2012 um 11:54:54 Uhr
Danke für deine Antwort Slainte!

Also bis jetzt bin ich so weit, dass ich mir über den befehl "get-adcomputer -filter * >C:\swi.txt " eine textdatei mit den gelisteten computern gemacht habe und mein Befehl für die PowerShell lautet jetzt so:

get-content "C:\swi.txt" | foreach { get-wmiobject win32_product } | Where-Object {$_.Name -match"Microsoft Office"}| select-object vendor,name,version

das klappt auch, mir werden die installierten MS Office Versionen angezeigt, aber nach dem entsprechenden PC sortiert sind sie nicht.

Hat jemand eine Ahnung, wie ich die Ausgabe nach den entsprechenden Clients sortieren kann?
Mitglied: McKenna
McKenna schreibt am 08.02.2012 um 08:47:53 Uhr
Da ich alleine nicht so richtig weitergekommen bin, habe ich von einem Kollegen ein fertiges Skript aus dem Internet bekommen, wo in einer domäne die Clients ersteinmal angepingt werden bevor eine WMI-Abfrage gemacht wird. Das Original: http://clintboessen.blogspot.com/2009/12/ ...


Mein verwendetes Skript:

credential domain\username
$datetime = Get-Date -Format "yyyyMMddhhmmss";
$strCategory = "computer";

  1. Create a Domain object. With no params will tie to computer domain
$objDomain = New-Object System.DirectoryServices.DirectoryEntry;

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher; # AD Searcher object
$objSearcher.SearchRoot = $objDomain; # Set Search root to our domain
$objSearcher.Filter = ("(objectCategory=$strCategory)"); # Search filter

$colProplist = "name";
foreach ($i in $colPropList)
{
$objSearcher.PropertiesToLoad.Add($i);
}

$colResults = $objSearcher.FindAll();


  1. Add column headers
Add-Content "$Env:USERPROFILE\softwareaudit $datetime.txt" "Installation Date Vendor Version Computer Name";

foreach ($objResult in $colResults)
{
$objComputer = $objResult.Properties;
$computer = $objComputer.name;

$ipAddress = $pingStatus.ProtocolAddress;
  1. Ping the computer
$pingStatus = Get-WmiObject -Class Win32_PingStatus -Filter "Address = '$computer'";

if($pingStatus.StatusCode -eq 0)
{
Write-Host -ForegroundColor Green "Ping Reply received from $computer.";

write-host "Connecting to $computer..."

$colItems = get-wmiobject -class "Win32_Product" | Where-Object {$_.Name -match "Microsoft Office "}


write-host "#############################"
write-host "Computer: " $computer
write-host "#############################"
write-host
write-host

foreach ($objItem in $colItems)
{
write-host "Name: " $objItem.Name
$name = $objItem.Name
write-host "Vendor: " $objItem.Vendor
$vendor = $objItem.Vendor
write-host "Version: " $objItem.Version
$version = $objItem.Version
write-host "Installation Date: " $objItem.InstallDate
$installdate = $objItem.InstallDate
write-host

  1. Need to add in a special character for " as some of the values from the WMI query has commers in them that mess up the csv file
$sc = [char]34

Add-Content "$Env:USERPROFILE\softwareaudit $datetime.txt" "$sc$installdate$sc $sc$vendor$sc $sc$version$sc $sc$computer$sc $sc$name$sc"
}
}
else
{
Write-Host -ForegroundColor Red "No Ping Reply received from $computer.";
}
}

---------------------------
Nun das funktioniert auch wunderbar, ich erhalte eine Textdatei wo alles abgefragte drinne steht. Nur wäre es etwas schöner wenn man eine formatierte Tabelle ausgeben könnte, weil einige Clients haben längere Namen und andere kürzere, dadurch sieht es natürlich etwas unschön aus.
Immoment habe ich das übergangsweise so geregelt das ich, wie man sieht die die Daten für die Ausgabe mit der Leertaste formatiert habe.
Meine Frage ist, wie ich das hinbekomme, das die ausgegebene Textdatei als Tabelle formatiert wird.
mehr ...Ähnliche Beiträge