tuxhunt3r
Goto Top

Probleme mit Powershell-Code

Unerklärlicher Fehler in Powershell-Code

Guten Tag

Bei dem untenstehenden Powershell-Script habe ich folgendes Problem: Sobald ich zurück ins Hauptmenü komme und einen zweiten Menupunkt auswählen will, wird die Ausgabe des zweiten Menupunkts fehlerhaft, d.h. die Ausgabe bleibt entweder leer oder wird nicht so formatiert, wie ich es mit "select-object" oder "sort-object" angegeben habe.
Es funktioniert immer nur die erste Abfrage. Wenn ich eine zweite Abfrage machen will, muss ich das Script zuerst beenden und neu starten.

Ein Beispiel:
Ich starte das Script, gebe den PC-Namen ein und komme ins Hauptmenü. Dort wähle ich z.B. den Menupunkt A, welcher diverse WMI-Abfragen tätigt (CPU, OS, Graka, etc). Danach springe ich ins Hauptmenü zurück. Dort wähle ich z.B. Menüpunkt D (Listet alle laufenden Prozesse auf). Nun kommt entweder eine leere Ausgabe oder die Ausgabe wird nicht korrekt formatiert.

Probiert es am besten selbst mal aus, dann seht ihr, was ich meine!


# ##########################################################################################################################
# Funktionen:
# -----------


# Funktionen für die Kosmetik
function titel 
{
          clear-host
          write-host "PCINFO.PS1"  
          write-host "=========="  
          write-host " "  
          write-host "Aktueller PC: $PCName"  
          write-host "------------------------------------------------------------------------" -foregroundcolor cyan  
          write-host " "  
}

function Fusszeile
{
     write-host " "  
     Read-host "Druecke Enter fuer die Rueckkehr ins Hauptmenue"       
}


# ##########################################################################################################################


clear-host

# Eingabe des Nodenames
write-host "PCINFO.PS1"  
write-host "=========="  
write-host " "  
write-host "Willkommen bei PCInfo!"  
write-host "Dieses Script zeigt diverse Informationen ueber einen PC oder Server an!"  
$PCName = Read-Host "Gib bitte den Namen des PCs ein, der abgefragt werden soll "  


# Wird solange wiederholt, bis ExitVariable = true ist
Do {
     clear-host
     write-host "PCINFO.PS1"  
     write-host "=========="  
     write-host " "  
     write-host "Dieses Script zeigt diverse Informationen ueber einen PC oder Server an!"  
     write-host " "  
     write-host "Aktueller PC / Server: $PCName"  
     write-host "------------------------------------------------------------------------" -foregroundcolor cyan  
     write-host " "  
     write-host "Bitte waehle eine Funktion aus:"  
     write-host " "  
     write-host "(A) Allgemeine Informationen ueber den PC / Server anzeigen"  
     write-host "(B) Software-Informationen anzeigen"  
     write-host "(C) Installierte Patches/Hotfixes anzeigen"  
     write-host "(D) Laufende Prozesse auflisten"  
     write-host "(E) Dienste auflisten"  
     write-host "(F) Diskinformationen anzeigen"  
     write-host " "  
     write-host "(Y) Abzufragenden PC / Server wechseln"  
     write-host "(Z) Exit"  
     write-host " "  
     $auswahl = Read-Host "Deine Auswahl "  
     switch ($auswahl) {
          "A" {  
               titel
               write-host "Allgemeine Informationen ueber den PC / Server"   
               write-host "=============================================="   
               write-host " "  
               write-host "Computerinformationen :"  
               write-host " "  
               get-wmiobject -class win32_computersystem -computername $PCName
               write-host " "  
               write-host " "  
               write-host "Betriebsystem-Informationen :"  
               write-host " "  
               get-wmiobject -class win32_operatingsystem -computername $PCName
               write-host " "  
               write-host " "  
               write-host "BIOS-Informationen :"  
               write-host " "  
               get-wmiobject -class win32_bios -computername $PCName
               write-host " "  
               write-host " "  
               write-host "CPU-Informationen :"  
               write-host " "  
               get-wmiobject -class win32_processor -computername $PCName | select-object -property DeviceID, Manufacturer, Name, Description, CPUStatus, CurrentClockSpeed, MaxClockSpeed, SocketDesignation, AdressWith, DataWidth, l2cachesize, ExtClock
               write-host " "  
               write-host " "  
               write-host "Informationen ueber den/die Grafikchip(s) :"  
               write-host " "  
               get-wmiobject -class win32_VideoController -computername $PCName | select-object -property DeviceID, Description, Status, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, CurrentBitsPerPixel, InstalledDisplayDrivers, DriverVersion, InfFilename, InfSection   
               Fusszeile
          }
          "B" {  
               titel
               write-host "Installierte Software :"  
               write-host " "  
               get-wmiobject -class win32_product -computername $PCName | select-object -property Name, Version, Vendor | sort-object -property Name, Vendor, Version
               Fusszeile
          }
          "C" {  
               titel
               write-host "Installierte Patches/Hotfixes :"  
               write-host " "  
               get-wmiobject -class Win32_Quickfixengineering -computername $PCName | select-object -property HotFixID, Description, ServicePackInEffect | sort-object -property HotFixID, Description, ServicePackInEffect
               Fusszeile

          }
          "D" {  
               titel
               write-host "Laufende Prozesse auf $PCName :"  
               write-host " "  
               get-wmiobject -class win32_process -computername $PCName | select-object -property processname, path, processid | sort-object -property processname, processid, path
               Fusszeile
          }
          "E" {  
               titel
               write-host "Dienste auf $PCName :"  
               write-host " "  
               get-wmiobject -class win32_service -computername $PCName | select-object -property Name, State | sort-object -property State, Name
               Fusszeile
          }
          "F" {  
               titel
               write-host "Diskinformationen von $PCName"  
               write-host "================================="  
               write-host " "  
               write-host "Physikalische Informationen :"   
               get-wmiobject -class Win32_Diskdrive -computername $PCName | select-object -property DeviceID, Model, Partitions, Size | sort-object -property deviceid
               write-host " "  
               # $laufwerke = get-wmiobject -class Win32_LogicalDisk -computer $PCName
               # write-host " Laufwerk Groesse(MB) Freier Platz(MB)" 
               # ForEach ($laufwerk in $laufwerke)
               # {
               # write-host " {0} {1,15:n} {2,15:n}" -f $laufwerk.DeviceID, ($laufwerk.Size/1m), $($laufwerk.freespace/1m) 
               # }
               Write-host "Fuellstand laeuft noch nicht!"  
               Fusszeile
          }
          "Y" {  
               $PCName = Read-Host "Gib bitte den Namen des Kuebels ein, der abgefragt werden soll "  
          }
          "Z" {  
               $ExitVariable = "true"  
          }
          default {
               titel
               write-host " "  
               write-warning "Falsche Eingabe! Eingabe muss entweder A, B, C, D, E, Y oder Z sein!"  
               Fusszeile
          }
     }

} While ($ExitVariable -ne "true")  


Hat jemand eine Idee? Ich bin mit meinem Latein ziemlich am Ende!

Gruss TuXHunT3R

Content-Key: 64019

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: kallewirsch
kallewirsch Sep 12, 2007 at 19:39:43 (UTC)
Goto Top
Hi TuXHunT3R,

hast Du das Problem gelöst bekommen?

Gruß
Kallewirsch
Member: TuXHunt3R
TuXHunt3R Sep 12, 2007 at 19:44:02 (UTC)
Goto Top
Leider nein, das Problem besteht immer noch. Rein vom Programmcode her müsste das Ding funktionieren, aber es will nicht. Immer noch das gleiche Problem ich wüsste nicht, was ich anders schreiben sollte.

Hast du eine Idee?
Member: kallewirsch
kallewirsch Sep 12, 2007 at 20:41:38 (UTC)
Goto Top
So auf Anhieb habe ich keine Idee, vielleicht die write-error-funktion mal ausprobieren.

Ich werde morgen den Code mal ausprobieren und schauen wie es reagiert.

Grüße
Kallewirsch
Member: kallewirsch
kallewirsch Sep 13, 2007 at 08:17:50 (UTC)
Goto Top
Moin TuxHunT3R,

habe Dein Script gerade ausprobiert, bis auf einen Fehler im Menüpunkt B auf W2K3-Systemen läuft das problemlos. Ich habe es direkt aus der Powershell gestartet, ebenso aus der IDE heraus, nur Fehler im MEnü B, sonst nix.

An welcher Stelle bekommst Du den Fehler?