Jump to content
Sign in to follow this  
patricks82

Powershell und Programmausgaben

Recommended Posts

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 ?

Share this post


Link to post
Share on other sites

Hi,

 

unter Umständen kannst Du "Invoke-Expression" nutzen. Aber einmal anders gefragt: Was möchtest Du genau erreichen?

 

Viele Grüße

olc

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

??

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...