Jump to content

FrettchenSkript

Members
  • Gesamte Inhalte

    5
  • Registriert seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

Fortschritt von FrettchenSkript

Rookie

Rookie (2/14)

  • Eine Woche dabei
  • Erste Antwort
  • Erster eigener Beitrag

Neueste Abzeichen

0

Reputation in der Community

  1. Ich hab die DCOM berechtigungen gesetzt jetzt Funktioniert auch alles. Danke für den Link. Nun bekomme ich aber leider sobald ein Zweiter Benutzer das Skript ausgeführt hat folgende Fehlermeldung Get-WmiObject : Fehler beim Anbieter In Zeile:127 Zeichen:13 + $printers = Get-WmiObject -Class Win32_Printer -ComputerName $printSe ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand Nach ca. 1 Stunden tritt der Fehler erst wieder auf wenn ein Zweiter Benutzer auch das Skript ausführt. Benutzer 1 konnte das Skript davor 20 mal ohne Problem ausführen. Jemand einen idee? MFG Luca
  2. Das hab ich so auch verstanden sorry wenn das so nicht rüber kam.
  3. Hi Jan, Danke für die Antowet mit den CMDlets hab ich leider bei der Standart Drucker vergabe nicht viel erfolg gehabt. Wir haben bereits Gruppenrichtlinen im Einsatzt welche aber gefühlt nur in 80% der Fälle klappen. Daher die Idee es mit einem Skript zu lösen. Hoffe ja immer noch das wir bald uns zu einer Followme Lösung bekommen. MFG Luca
  4. Hi, da das hier mein erster Beitrag ist sorry sollte hier etwas Falsch machen. Ich hab folgendes Skript geschrieben um Drucker anhand des PC name im Standortfeld auf dem Printserver auf den Druckern zuweisen zukönnen. Das Skript funktioniert wunderbar wenn man es mit einem Domain Admin ausführt. # Setze den Print Server und den aktuellen PC-Namen $printServer = "VM-PRINTSERVER" $currentPCName = $env:COMPUTERNAME $printerToSetAsDefault = "*$currentPCName"+"_d*" # Setzen Sie den Standarddrucker für PCName_D # Pfad für den Ordner $scriptFolder = "$env:USERPROFILE\Documents\Drucker_Skript" # Prüfe, ob der Ordner vorhanden ist, und erstelle ihn gegebenenfalls if (-not (Test-Path -Path $scriptFolder -PathType Container)) { New-Item -Path $scriptFolder -ItemType Directory | Out-Null } # Lösche Logdateien, die älter als 31 Tage sind $oldLogs = Get-ChildItem -Path $scriptFolder -Filter "Drucker_Skript_Log_*.txt" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-31) } $oldLogs | ForEach-Object { Remove-Item $_.FullName -Force } # Öffne die Drucker Übersicht im Windows Explorer Start-Process "C:\Windows\explorer.exe" -ArgumentList "shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{2227A280-3AEA-1069-A2DE-08002B30309D}" # Warte 3 Sekunden Start-Sleep -Seconds 3 # Pfad für die LOG-Datei $errorLogPath = Join-Path $scriptFolder "Drucker_Skript_Log_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt" # Überprüfe die Erreichbarkeit des Printservers $printServerReachable = Test-Connection -ComputerName $printServer -Count 1 -Quiet # Funktion zum Hinzufügen eines Druckers mithilfe von rundll32.exe function Add-PrinterUsingRundll32 { param ( [string]$printerName ) try { # Verwende rundll32.exe, um den Drucker hinzuzufügen Write-Host "Füge Drucker $printerName zu $currentPCName hinzu..." $command = "rundll32.exe printui.dll,PrintUIEntry /y /n `"\\$printServer\$printerName`"" Invoke-Expression -Command $command # Schreibe Erfolgsmeldung in die Protokolldatei "Drucker $printerName wurde zu $currentPCName hinzugefügt." | Out-File -FilePath $errorLogPath -Append } catch { # Bei einem Fehler, erstelle eine LOG-Datei im Skriptordner $errorMessage = "Fehler beim Hinzufügen des Druckers: $($error[0].Exception.Message)" $errorMessage | Out-File -FilePath $errorLogPath -Append } } # Funktion zum Entfernen eines Druckers vom PC function Remove-PrinterFromPC { param ( [string]$printerName ) try { # Drucker vom PC entfernen Write-Host "Entferne Drucker $printerName von $currentPCName..." Remove-Printer -Name $printerName -ErrorAction Stop # Schreibe Erfolgsmeldung in die Protokolldatei "Drucker $printerName wurde von $currentPCName entfernt." | Out-File -FilePath $errorLogPath -Append } catch { # Bei einem Fehler, erstelle eine LOG-Datei im Skriptordner $errorMessage = "Fehler beim Entfernen des Druckers: $($error[0].Exception.Message)" $errorMessage | Out-File -FilePath $errorLogPath -Append } } # Funktion zum Hinzufügen eines Druckers zum PC basierend auf dem Standortfeld function Add-PrinterToPCBasedOnLocation { param ( [string]$printerName, [string]$location ) try { # Überprüfe, ob der PC-Name im Standortfeld vorhanden ist if ($location -like "*$currentPCName*" -or $location -like "*$currentPCName"+"_d*" -or $location -like "*$currentPCName"+"_D*") { Write-Host "Füge Drucker $printerName zu $currentPCName hinzu..." # Hier verwenden wir das .NET-Objekt für das Hinzufügen des Druckers $printer = (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\$printServer\$printerName") # Setze den Drucker als Standard, wenn er den Kriterien entspricht if ($printerName -eq $printerToSetAsDefault) { Add-PrinterUsingRundll32 -printerName $printerName Write-Host "Standarddrucker wurde auf $printerName festgelegt." } # Schreibe Erfolgsmeldung in die Protokolldatei "Drucker $printerName wurde zu $currentPCName hinzugefügt." | Out-File -FilePath $errorLogPath -Append } } catch { # Bei einem Fehler, erstelle eine LOG-Datei im Skriptordner $errorMessage = "Fehler beim Hinzufügen des Druckers: $($error[0].Exception.Message)" $errorMessage | Out-File -FilePath $errorLogPath -Append } } # Drucker vom PC entfernen (vor dem Hinzufügen neuer Drucker) $existingPrinters = Get-WmiObject -Class Win32_Printer if ($printServerReachable) { foreach ($existingPrinter in $existingPrinters) { # Gib den Namen des Druckers an, den du nicht entfernen möchtest $printersToExclude = @("STARFACE Fax", "Fax", "Microsoft Print to PDF", "Microsoft XPS Document Writer") # Überprüfe, ob der aktuelle Drucker der auszuschließende Drucker ist # Überprüfe, ob der aktuelle Drucker in der Liste der auszuschließenden Drucker ist if ($printersToExclude -notcontains $existingPrinter.Name) { Remove-PrinterFromPC -printerName $existingPrinter.Name } } } else { $errorServerUnreachable = "Printserver $printServer ist nicht erreichbar." $errorServerUnreachable | Out-File -FilePath $errorLogPath -Append Write-Host "FEHLER: $errorServerUnreachable Drucker werden nicht entfernt." Write-Host "Skript wird beendet." exit 1 } # Hole die Liste der Drucker vom Print Server $printers = Get-WmiObject -Class Win32_Printer -ComputerName $printServer foreach ($printer in $printers) { $location = $printer.Location $assignedPCs = $location -split ';' foreach ($assignedPC in $assignedPCs) { # Füge Drucker zum PC basierend auf dem Standortfeld hinzu Add-PrinterToPCBasedOnLocation -printerName $printer.Name -location $assignedPC.Trim() } } # Warte 2 Sekunden Start-Sleep -Seconds 2 # Funktion zum Durchsuchen der Drucker und zum Schreiben ins Log function SearchAndLogPrinters { param ( [string]$searchTerm, [string]$logFilePath ) $printers = Get-WmiObject -Query "SELECT * FROM Win32_Printer" foreach ($printer in $printers) { $location = $printer.Location if ($location -like "*$searchTerm*") { $logMessage = "PC-Name: $searchTerm, Drucker: $($printer.Name), Standort: $location" Add-Content -Path $logFilePath -Value $logMessage # Druckernamen vor dem Festlegen des Standarddruckers ins Log schreiben $logMessage = "Ausgewählter Drucker: $($printer.Name)" Add-Content -Path $logFilePath -Value $logMessage # Aufrufen der Funktion zum Festlegen des Standarddruckers SetDefaultPrinter -printerName $printer.Name } } } # Funktion zum Festlegen des Standarddruckers function SetDefaultPrinter { param ( [string]$printerName ) rundll32.exe printui.dll,PrintUIEntry /y /n "$printerName" } # Aufrufen der Funktion und Suche nach dem PC-Namen SearchAndLogPrinters -searchTerm $currentPCName -logFilePath $errorLogPath Write-Host "Vorgang abgeschlossen." Jetzt scheiter ich leider daran das Skript mit normalen Rechten auszuführen als Fehlermeldung bekomme ich diese: Get-WmiObject : Zugriff verweigert In C:\Users\Max.Mustermann\Desktop\Drucker Skript Test 19.ps1:127 Zeichen:13 + $printers = Get-WmiObject -Class Win32_Printer -ComputerName $printSe ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand Wie kann ich am Sichersten den Zugriff auf den Printserver gewährleisten? Gibt es hier evtl einen möglichkeit mit einer AD Sicherheisgruppe zuarbeiten? Oder kann man das Skript evtl mit einem Zertifikart so ausstatten das er Printserver nur diese Skript Aktzeptiert? bin für jede idee Dankbar
×
×
  • Neu erstellen...