Назад | Перейти на главную страницу

Удаление сетевого принтера при сбое Powershell

Я сделал сценарий PowerShell, который удаляет сетевой принтер. Он запускается с запланированным развертыванием GPP в пользовательских настройках, которое запускается при любом входе в систему.

Вот сценарий. Он выполняет поиск принтера с сетевым адресом хоста, который совпадает с var $ port, но не имеет имени var $ imprimante. Сценарий действительно ищет принтер с портом TCP / IP и портом WSD.

get-date > C:\Temp\debug.txt
###Variables###
$imprimante = "001 - HP LaserJet Pro M400 color M451dn (Salle prof)"
$port = "10.26.57.21"
###End###

Write-Host "Start Standard TCP/IP Printer"
Get-WmiObject win32_tcpipprinterport | select name, hostaddress | %{    
    $printer = New-Object System.Object
    $printer | Add-Member -type NoteProperty -Name Name -Value $_.name -PassThru | Add-Member -type NoteProperty -Name HostAddress -Value $_.HostAddress
    if ($printer.hostaddress -like $port)
    {

        $name = $printer.name    
        $p = Get-WmiObject win32_Printer -Filter "PortName like '$name' and not (Name like '$imprimante')"
        $count = $p | measure
        if ($count.count -gt 0)
        {
            $pn = $p | Select property -ExpandProperty Name
            Write-Host "The printer '$pn' is going to be removed."
            $p.delete()
        }        
    }    
}

Write-Host "End Of Standard TCP/IP Printer"

Write-Host "Start Of WSD Printer"

Get-WmiObject win32_Printer -filter "PortName like 'wsd%'" | %{
    $p = $_
    $pn = $_.name
    $pc = $pn | measure
    if ($pc.count -gt 0)
    { 
        $address = (Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\$pn\PrinterDriverData\ -Name HPEWSIPAddress).HPEWSIPAddress
        if ($address -like "$port*" -and $pn -notlike "$imprimante")
        {          
           Write-Host "The printer '$pn' is going to be removed."
           $p.delete()
        }              
    }   
}

Write-Host "End Of WSD Printer"

Пока скрипт работает нормально, запланированное задание тоже выполняется, но есть постоянная проблема. Последний удаляемый принтер (или принтер, если есть только один) все еще отображается в разделе «Устройства и принтеры».

Принтер кажется «неустановленным», потому что его больше нельзя использовать. Вот картинка перед сценарием (Извините, французское окружение)Принтер перед удалением

Вот картинка после сценарияПринтер после удаления

Все параметры печати исчезли, но принтер остался. Единственное, что от него можно избавиться - это удалить вручную.

Кто-нибудь видел такое? Я пытался удалить принтер с помощью "Rundll printui.dll", но безуспешно.

Большое спасибо