PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win 7 - Drucker löschen


anakin87
2013-07-18, 09:59:07
Hallo,
ich habe ein sehr hartnäckiges Problem mit meinen Drucken. Die Drucker wurden per GPO deployed und einige sind nicht mehr existent. Diese wurden per GPO und am Printserver entfernt. Leider tauchen sie auf einigen Win7-Geräten immer noch auf (gpupdate gab es bereits). Man kann sie nichteinmal aus den "Devices and Printers" löschen - access denied unable to remove device.

So nun zu meinem Lösungsansatz - der nicht funktioniert :rolleyes:
delPrinters.ps1

$plist = Get-WmiObject -class Win32_Printer -computer localhost
$dp = $plist | Where-Object { $_.deviceID -match 'foo_printer' }
$dp.psbase.Delete()

Die PS wurde als Admin gestartet und liefert:
Exception calling "Delete" with "0" argument(s): "Access denied "

:confused: Wie das jetzt? Ok dann mal als "System-Account"


psexec -I -S powersehll.exe

nur jetzt findet er die Drucker nicht mehr per Get-Wmi.....
nur die MS XPS Teile werden noch angezeigt.

Das $dp kann ich zwar als xml exportieren und dann unter system importieren nur fehlen dann die Methoden .... [System.Management.Automation.PSInternalMemberSet] doesn't contain a method named 'Delete'.

Wie lösche ich den Drucker jetzt? Wenn ich als Admin das nicht darf... :freak:
Später muss ich die Lösung dann auch ausrollen um hoffentlich nicht zu jedem Client hin zu müssen.

Beste Grüße

MooN
2013-07-18, 11:27:18
Was machst du mit psbase? :freak:


ForEach-Object -InputObject (Get-WmiObject Win32_Printer | Where-Object {$_.DeviceID -imatch 'foo_printer' }) { $_.Delete() }


Aus eigener Erfahrung kann ich dir sagen, dass das aber nicht immer klappen wird. Sollten noch Aufträge in der Queue sein, kann das durchaus immer noch schiefgehen.

EDIT:
Wenn du dir das manuelle Verteilung an Starten ersparen willst, probiers mit Invoke-Command

Ungetestet sollte in etwa sowas funktionieren:

$printdeljob = Invoke-Command -ComputerName (Get-Content "C:\temp\meineClients.txt") -ScriptBlock {
$myprinter = Get-WmiObject Win32_Printer | Where-Object {$_.DeviceID -imatch 'foo_printer' }
Write-Host $env:COMPUTERNAME -NoNewline
if ($myprinter)
{
$myprinter.Delete()
if (!(Get-WmiObject Win32_Printer | Where-Object {$_.DeviceID -imatch 'foo_printer' }))
{
Write-Host ";Deleted"
}
else
{
Write-Host ";Failed"
}
}
else
{
Write-Host ";NoPrinter"
}
} -AsJob
Wait-Job $printdeljob
$results = Receive-Job $printdeljob


Kann das nur nicht testen, da Urlaub.. :D

anakin87
2013-07-18, 15:08:55
Was machst du mit psbase? :freak:


ForEach-Object -InputObject (Get-WmiObject Win32_Printer | Where-Object {$_.DeviceID -imatch 'foo_printer' }) { $_.Delete() }


Aus eigener Erfahrung kann ich dir sagen, dass das aber nicht immer klappen wird. Sollten noch Aufträge in der Queue sein, kann das durchaus immer noch schiefgehen.


psbase => hat google mal auf einer Seite ausgeworfen - leider liefert $dp.delete() auch den gleichen Error. Ich denke dass die GPO über dem Admin steht.

Jetzt gibts ein paar neue Infos - ja du hattest Recht, ein Drucker hatte in der Qeue einen Error&Delete -> ein Cancel der Qeue löste alles und der Drucker verschwand nach dem entfernen aus der GPO & gpupdate /force... Gut ist schon mal einer weg.

Ein Kollege hatte heute am PrintServer im Print Management entdeckt, dass der neue Drucker nicht mehr in der GPO drinnen war und fügte ihn erneut hinzu -> Folge davon die Clients haben jetzt einen deaktiverten ausgerauten Drucker mit Status: Printer not found on server, unable to connect. Öffnet man den Printer steht in der Titelleiste der Druckername on Printserver - Deleting.... WTF?
Manuell kann man den Drucker nicht löschen aus Devices and Printers auch wenn man Admin ist bekommt man ein Access denied toll :eek:
Am Printserver sind alle Statusmeldungen OK...


Kann das nur nicht testen, da Urlaub.. :D
Dann wünsche ich dir einen schönen Urlaub & thx dass du darin auch Zeit findest mir zu helfen (y)

Matrix316
2013-07-18, 15:50:20
Die Drucker stehen auch in der Registry. http://hannes-schurig.de/20/01/2010/drucker-und-anschlusse-uber-die-registry-loschen/

Hatte letztens auch mal einen nicht mehr angeschlossenen Drucker der immer noch als vorhanden aber offline angezeigt wurde und wenn ich ihn so entfernt hatte, war er beim nächsten Drucken wieder da. Erst als der Registry Eintrag entfernt wurde, war er ganz weg.

anakin87
2013-07-18, 16:04:28
Ok stimmt muss ich auch noch beachten.

Ich stelle mal eine Vermutung an:
Wenn ich Printer die am Client als "Printer not found on server, unable to connect" markiert sind neu unter einem anderen Namen deploye dann wird der inaktive Drucker gelöscht und die neue Printer Connection stimmt nun endlich. Vermutung darum, weil ich denke, dass ein erneutes Deployen unter den selben Namen den Drucker nicht löscht und erneut hinzufügt weil der Name als deviceID den Client nicht dazu bringt das zu updaten weil der Drucker ja vorhanden ist - aber die Connection stimmt dann nicht.
Das Problem wäre damit lösbar indem man den Drucker unter einem anderen Namen deployed.
1. die GPO kann den alten löschen -> weil aus GPO entfernt
2. die GPO muss am Client einen neuen Drucker mit richtiger Connection anlegen.

Testen werde ich das mal morgen....


EDIT 20.07.2013:
Nunja ich bin mir nicht sicher ob die Methode das Problem zuverlässig behebt, aber es tritt nicht mehr auf

Danke nochmal :)