Clients einer Domäne in der PowerShell anzeigen?
03.02.2012
09:41:33 Uhr442 Aufrufe
3 Antworten
09:41:33 Uhr
3 Antworten
Noch nicht bewertet
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!
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!
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
lg,
Slainte
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
lg,
Slainte
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?
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?
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";
$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();
foreach ($objResult in $colResults)
{
$objComputer = $objResult.Properties;
$computer = $objComputer.name;
$ipAddress = $pingStatus.ProtocolAddress;
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
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.
Mein verwendetes Skript:
credential domain\username
$datetime = Get-Date -Format "yyyyMMddhhmmss";
$strCategory = "computer";
- Create a Domain object. With no params will tie to computer domain
$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();
- Add column headers
foreach ($objResult in $colResults)
{
$objComputer = $objResult.Properties;
$computer = $objComputer.name;
$ipAddress = $pingStatus.ProtocolAddress;
- Ping the 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
- 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
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.









