mcitpsa
Goto Top

Powershell Konsolen Ausgabe weiterverarbeiten

Hallo zusammen,
vorab ich bin "Frischling" in sachen Powershell und seh den Wald vor lauter Bäumen derzeit nicht.

Ich habe derzeit ein Script mit dem ich diverse Dienste neustarte / ordner umbenenne / WMI rebuild laufen lasse.
Nun möchte ich abhängig vom ergebniss einer Prüffunction anhand des ausgegeben Wertes weiter machen.

Also in etwa so:
if ($(test-wmirepository).Status -eq "WMI repository is consistent")  
{
   break;
}
ELSEIF
{
wmi-resetrepository -path -force
}

Die beiden Functions existieren und funktionieren auch nur wie kann ich das anhand des o.g. beispiels nun realisieren?
Bzw. Wie kann ich die Consolenausgabe in eine Variabel umleiten und dann mit einer If abfrage die variable auf Ihren Inhalt prüfen?

Viele Grüße und vorab danke

Content-Key: 178481

Url: https://administrator.de/contentid/178481

Ausgedruckt am: 29.03.2024 um 02:03 Uhr

Mitglied: LordXearo
LordXearo 06.01.2012 um 14:38:37 Uhr
Goto Top
Hallo,

ich glaube ich verstehe die Frage nicht so ganz.

Wenn in deinem ersten Fall das if "true" ist, dann setz dort eine Variable ein $WMIErgebnis = "Alles in Ordnung" rein, und verwende es danach für die nächste if Abfrage. Du kannst auch mit der Variable $? sehen, ob der letzte Befehl erfolgreich ausgeführt wurde oder nicht.

Gruß

Xearo
Mitglied: MCITPSA
MCITPSA 06.01.2012 um 14:52:55 Uhr
Goto Top
Hallo LordXearo,

ok ich sehe selbst das ich mich wohl ein wenig undeutlich ausgedrückt habe. Sorry dafür.

Erstmal danke für Deinen Tip. Versuche ich auf jeden fall mal.

Ich versuch es nochmal zu erklären. Hoffe das es diesesmal verständlicher wird face-smile

Ich habe eine Funktion "test-wmirepository" diese mir auf der console als Meldung " WMI repository consistent" oder eben "WMI repository not consistent".
Jetzt wollte ich praktisch die Meldung in eine Variable packen und dann den inhalt der Variable mit dem If Statement vergleichen um dann eben entsprechend weiter zu arbeiten.

Zu deutsch ...
Wenn meldung "WMI repository consistent" dann mach X ansonsten mach Y

Viele Grüße
MCITPSA
Mitglied: LordXearo
LordXearo 06.01.2012 um 15:16:49 Uhr
Goto Top
Hallo,

genau das kannst du ja auch wie ich beschrieben habe tun.

if ($(test-wmirepository).Status -eq "WMI repository is consistent")  
{
   $Status_ok=1
}
ELSEIF
{
wmi-resetrepository -path -force
}

if($Status_ok -eq = 1){
mach was
}

Gruß

Xearo
Mitglied: MCITPSA
MCITPSA 06.01.2012 um 16:24:12 Uhr
Goto Top
Danke für den Hinweis.
Werde es am Wochenende wieter versuchen.

Imho hab ich dazu jetzt keinen Kopf mehr dazu face-sad

Für weitere Tips / Hinweise in die richtige richtung bin ich dankbar face-smile

Nice weekend
MCITPSA
Mitglied: MCITPSA
MCITPSA 09.01.2012 um 13:47:48 Uhr
Goto Top
Hallo zusammen,

leider haut die oben genannte Lösung nicht hin.

Die Console sagt mir weiterhin meine Meldung aber die if abfrage mag nit face-smile

Ich füge nunmal die eine function hier ein:
function test-wmirepository {
 param(
  [string]$path
 )            

 if ($path) {
   if (-not(Test-Path $path)){
    Throw "$path not found"  
   }
   else {
    $path
    $exp = "winmgmt /verifyrepository $path"  
   }
 }
 else {
  $exp = "winmgmt /verifyrepository"  
 }
 Invoke-Expression -Command $exp

}

Diese Funktion rufe ich dann weiter unten im script eben auf.
Der aufruf der Funktion funktioniert wie bereits gesagt nur eben das weiterarbeiten mit dem ergebniss /der Rückmeldung.

Im Script habe ich nun folgenden Code verwendet:
If ($(test-wmirepository).Status -eq "WMI repository is consistent")  
		{
			$Status_ok = 1
		}
	ELSE
		
		{
			Write-Host "Error" -F Red  
		}
	
	if($Status_ok -eq = 1){ 
Write-Host "mach was"  
}
break;
}
Irgendjemand eine Idee?
Anzumekren sei noch, das dass winmgmt /verifyrepository ein normaler cmd befehl ist (Externes programm demnach) nur irgendwie bringt mich das auch nicht richtig weiter.

Viele Grüße
MCITPSA
Mitglied: LordXearo
LordXearo 09.01.2012 um 14:48:44 Uhr
Goto Top
Hallo nochmal,

ich mache nicht sehr oft Skripte und habe das was ich geschrieben habe auch nicht getestet bzw. überhaupt überprüft. Aber Syntax mäßig richtig wäre es erstmal so.
If ($(test-wmirepository).Status -eq "WMI repository is consistent")  
		{
			$Status_ok = 1
		}
	ELSE
		
		{
			Write-Host "Error" -F Red  
		}
if($Status_ok -eq 1){ 
Write-Host "mach was"  
}
Mitglied: MCITPSA
MCITPSA 09.01.2012 um 15:14:39 Uhr
Goto Top
Danke nochmals LerdXearo,

ich habe ja auch zwischenzeitlich ein wenig weiter experimentiert nur leider mit dem gleichen ergebniss und mehr code.
Theoretisch müsste Dein vorgeschlagener weg ja zur gewünschten Lösung führen. Tut er nur leider nicht.

Ich denke das mein "Problem" wohl am übergeben der "....Status -eq "WMI....." Nachricht schon klemmt.
Leider ist mein Powershellwissen, wenn man es so nennen darf, noch lange nicht soweit um hier ohne "Hilfe" zurechtzukommen.

Vielleicht gehe ich mein "Werk" auch falsch an und versuche ganz und gar total falsch den parameter/status auszuwerten.
Leider habe ich bis dato auch nichts in der richtung im web finden können. face-sad

Wie man interne Powershellbefehle weitergibt ja aber externe?

Viele Grüße
MCITPSA
Mitglied: LordXearo
LordXearo 09.01.2012 um 15:40:18 Uhr
Goto Top
Ja eigentlich müsstest du es anders machen. In deiner Funktion müsstest du bereits als Rückgabewert Status_ok = 1zurückgeben, wenn die Funktion sauber durchgelaufen ist.

Machst du dich am besten nochmal über Rückgabewerte schlau. Wenn es wieder hackt, kannst du gerne schreiben.
Mitglied: MCITPSA
MCITPSA 10.01.2012 um 08:01:42 Uhr
Goto Top
So ich hab die Lösung gefunden.
$LASTEXITCODE
ist die Lösung face-smile
Simple aber manchmal sieht man den Wald vor lauter Bäumen nicht mehr face-smile

Mein erster funktionierender Lösungsansatz:
test-wmirepository 
	$LASTEXITCODE                         #<-- 0 = OK / 1 NOK
	If ($($LASTEXITCODE) -eq "0") # Wenn status OK dann  
		{

			Write-Host "Everything working fine!"  
		}
	ELSE
		{
			Write-Host "Something Wrong!!!"		  
                                           }
	If ($($LASTEXITCODE) -eq "1") #<-- Wenn Status NOK  
		{
			Write-Host "ATTENTION"  
		}
	
	
break;
....

Danke für den ganzen "hirnschmalz" und einsatz den ich hier abverlangt habe
Mitglied: LordXearo
LordXearo 10.01.2012 um 08:45:29 Uhr
Goto Top
Schön das du es geschafft hast.
So ist es sicher besser als wenn ich dir die Arbeit abgenommen hätte.

ps: Die Variable $? aus meinem ersten Post ist das gleiche wie $Lastexitcode ;)
Mitglied: MCITPSA
MCITPSA 10.01.2012 um 15:29:26 Uhr
Goto Top
Danke Dir nochmals.

Ja das mit dem Alias in der Powershell ist noch nicht ganz durchgedrungen.
Dein eintrag mit dem $? hatte ich versucht nur wahrscheinlich noch falsch gewertet face-sad

Nun wollte ja auch keine Gesammtlösung denn damit kommt man nicht weiter wenn man ein wenig Code schreiben möchte face-smile
Aber der berühmte Wink mit dem Zaunpfahl ist mehr Wert wie alles andere face-smile
Gut hat mich jetzt ca 2 tage gekostet (Shame on me) aber das ergebniss zählt. face-smile

Viele Grüße
MCITPSA