PowerShell - Überprüfen ob Drucker vorhanden ist, wenn ja vorhanden löschen und neuen Installieren
Hallo Zusammen,
da demnächst ein Drucker austausch bei uns ansteht, bin ich auf der Suche nach einen PowerShell Script, dass vorher prüft ob der \\Server01\Drucker01 auf den Client installiert ist:
- Wenn ja dann soll der jetzige \\Server01\Drucker01 gelöscht werden und der neue \\Server01\Drucker02 dafür installiert werden
- Wenn der \\Server01\Drucker01 nicht gefunden wurde, dann sollte das Script sich beenden.
Ideal wäre natürlich wenn es in eine Excel Datei geschrieben wird.
Ich hab bisher nur Scripte gefunden die vom jetzigen Print Server auf einen anderen Print Server umgezogen werden.
Siehe hier z.B. http://learn-powershell.net/2012/11/15/use-powershell-logon-script-to-u ...
Ich hoffe ihr könnt mir weiterhelfen.
Vielen Dank!
Grüße Daniel
da demnächst ein Drucker austausch bei uns ansteht, bin ich auf der Suche nach einen PowerShell Script, dass vorher prüft ob der \\Server01\Drucker01 auf den Client installiert ist:
- Wenn ja dann soll der jetzige \\Server01\Drucker01 gelöscht werden und der neue \\Server01\Drucker02 dafür installiert werden
- Wenn der \\Server01\Drucker01 nicht gefunden wurde, dann sollte das Script sich beenden.
Ideal wäre natürlich wenn es in eine Excel Datei geschrieben wird.
Ich hab bisher nur Scripte gefunden die vom jetzigen Print Server auf einen anderen Print Server umgezogen werden.
Siehe hier z.B. http://learn-powershell.net/2012/11/15/use-powershell-logon-script-to-u ...
Ich hoffe ihr könnt mir weiterhelfen.
Vielen Dank!
Grüße Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 231084
Url: https://administrator.de/contentid/231084
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Daniel,
könntest du so machen: (Variablen in Zeile 1-3)
Grüße Uwe
könntest du so machen: (Variablen in Zeile 1-3)
$oldPrinterName = "\\Server01\Drucker01"
$newPrinterName = "\\Server01\Drucker02"
$logfile = "\\SERVER\FREIGABE\logfile.txt"
$comNetwork = New-Object -ComObject "Wscript.Network"
$printer = gwmi -Class Win32_Printer | ?{$_.Network -eq $true -and $_.ServerName -eq "\\$($oldprinterName.Split("\")[2])" -and $_.ShareName -eq $oldprinterName.Split('\')[3]}
if ($printer) {
$printer | %{$comNetwork.RemovePrinterConnection($_.Name)}
([WMIClass]"\\.\root\cimv2:Win32_Printer").AddPrinterConnection($newPrinterName) | out-null
echo "$(get-date) - Drucker '$oldPrinterName' wurde auf '$($env:COMPUTERNAME)' entfernt, und Drucker '$newPrinterName' hinzugefügt." | out-file $logfile -Append -Force
}else{
echo "Keinen entsprechenden Drucker gefunden. Script beendet."
}
Zitat von @daniel46220:
Jetzt ist mir dabei natürlich noch etwas eingefallen . Gibt es auch die Möglichkeit einen .txt auszulesen mit Rechner
namen die er abarbeiten soll?!
klar...dazu müssen aber bestimmte Voraussetzungen bei den Clients für Remote WMI-Abfragen vorhanden sein (Firewall). Ich würde das ganze besser als Logon-Script laufen lassen ...Jetzt ist mir dabei natürlich noch etwas eingefallen . Gibt es auch die Möglichkeit einen .txt auszulesen mit Rechner
namen die er abarbeiten soll?!
Btw. könnt Ihr Seiten oder Bücher empfehlen sich selbst PowerShell beizubringen, das Thema wird jetzt doch immer
interessanter.....
Gute Fundstellen sind z.B. diese:interessanter.....
Grundlagen und Praxisvermittlung:
- http://www.powershellpraxis.de/
- http://powershell.com/cs/
- http://powershell.com/cs/media/13/default.aspx
- Einstieg in Scripting
- PowerShell for Runaways - Part I
- PowerShell For Runaways - Part II
Grüße Uwe
Zitat von @daniel46220:
Jetzt ist mir dabei natürlich noch etwas eingefallen . Gibt es auch die Möglichkeit einen .txt auszulesen mit Rechner
namen die er abarbeiten soll?!
Jetzt ist mir dabei natürlich noch etwas eingefallen . Gibt es auch die Möglichkeit einen .txt auszulesen mit Rechner
namen die er abarbeiten soll?!
Ab Powershell 4.0 und Server 2012 R2 bzw. Windows 8.1 kannst du dazu folgendes Script verwenden (Firewall-Regeln der Clients müssen für Remote WMI-Abfragen entsprechend konfiguriert sein):
$computers = gc "c:\temp\computers.txt"
$oldPrinterName = "\\UWE-W7\lj1320"
$newPrinterName = "\\UWE-W7\lj1320"
$logfile = "C:\logfile.txt"
foreach($computer in $computers){
$printer = Get-Printer -ComputerName $computer | ?{$_.Network -eq $true -and $_.ServerName -eq "\\$($oldprinterName.Split("\")[2])" -and $_.ShareName -eq $oldprinterName.Split("\")[3]}
if ($printer) {
$printer | %{Remove-Printer -Computername $computer}
Add-Printer -ConnectionName $newPrinterName -ComputerName $computer | out-null
echo "$(get-date) - Drucker '$oldPrinterName' wurde auf '$computer' entfernt, und Drucker '$newPrinterName' hinzugefügt." | out-file $logfile -Append -Force
}else{
echo "Keinen entsprechenden Drucker gefunden. Script beendet."
}
}
Grüße Uwe