patricks82 10 Geschrieben 7. März 2008 Melden Teilen Geschrieben 7. März 2008 Hallo, ich suche eine einfache Möglichkeit ähnlich wie bei der cmd.exe Programmausgaben einzubinden. cmd.exe Beispiel: echo Test - `dsquery computer -name *test*` Wie geht das mit der PS 1.0 für XP ? Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 7. März 2008 Melden Teilen Geschrieben 7. März 2008 Hi, unter Umständen kannst Du "Invoke-Expression" nutzen. Aber einmal anders gefragt: Was möchtest Du genau erreichen? Viele Grüße olc Zitieren Link zu diesem Kommentar
patricks82 10 Geschrieben 10. März 2008 Autor Melden Teilen Geschrieben 10. März 2008 Versuche erstmal, mittels normales AD Abfrage bestimmte infos über einzelne Rechner rauszubekommen. eig. soll das so aussehen gwmi win32_bios -computer `dsquery computer -name Test*` | ft Da mir die PS noch nicht 100% geläufig ist :) möchte ich die ADSI Abfrage erstmal umgehen. Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 10. März 2008 Melden Teilen Geschrieben 10. März 2008 Hi paddy82, ok, ich verstehe was Du machen möchtest. Dafür brauchst Du das "Invoke-Expression" nicht. Du kannst theoretisch die Abfrage einfach an eine Variable übergeben - diese führt die Abfrage dann aus und übergibt die entsprechenden Werte dann der gewünschten Funktion bzw. dem gewünschten CMDlet. Also in der Form: $meine_variable = dsquery computer -name Test* ABER: Leider geht es nicht so, wie Du Dir das vorgestellt hast. ;) Das Problem ist, daß die WMI-Abfrage ein anderes Format erwartet, als Du es über dsquery bekommst. Dort wird nämlich der DN der Computerkonten zurückgegeben. Eine Weiterleitung an DSGET bringt Dich auch nur einen Schritt weiter, da Du bei einer Abfrage nach SAMIDs die Computernamen mit "$" angezeigt bekommst. Das müßte dann noch gefiltert werden. Daher die Frage: Willst Du das Problem an sich lösen oder willst Du PowerShell lernen? :) Je nachdem sieht die Antwort auf die Fragestellung nämlich unter Umständen vollkommen anders aus. ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
patricks82 10 Geschrieben 11. März 2008 Autor Melden Teilen Geschrieben 11. März 2008 erstmal vielen Dank für die Zeit die Du Dir nimmst :) Das Skript soll dann auch Produktiv eingesetzt werden (nach genügend Einarbeitung). Nunmal zu meinem Verständnis: ich kann die Ausgabe dann in einer Variable (Array) setzen. Diese könnte ich dann später weiterverwenden oder? Würde doch auch eine Schleife gehen nach dem Motto: $domComputers = dsquery computer -name test* -o rdn for each $domComputers gwmi win32_services -computer $domComputers next ?? Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 11. März 2008 Melden Teilen Geschrieben 11. März 2008 Hallo, ja, das sollte so funktionieren, wenn Du bei "win32_services" das "s" wegläßt. ;). Außerdem mußt Du die Syntax an die PowerShell anpassen und nicht VBScript nutzen. ;) Probiere einmal (ungetestet): $domComputers = dsquery computer -name test* -o rdn ForEach ($variable in $domComputers) { Get-WMIObject win32_service -computer $variable } Der "saubere" Weg wäre in diesem Fall jedoch, die Objekte direkt per LDAP / ADSI aus der AD zu lesen, da sie dem Array dann nicht als normale Strings, sondern als Objekte zurückgegeben werden würden. Aber Du schriebst, daß Du das später testen möchtest. :) Viele Grüße olc Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 11. März 2008 Melden Teilen Geschrieben 11. März 2008 Hallo, ich habe das oben aufgeführte Script nach meinem Post einmal getestet: Es läuft leider nicht korrekt. Offensichtlich hat die PowerShell ein Problem damit, daß der Übergabewert für das WMI-Query "-Computer" kein Objekt, sondern ein String ist. Es wird jedenfall nicht korrekt verarbeitet. Aber was solls - ich bin zwar überhaupt kein "Scripting Guy", aber eine Lösung sollte schon her. Daher nach einigen Tests folgender Vorschlag: $category = "(objectcategory=computer)" $AD = [ADSI]"LDAP://DC=testdom,DC=intern" $properties = "name" $search = New-Object System.DirectoryServices.DirectorySearcher($AD,$category) $search.PageSize = 1000 $search.PropertiesToLoad.Add($properties) $result = $search.Findall() foreach ($res in $result) { $computername = $res.properties.name write-host write-host write-host $computername write-host ======================================== Get-WMIObject win32_service -computer $Computername -errorAction SilentlyContinue | Format-Table -auto } Bin für jeden Verbesserungsvorschlag offen. ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
patricks82 10 Geschrieben 12. März 2008 Autor Melden Teilen Geschrieben 12. März 2008 Hei Danke für Deine Mühen :) werde das gleich mal in meiner Testdomäne ausprobieren :) Gibts eig. ne Referenz für alle Befehle von der PS ? Habe bisher immer nur kleine Scriplets gefunden. Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 12. März 2008 Melden Teilen Geschrieben 12. März 2008 Hallo, na dann schauen wir einmal, ob Dir das Script zusagt. ;) Eine komplette Referenz kenne ich leider nicht - jedoch ist folgendes Dokument ein guter Startpunkt: Windows PowerShell Quick Reference Weiterhin bietet Technet einen eigenen PowerShell Bereich und es gibt massenweise Blogs etc. Die PowerShell CMDlets "Get-Help" und "Get-Command" sind auch recht hilfreich. ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.