261 lines
8.8 KiB
PowerShell
261 lines
8.8 KiB
PowerShell
#############################################################################
|
|
# Commandlet: get-sysdriver und set-sysdriver #
|
|
# Autor: Armin Friedrich #
|
|
# Klasse: Win32_SystemDriver #
|
|
# Beschreibung: #
|
|
# Systemtreiber fuer Basisdienste ausgeben, starten bzw. stoppen #
|
|
# Aufruf der Commandlets mit Parametern durch , getrennt #
|
|
# Beispiele: #
|
|
# get-sysdriver, get-sysdriver g1_11,netbios, get-systreiber netbios #
|
|
# set-sysdriver, set-sysdriver beep,start, set-systreiber g1_10,beep,stop #
|
|
#############################################################################
|
|
|
|
function get-SysDriver {
|
|
param([string[]]$arg)
|
|
begin{
|
|
$anz=0 # Variable fuer die Anzahl der eingegebenen Parameter
|
|
# Schleife zur Ermittlung Anzahl Parameter
|
|
if($arg){
|
|
foreach ($anzahl in $arg)
|
|
{
|
|
$anz++ # Anzahl der Parameter
|
|
}
|
|
}
|
|
|
|
# Pruefung, von welchem Rechner die Systemtreiber abgefragt werden
|
|
# inklusive Auswahl des entsprechenden Treibers
|
|
|
|
# Keine Eingabe - dann manuelle Auswahl Treiber und Auswahl PC
|
|
if($anz -eq 0)
|
|
{
|
|
$treiber = Read-Host "Bestimmter Treiber oder <ENTER> fuer alle"
|
|
$pc = Read-Host "Welcher PC"
|
|
}
|
|
# Eingabe von PC und Treiber korrekt erfolgt (z.B. get-sysdriver g1_11,vga)
|
|
elseif ($anz -eq 2)
|
|
{
|
|
$pc = $arg[0]
|
|
$treiber = $arg[1]
|
|
}
|
|
# Eingabe vom Treiber erfolgt (z.B. get-sysdriver vga) - Auswahl des PC moeglich
|
|
else
|
|
{
|
|
$treiber = $arg[0]
|
|
$pc = Read-Host "Welcher PC"
|
|
}
|
|
}
|
|
process{
|
|
}
|
|
end{
|
|
# Pruefung wenn bei PC nicht . fuer localhost eingegeben wurde
|
|
# ob der Rechner auch erreichbar ist
|
|
if($pc -ne ".")
|
|
{
|
|
$adress="Address='"+$pc+"'"
|
|
$p=Get-WmiObject -Class Win32_PingStatus -Filter $adress |select-object statuscode
|
|
if($p.statuscode -ne 0)
|
|
{
|
|
Write-Host -ForegroundColor red -BackgroundColor yellow "keine Verbindung zu dem angegebenen PC"
|
|
break
|
|
}
|
|
}
|
|
|
|
# Wenn ENTER dann alle Systemtreiber ausgeben
|
|
if($treiber -eq "")
|
|
{
|
|
$treiber = Get-WmiObject -Class "Win32_SystemDriver" -computername $pc -Namespace "ROOT\CIMV2"
|
|
$treiber | select-object Name,Status,State,AcceptStop,StartMode,Systemname | Format-Table
|
|
}
|
|
# Ausgabe des eingegebenen Systemtreibers
|
|
else
|
|
{
|
|
# Hilfsvariable zum Treibervergleich
|
|
$tmp=$treiber
|
|
$treiber = Get-WmiObject -Class "Win32_SystemDriver" -computername $pc -Namespace "ROOT\CIMV2" | Where-Object {$_.Name -eq $treiber}
|
|
# Pruefung, ob der Treiber ueberhaupt existiert
|
|
if($treiber.name -ne $tmp)
|
|
{
|
|
write-host -ForegroundColor red "Treiber exisitiert nicht"
|
|
break
|
|
}
|
|
# Wenn Treiber exisitiert, dann Ausgabe der entsprechenden Daten
|
|
else
|
|
{
|
|
Write-Host "*******************************************"
|
|
Write-Host " Name: " $treiber.name
|
|
Write-Host " Status: " $treiber.status
|
|
Write-Host " State: " $treiber.state
|
|
Write-Host " Accept Stop: " $treiber.acceptstop
|
|
Write-Host "*******************************************"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function set-SysDriver {
|
|
param([string[]]$arg)
|
|
begin{
|
|
$anz=0 # Variable fuer die Anzahl der eingegebenen Parameter
|
|
# Schleife zur Ermittlung Anzahl Parameter
|
|
if($arg){
|
|
foreach ($anzahl in $arg)
|
|
{
|
|
$anz++ # Anzahl der Parameter
|
|
}
|
|
}
|
|
|
|
# Pruefung, ob Parameter eingegeben wurden:
|
|
if($anz -le 1)
|
|
{
|
|
# Gar kein Parameter wurde eingegeben (z.B. set-sysdriver)
|
|
falscheeingabe
|
|
$pc = Read-Host "Welcher PC "
|
|
$treiber = Read-Host "Welcher Systemtreiber "
|
|
$status = Read-Host "Start oder Stop "
|
|
if($status -ne "start" -and $status -ne "stop")
|
|
{
|
|
Write-Host "falsch Eingabe beim Status!!"
|
|
$status = Read-Host "Status (start/stop)"
|
|
}
|
|
}
|
|
# 2 Parameter eingegeben (z.B. set-sysdriver netbios,start)
|
|
elseif ($anz -eq 2)
|
|
{
|
|
$pc = "."
|
|
$treiber = $arg[0]
|
|
$status = $arg[1]
|
|
if($status -ne "start" -and $status -ne "stop")
|
|
{
|
|
Write-Host "falsch Eingabe beim Status!!"
|
|
$status = Read-Host "Status (start/stop)"
|
|
}
|
|
}
|
|
# 3 Parameter eingegeben (z.B. set-sysdriver g1_11,netbios,start)
|
|
else
|
|
{
|
|
$pc = $arg[0]
|
|
$treiber = $arg[1]
|
|
$status = $arg[2]
|
|
if($status -ne "start" -and $status -ne "stop")
|
|
{
|
|
Write-Host "falsch Eingabe beim Status!!"
|
|
$status = Read-Host "Status (start/stop)"
|
|
}
|
|
}
|
|
}
|
|
process{
|
|
}
|
|
end{
|
|
# Pruefung wenn bei PC nicht . fuer localhost eingegeben wurde
|
|
# ob der Rechner auch erreichbar ist
|
|
if($pc -ne ".")
|
|
{
|
|
$adress="Address='"+$pc+"'"
|
|
$p=Get-WmiObject -Class Win32_PingStatus -Filter $adress |select-object statuscode
|
|
if($p.statuscode -ne 0)
|
|
{
|
|
Write-Host -ForegroundColor red -BackgroundColor yellow "keine Verbindung zu dem angegebenen PC"
|
|
break
|
|
}
|
|
}
|
|
|
|
# Keine Treiber angegeben
|
|
if($treiber -eq "")
|
|
{
|
|
write-host -ForegroundColor red "Kein Treiber angegeben"
|
|
break
|
|
}
|
|
# Pruefungen, wenn Treiber angegeben
|
|
else
|
|
{
|
|
# Hilfsvariable zum Treibervergleich
|
|
$tmp=$treiber
|
|
$treiber = Get-WmiObject -Class "Win32_SystemDriver" -computername $pc -Namespace "ROOT\CIMV2" | Where-Object {$_.Name -eq $treiber}
|
|
# Pruefung, ob der Treiber ueberhaupt existiert
|
|
if($treiber.name -ne $tmp)
|
|
{
|
|
write-host -ForegroundColor red "Treiber exisitiert nicht"
|
|
break
|
|
}
|
|
# Treiber exisitiert -> Abarbeiten von Parameter Start bzw. Stop
|
|
else
|
|
{
|
|
# Pruefung Status:
|
|
switch($status)
|
|
{
|
|
# Pruefung ob Starten des Treibers moeglich ist:
|
|
"Start"
|
|
{
|
|
# Pruefung ob der angegebene Treiber bereits laeuft:
|
|
if($treiber.state -like "running")
|
|
{
|
|
Write-Host -ForegroundColor yellow "Treiber laeuft bereits"
|
|
break
|
|
}
|
|
else
|
|
{
|
|
# Zuweisung Ergebnis Startvorgang
|
|
$erg = $treiber.startservice()
|
|
} # Abschluss Pruefung, ob Treiber bereits laeuft
|
|
|
|
# Pruefung ob der angegebene Treiber korrekt gestartet wurde:
|
|
if($erg.returnvalue -eq "0")
|
|
{
|
|
Write-Host -ForegroundColor green "Treiber" $treiber.name "wurde gestartet"
|
|
}
|
|
else
|
|
{
|
|
# Fehlermeldung, da Ergebnis -ne 0 ist -> d. h. Treiber konnte nicht gestartet werden:
|
|
Write-Host -ForegroundColor Red "Treiber" $treiber.name "konnte nicht gestartet werden"
|
|
Write-Host -ForegroundColor Red "Fehler-Nummer" $erg.returnvalue
|
|
} # Abschluss Pruefung, ob Treiber korrekt gestartet wurde
|
|
} # Ende Start
|
|
|
|
# Pruefung ob Stoppen des Treibers moeglich ist:
|
|
"Stop"
|
|
{
|
|
# Pruefung, ob ein stoppen des Treibers ueberhaupt moeglich ist
|
|
if($treiber.AcceptStop -like "false")
|
|
{
|
|
Write-Host -ForegroundColor red "Treiber kann nicht gestoppt werden"
|
|
break
|
|
} # Abschluss Pruefung, ob Treiber gestoppt werden kann
|
|
|
|
# Pruefung ob der angegebene Treiber schon gestoppt ist:
|
|
if($treiber.state -like "stopped")
|
|
{
|
|
Write-Host "Treiber ist bereits gestoppt"
|
|
break
|
|
}
|
|
else
|
|
{
|
|
# Zuweisung Ergebnis Startvorgang
|
|
$erg = $treiber.stopservice()
|
|
} # Abschluss Pruefung, ob Treiber bereits gestoppt
|
|
|
|
if($erg.returnvalue -eq "0")
|
|
{
|
|
Write-Host -ForegroundColor green "Treiber" $treiber.name "wurde gestoppt"
|
|
}
|
|
else
|
|
{
|
|
# Fehlermeldung, da Ergebnis -ne 0 ist -> d. h. Treiber konnte nicht gestartet werden:
|
|
Write-Host -ForegroundColor Red "Treiber" $treiber.name "konnte nicht gestoppt werden"
|
|
Write-Host -ForegroundColor Red "Fehler-Nummer" $erg.returnvalue
|
|
} # Abschluss Pruefung, ob Treiber korrekt gestartet wurde
|
|
} # Ende Stop
|
|
} # Ende switch
|
|
} # Ende Abarbeitung Treiber existiert
|
|
} # Ende Pruefung wenn Treiber angegeben
|
|
} # Ende end
|
|
} # Ende function set-sysdriver
|
|
|
|
function falscheeingabe
|
|
{
|
|
Write-Host -ForegroundColor blue -backgroundcolor yellow "Folgende Eingaben beim naechsten Mal beruecksichtigen: "
|
|
write-host -ForegroundColor blue -backgroundcolor yellow "-> set-sysdriver treiber, status "
|
|
Write-Host -ForegroundColor blue -backgroundcolor yellow "-> set-sysdriver pc,treiber,status "
|
|
}
|
|
|
|
#zur Erfolgskontrolle:
|
|
"Das Commandlet fuer die Systemtreiber wurde erfolgreich geladen" |