8
0
Skriptentwickung/test/SystemDriver.ps1
2024-01-24 16:42:38 +01:00

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"