daniel46220
Goto Top

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

Content-ID: 231084

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

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

colinardo
colinardo 26.02.2014 aktualisiert um 15:54:53 Uhr
Goto Top
Hallo Daniel,
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."  
}
Grüße Uwe
daniel46220
daniel46220 26.02.2014 um 16:29:28 Uhr
Goto Top
Servus Uwe,

vielen vielen Dank für deine schnelle Hilfe! Das Script funktioniert super!!!!!

Jetzt ist mir dabei natürlich noch etwas eingefallen face-confused. 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.....

Grüße Dani
colinardo
colinardo 26.02.2014 aktualisiert um 17:16:34 Uhr
Goto Top
Zitat von @daniel46220:
Jetzt ist mir dabei natürlich noch etwas eingefallen face-confused. 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 ...
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:
Grundlagen und Praxisvermittlung:

Grüße Uwe
colinardo
colinardo 26.02.2014 aktualisiert um 17:40:34 Uhr
Goto Top
Zitat von @daniel46220:
Jetzt ist mir dabei natürlich noch etwas eingefallen face-confused. 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."  
  }

}
Die verwendeten CMD-Lets gibt es nur auf den o.g. Systemen ! Auf anderen Systemen mach es besser mit einem Logon-Script... (Grund: http://social.technet.microsoft.com/Forums/de-DE/4a791d85-98e5-401f-bf6 ..)

Grüße Uwe
daniel46220
daniel46220 27.02.2014 um 11:09:52 Uhr
Goto Top
Vielen Dank Uwe!

Auf meinen Test System mit Windows 8.1 funktioniert es. Leider haben wir aber Produktiv noch Windows 7 im Einsatz, somit komme ich mit den 2ten besseren Script nicht viel weiter.

Jetzt muss ich mal schauen wie ich das mit den Logon Script am besten umsetze.....