saesch82
Goto Top

Powershell String mit Groß- und Kleinschreibung

Hallo

Ich möchte gerne eine Druckermigration durchführen und haben ein entsprechendes Powershell Skript, welches die Drucker ausliest, den Standarddrucker erkennt, die Drucker löscht, neu einbindet unrd den standaddrucker wieder setzt.
Bei der Einbindung der neuen Drucker wird der alte Druckerserver entfernt und der neue gesetzt.

Jetzt habe ich festgestellt, dass der alte Druckerserver verschiedenst geschrieben wurde:
Server01
SERVER01
server01

Es kann sein, dass es noch weitere Schreibweisen gibt und ich finde keine Lösung, wie alle Schreibweisen in der Quelle beachten kann.
Aktuell löse ich es so, dass ich das Skript einfach dreimal hintereinander ablaufen lasse, mit verschiedener Schreibweise des Quellservers. Es kann aber sein, dass es noch andere Schreibweisen gibt.
Hier das Skript:

$old_printserver = "Server01"
$new_printserver = "server02"

  1. Alle Drucker auslesen, die als Netzwerkdrucker markiert sind und in ein Array speichern.
$printers = @(Get-WMIObject Win32_Printer | where{$_.network -eq "true"} | Select-Object -expandProperty Name)


  1. Standarddrucker auslesen und in eine Variable speichern
$default_printer = Get-WMIObject Win32_Printer | where{$_.default -eq "true"} | Select-Object -expandProperty Name


  1. Alle Drucker löschen, die im Array stehen.
foreach($element in $printers) { (New-Object -ComObject WScript.Network).RemovePrinterConnection("$element") }


  1. Neue Drucker anlegen, welche im Array stehen.
$printer = [WMIClass]"\\.\root\cimv2:Win32_Printer"
foreach($element in $printers) { $printer.AddPrinterConnection($element.replace("$old_printserver", "$new_printserver")) }


  1. Standarddrucker wieder definieren
$default_printer = $default_printer.replace("$old_printserver", "$new_printserver")

$printer = Get-WmiObject Win32_Printer | ? { $_.name -like "*$default_printer*"}
$printer.SetDefaultPrinter()

$old_printserver = "SERVER01"
$new_printserver = "server02"
.
.
.

$old_printserver = "server01"
$new_printserver = "server02"


Könnt Ihr mich unterstützen und mir eine Hilfestellung geben, wie ich das case sensitiv in $old_printserver = "[servername]" "ausschalten" kann?

Vielen Dank!

Beste Grüße
Saesch

Content-ID: 487932

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

Ausgedruckt am: 15.11.2024 um 21:11 Uhr

Kraemer
Kraemer 23.08.2019 um 10:41:21 Uhr
Goto Top
Moin,

$element -replace("$old_printserver", "$new_printserver")  
saesch82
saesch82 23.08.2019 um 10:57:54 Uhr
Goto Top
Hallo Kraemer

Und das ignoriert die Schreibweise der Quelle, also $old_printserver?
Beispiel:

$old_printserver = "server01" erkennt ja nur [drucker] on server01 und nicht [drucker] on SERVER01.

Oder verstehe ich bei
$element -replace("$old_printserver", "$new_printserver")
was falsch?

Danke!
Kraemer
Kraemer 23.08.2019 um 11:03:04 Uhr
Goto Top
Man man man ist das so schwer ne Konsole aufzumachen?

PS > $a="Hallo"  
PS > $a.replace("hallo","hi")  
Hallo
PS > $a -replace("hallo","hi")                                                                            
hi

-replace nutzt regex
140913
140913 23.08.2019 aktualisiert um 11:36:57 Uhr
Goto Top
Grüezi wohl.
Zitat von @Kraemer:
$element -replace("$old_printserver", "$new_printserver")  
Wenn man das so macht sollte man dann aber auch Regex-Sonderzeichen im Namen escapen
$element -replace [regex]::Escape($old_printserver), $new_printserver

Alternativ geht's auch indem man die Strings vorher in Klein- oder Großbuchstaben konvertiert
$element.toLower().replace($old_printserver.toLower(),$new_printserver)
Kraemer
Kraemer 23.08.2019 um 11:53:58 Uhr
Goto Top
Zitat von @140913:
Wenn man das so macht sollte man dann aber auch Regex-Sonderzeichen im Namen escapen
naja - eigentlich sollte man die nutzen, um sicher zu stellen, dass man auch wirklich den Servernamen replaced

$a="server"  
$b="\\Server\Server"  
$b -replace "^\\\\$a\\","\\NAS\"  
\\NAS\Server

face-big-smile