Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell Konsolen Ausgabe weiterverarbeiten

Frage Entwicklung

Mitglied: MCITPSA

MCITPSA (Level 1) - Jetzt verbinden

06.01.2012 um 10:34 Uhr, 5734 Aufrufe, 11 Kommentare

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:
01.
if ($(test-wmirepository).Status -eq "WMI repository is consistent") 
02.
03.
   break; 
04.
05.
ELSEIF 
06.
07.
wmi-resetrepository -path -force 
08.
09.
 
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
Mitglied: LordXearo
06.01.2012 um 14:38 Uhr
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
Bitte warten ..
Mitglied: MCITPSA
06.01.2012 um 14:52 Uhr
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

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
Bitte warten ..
Mitglied: LordXearo
06.01.2012 um 15:16 Uhr
Hallo,

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

01.
if ($(test-wmirepository).Status -eq "WMI repository is consistent") 
02.
03.
   $Status_ok=1 
04.
05.
ELSEIF 
06.
07.
wmi-resetrepository -path -force 
08.
09.
 
10.
if($Status_ok -eq = 1){ 
11.
mach was 
12.
}
Gruß

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

Imho hab ich dazu jetzt keinen Kopf mehr dazu

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

Nice weekend
MCITPSA
Bitte warten ..
Mitglied: MCITPSA
09.01.2012 um 13:47 Uhr
Hallo zusammen,

leider haut die oben genannte Lösung nicht hin.

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

Ich füge nunmal die eine function hier ein:
01.
function test-wmirepository { 
02.
 param( 
03.
  [string]$path 
04.
 )             
05.
 
06.
 if ($path) { 
07.
   if (-not(Test-Path $path)){ 
08.
    Throw "$path not found" 
09.
10.
   else { 
11.
    $path 
12.
    $exp = "winmgmt /verifyrepository $path" 
13.
14.
15.
 else { 
16.
  $exp = "winmgmt /verifyrepository" 
17.
18.
 Invoke-Expression -Command $exp 
19.
 
20.
}
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:
01.
If ($(test-wmirepository).Status -eq "WMI repository is consistent") 
02.
03.
			$Status_ok = 1 
04.
05.
	ELSE 
06.
		 
07.
08.
			Write-Host "Error" -F Red 
09.
10.
	 
11.
	if($Status_ok -eq = 1){  
12.
Write-Host "mach was" 
13.
14.
break; 
15.
}
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
Bitte warten ..
Mitglied: LordXearo
09.01.2012 um 14:48 Uhr
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.
01.
If ($(test-wmirepository).Status -eq "WMI repository is consistent") 
02.
03.
			$Status_ok = 1 
04.
05.
	ELSE 
06.
		 
07.
08.
			Write-Host "Error" -F Red 
09.
10.
if($Status_ok -eq 1){  
11.
Write-Host "mach was" 
12.
}
Bitte warten ..
Mitglied: MCITPSA
09.01.2012 um 15:14 Uhr
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.

Wie man interne Powershellbefehle weitergibt ja aber externe?

Viele Grüße
MCITPSA
Bitte warten ..
Mitglied: LordXearo
09.01.2012 um 15:40 Uhr
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.
Bitte warten ..
Mitglied: MCITPSA
10.01.2012 um 08:01 Uhr
So ich hab die Lösung gefunden.
01.
$LASTEXITCODE
ist die Lösung
Simple aber manchmal sieht man den Wald vor lauter Bäumen nicht mehr

Mein erster funktionierender Lösungsansatz:
01.
test-wmirepository  
02.
	$LASTEXITCODE                         #<-- 0 = OK / 1 NOK 
03.
	If ($($LASTEXITCODE) -eq "0") # Wenn status OK dann 
04.
05.
 
06.
			Write-Host "Everything working fine!" 
07.
08.
	ELSE 
09.
10.
			Write-Host "Something Wrong!!!"		 
11.
12.
	If ($($LASTEXITCODE) -eq "1") #<-- Wenn Status NOK 
13.
14.
			Write-Host "ATTENTION" 
15.
16.
	 
17.
	 
18.
break; 
19.
.... 
20.
 
Danke für den ganzen "hirnschmalz" und einsatz den ich hier abverlangt habe
Bitte warten ..
Mitglied: LordXearo
10.01.2012 um 08:45 Uhr
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 ;)
Bitte warten ..
Mitglied: MCITPSA
10.01.2012 um 15:29 Uhr
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

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

Viele Grüße
MCITPSA
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Formatierung der Ausgabe (2)

Frage von Scroller zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (1)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...