Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 2000/XP (http://forum.oszone.net/forumdisplay.php?f=6)
-   -   [решено] Удаление принтеров из командной строки (http://forum.oszone.net/showthread.php?t=62272)

denzill 06-03-2006 12:47 414385

[решено] Удаление принтеров из командной строки
 
Все спрашивают про установку принтеров, а я вот хочу спросить про удаление:
как из коммандной строки удалить ВСЕ установленные в системе принтера?
то биш добавить: "rundll32 printui.dll,PrintUIEntry /in /n \\machine\printer"
добавляет сетевой принтер
а вот удалить как?
при условии, что имя принтера(принтеров) в системе не известны?

V Telm 07-03-2006 20:14 414988

Я бы это сделал так....
REG DELETE "HKEY_CURRENT_USER\Printers\Connections" /f

PS: удаляется весь раздел со всем содержимым, после перезагрузки раздел восстановиться.

denzill 07-03-2006 20:33 414991

Работает
очень биг сенькс
если ставить принтер сразу после удаления - перезагрузка не нужна :-)

batyaPS 05-07-2009 23:22 1159717

элегантно !!V Telm,

batyaPS 04-08-2009 07:49 1184926

Вот пример для удаления всех сетевых принтеров

:// Удаляем все имеющиеся сетевые принтеры.

For /F "Tokens=1,2 Skip=1" %%i In ('WMIC Printer Where Network^=TRUE Get ShareName^,ServerName^,WorkOffLine') Do rundll32 printui.dll,PrintUIEntry /dn /q /n%%i\%%j

KipFun 17-09-2010 11:19 1497537

a как удалить конкретный принтер?

Petya V4sechkin 17-09-2010 12:45 1497621

KipFun, пример удаления локального принтера:
Код:

rundll32.exe printui.dll,PrintUIEntry /dl /n "Microsoft XPS Document Writer" /q

KipFun 17-09-2010 14:21 1497737

Petya V4sechkin, Спасибо! все сработало!

Lospi 22-09-2010 12:49 1501561

Цитата:

Цитата Petya V4sechkin
KipFun, пример удаления локального принтера:
Код:
rundll32.exe printui.dll,PrintUIEntry /dl /n "Microsoft XPS Document Writer" /q »

Подскажите не опытному, это делается в командной строке?

mega19 07-10-2011 13:44 1767997

пытаюсь удалить сетевой принтер командой

rundll32.exe printui.dll,PrintUIEntry /dn /n "ИмяПринтера"

выдаёт ошибку: "Не удаётся подключение принтера. Введено неправильное имя принтера или указанный принтер утерял подключение к серверу"

имя принтера ввожу точно правильно
сервера на котором был подключен принтер уже не существует
параметр /dn согласно справке - "удаление подключения к сетевому принтеру"

Если же стандартно удалять руками через Пуск - Принтеры и факсы, то удаляется без проблем

способа удалить такой принтер через командную строку пока не нашел

.........

P.S. попробовал тот же трюк с подключенным рабочим сетевым принтером - та же ошибка

Petya V4sechkin 07-10-2011 18:56 1768218

Цитата:

Цитата mega19
имя принтера ввожу точно правильно

Как?
\\сервер\принтер

Есть и другие способы.
Например, стандартный Prnmngr.vbs в папке \WINDOWS\system32 или VBS в две строчки:
Код:

Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "\\сервер\принтер", true, true


-NotFound- 11-06-2013 17:27 2165968

Цитата:

Цитата Petya V4sechkin
Есть и другие способы.
Например, стандартный Prnmngr.vbs в папке \WINDOWS\system32 или VBS в две строчки:
Код:
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "\\сервер\принтер", true, true »

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

le9i0nx 20-10-2014 13:53 2417902

Нашел через поиск в реестре такой вариант удаления локального принтера
надо просто удалить ветку реестра
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Имя_локального_принтера
Проверено в домене с windows 7

SharkyEXE 23-03-2020 09:11 2914322

Всем здравствуйте.

Пожалуйста, напишите альтернативные способы удаления локального принтера Microsoft XPS Document Writer
rundll32.exe - уже есть

Хочется VBS, WMIC

Petya V4sechkin 23-03-2020 13:16 2914349

SharkyEXE, есть стандартный Prnmngr.vbs (в XP/2003 - в папке \WINDOWS\system32, в последующих ОС - в папке \Windows\System32\Printing_Admin_Scripts\локаль).

Примеры

SharkyEXE 23-03-2020 13:20 2914350

Petya V4sechkin

Здравствуйте.

Как я понял Prnmngr.vbs или https://winitpro.ru/index.php/2014/0...i-v-windows-8/ - это VBS язык

Есть или нет у Вас информация, как удалить, используя WMIC?

Спасибо.

Iska 23-03-2020 17:35 2914387

Цитата:

Цитата SharkyEXE
как удалить, используя WMIC? »

Код:

wmic.exe Printer where "DeviceID='Epson Stylus C20 Series (M)'" delete
Проверить, отработает ли для Microsoft XPS Document Writer, предоставляю Вам.

P.S. Обратите внимание, что сам драйвер при этом не удаляется.

SharkyEXE 23-03-2020 18:56 2914395

Iska

Здравствуйте.

1)
Цитата:

Цитата Iska
P.S. Обратите внимание, что сам драйвер при этом не удаляется. »

Лично мне хватит любого способа, чтобы принтер исчез из Пуск -> Панель управления -> Устройства и Принтеры, чтобы в программах типа Word, Excel, Mozilla Firefox не предлагалось печатать на такие принтеры как:
Код:

Microsoft XPS Document Writer
Fax

2) Извините меня, за, возможную наглость, не будете ли Вы так любезны написать решение на VBS, чтобы поменьше кода, чем здесь
Цитата:

Цитата Petya V4sechkin
стандартный Prnmngr.vbs (в XP/2003 - в папке \WINDOWS\system32, в последующих ОС - в папке \Windows\System32\Printing_Admin_Scripts\локаль). »

Может быть из файла Prnmngr.vbs выдернуть кусок кода, который отвечает за удаление принтера и этого, для удаления принтера, хватит, может еще короче решение на VBS есть

Iska 23-03-2020 21:13 2914404

Цитата:

Цитата SharkyEXE
решение на VBS, чтобы поменьше кода, чем здесь »

А чем не устраивает стандартный и уже имеющийся в наличии код?

Код:

Option Explicit

On Error Resume Next

WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_

WScript.Quit 0


SharkyEXE 23-03-2020 21:20 2914406

Цитата:

Цитата Iska
же имеющийся в наличии код? »

Лично я от Вас первый раз в этой теме вижу этот код, благодарен Вам

Заметил некую бяку - этот скрипт, файл с расширением 1.vbs
Код:

Option Explicit

On Error Resume Next

WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Microsoft XPS Document Writer'").Delete_

WScript.Quit 0

удалит принтер Microsoft XPS Document Writer только если - запустить командная строка с парвами администратора + выполнить файл 1.vbs

Если просто запустить файл 1.vbs - принтер не удалится

Бяка в том, что если на файле 1.vbs парвой кнопкой мышки нажать - не будет строки Запуск с парвами администратора

Пожалуйста, научите, можно или нет внутрь файла 1.vbs чего-то написать, чтобы файл 1.vbs запускался с парвами администратора?

PS. Нашел еще одну версию удалить принтер при помощи vbs перейти - 1.vbs

Код:

' https://www.vbsedit.com/scripts/printing/client/scr_1126.asp
' Delete a Printer


strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
 ("Select * from Win32_Printer where DeviceID = 'Microsoft XPS Document Writer'")

For Each objPrinter in colInstalledPrinters
 objPrinter.Delete_
Next

Запустить командная строка с правами администратора + выполнить файл 1.vbs

Iska 23-03-2020 21:34 2914409

Цитата:

Цитата SharkyEXE
Лично я от Вас первый раз в этой теме вижу этот код, »

Я имел в виду этот:
Цитата:

Цитата Petya V4sechkin
есть стандартный Prnmngr.vbs (в XP/2003 - в папке \WINDOWS\system32, в последующих ОС - в папке \Windows\System32\Printing_Admin_Scripts\локаль). »

код.

Цитата:

Цитата SharkyEXE
можно или нет внутрь файла 1.vbs чего-то написать, чтобы файл 1.vbs запускался с парвами администратора? »

Нет. Внутрь скрипта ничего нельзя написать, чтобы он сам запускался с административными привилегиями. Вы можете запускать с административными привилегиями хост, исполняемый файл cscript.exe/wscript.exe, параметром которого будет скрипт.

Мне-то и незаметно было: я работаю из-под Far Manager'а, который запускаю с административными привилегиями, посему и все дочерние процессы, запущенные из-под него, также наследуют эти привилегии.

Попробуйте ещё такой код:
Код:

Option Explicit

Const wbemImpersonationLevelImpersonate = 3
Const wbemPrivilegeLoadDriver          = 9

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        With .Security_
                .ImpersonationLevel = wbemImpersonationLevelImpersonate
                .Privileges.Add wbemPrivilegeLoadDriver
        End With
       
        On Error Resume Next
        .Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
        On Error Goto 0
End With

WScript.Quit 0

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

SharkyEXE 23-03-2020 21:43 2914412

Цитата:

Цитата Iska
Я имел в виду этот: »

1) Я не понимаю, как из много текста Вы сделали мало - работает и славно
2) Этот код
Код:

Option Explicit

Const wbemImpersonationLevelImpersonate = 3
Const wbemPrivilegeLoadDriver          = 9

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        With .Security_
                .ImpersonationLevel = wbemImpersonationLevelImpersonate
                .Privileges.Add wbemPrivilegeLoadDriver
        End With
       
        On Error Resume Next
        .Get("Win32_Printer.DeviceID='Microsoft XPS Document Writer'").Delete_
        On Error Goto 0
End With

WScript.Quit 0

Просто два раза мышкой - не удаляется, только командная строка с правами администратора + запуск файла
PS. Если выключить Контроль учетных записей (ползунок в самый вниз), перезагрузить компьютер, просто два раза мышкой - удаляется
PPS. Было бы замечательно, если не выключая Контроль учетных записей, просто два раза мышкой - удалялось бы или запрашивался Запуск от имени администратора, вылазила бы табличка

SharkyEXE 23-03-2020 22:20 2914415

Может быть кому интересно, здесь перейти есть решение

Скрипт перейти с учетом этого решения - файл 1.vbs
Код:

Const DQ = """", HKLM = &H80000002, KQV = &H1, KSV = &H2
SET colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
FOR EACH oOS IN colOS
 strOSLong = oOS.Version
NEXT
IF Left(strOSLong, 1) > "5" THEN
    IF NOT isAdminRights THEN
  SET oShellApp = CreateObject("Shell.Application")
  oShellApp.ShellExecute WScript.FullName, DQ & WScript.ScriptFullName & DQ, "", "runas", 1
  WScript.Quit
    END IF
END IF
''''''''''Begin of code''''''''''''''''''''''''''''''

' Option Explicit

On Error Resume Next

WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Microsoft XPS Document Writer'").Delete_
WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Fax'").Delete_

WScript.Quit 0


''''''''''End of code''''''''''''''''''''''''''''''''
FUNCTION isAdminRights()
 SET oReg = GetObject("winmgmts:root\default:StdRegProv")
 strKey = "System\CurrentControlSet\Control\Session Manager"
 intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
 isAdminRights = flagAccess
END FUNCTION

Система с ВКЛюченным контролем учетных записей ( ничего не менял) - при запуске двойной клик левой кнопкой мышки по файлу 1.vbs - вылазиет стандартное окно Контроль учетных записей пользователей, кнопки Да или Нет, нажимаем Да - принтер удаляется

Система с ВЫКЛюченным контролем учетных записей ( ползунок в самый низ, перезагрузка компьютера ) - при запуске двойной клик левой кнопкой мышки по файлу 1.vbs - ничего не вылазиет - принтер удаляется

Отлично, то что надо!

Iska 23-03-2020 22:46 2914423

SharkyEXE, у меня включён контроль учётных записей, пользователь входит в группу Администраторы, я открываю интерпретатор команд (без повышения привилегий), исполняю любой из двух приведённых мною скриптов (опять-таки — без повышения привилегий), и ранее установленный принтер удаляется. Windows 7 SP1 x64.

SharkyEXE 23-03-2020 22:52 2914425

Iska

Здравствуйте.

Я написал так, как мне привычнее :)

Кому-то, может быть, как мне, проще чуть больше кода, зато наверняка

Тут больше - чтое сть возможность, так сказать, два в одном, и скрипт на VBS, и если требуется - будет запрос о повышении прав, если не требуется - сообщения не будет, все в одном файле, а не какие-то ярлыки, через чужого запуск и прочее, здесь - все в одном месте

Iska 24-03-2020 00:26 2914435

SharkyEXE, я написал лишь о том, что у меня, в моих конкретных условиях, отрабатывает и без повышения привилегий до административных.

SharkyEXE 24-03-2020 06:18 2914445

Iska

Понятно.

PS. Вы бы не могли, пожалуйста, эту строку
Код:

WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Fax'").Delete_
перевести на язык Autoit?

Iska 24-03-2020 12:22 2914469

Например, так:
Скрытый текст
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")

$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_

Exit(0)


SharkyEXE 24-03-2020 21:34 2914547

Iska

А никак нельзя в одну строку соединить эту команды, пожалуйста?
Код:

Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")

$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_


Iska 24-03-2020 22:05 2914552

Цитата:

Цитата SharkyEXE
А никак нельзя в одну строку соединить эту команды »

Код:

(ObjCreate("WbemScripting.SWbemLocator")).ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
Но! Чтобы скомпилировать скрипт, потребуется отключить умолчальную проверку синтаксиса утилитой Au3Check. В коде:
Код:

#AutoIt3Wrapper_Run_Au3Check=N
или вручную.

SharkyEXE 24-03-2020 22:09 2914553

Iska

Спасибо.

1) В коде, как я понял, это будет так
Код:

#AutoIt3Wrapper_Run_Au3Check=N
(ObjCreate("WbemScripting.SWbemLocator")).ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_

и компилировать, создать exe
2) А вручную как это делается, чтобы была одна строка
Код:

(ObjCreate("WbemScripting.SWbemLocator")).ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
и компилировать, создать exe

Iska 24-03-2020 22:21 2914554

Так — \Tools\Compile:
Скрытый текст

что, собственно, приводит к тому же — установке в коде:
Код:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

Либо же так:
Код:

"C:\Program Files\AutoIt3\Aut2Exe\Aut2exe_x64.exe" /in "C:\Мои проекты\0307\0001.au3"
Но Вы мне скажите, зачем Вам нужна одна строка? Поскольку для «продакшена» нужно таки будет отслеживать факт существования или отсутствия указанного принтера (а не вываливаться с ошибкой времени исполнения).

SharkyEXE 24-03-2020 22:25 2914555

Цитата:

Цитата Iska
Но Вы мне скажите, зачем Вам нужна одна строка? »

Меньше кода - тем более, чем плохо, что одно одной строкой добиться цели - удалить принтер

Iska 24-03-2020 23:11 2914559

SharkyEXE, третий (и последний) принцип построения программ звучит так: «Наглядность».

SharkyEXE 05-04-2020 19:48 2915928

Iska

Здравствуйте.

Вы бы не могли, пожалуйста, эту строку
Код:

wmic.exe Printer where "DeviceID='Epson Stylus C20 Series (M)'" delete
перевести на язык Autoit?
Спасибо.

Iska 05-04-2020 20:08 2915931

SharkyEXE, я уже переводил по Вашей просьбе пару недель назад.

SharkyEXE 05-04-2020 20:14 2915933

Iska

Здравствуйте.

Прошу прощения, вполне возможно, я не так выразился, мне нужно, чтобы в файл 1.au3 написать строку типа
Код:

wmic.exe Printer where "DeviceID='Epson Stylus C20 Series (M)'" delete
Чтобы скомпилировать в exe и удалить принтер

Я методом тыка уже пробую
Код:

RunWait(@ComSpec & ' /c ' & 'wmic.exe Printer where "DeviceID='Microsoft XPS Document Writer'" delete',"", @SW_HIDE)
Не получается

Iska 05-04-2020 21:01 2915936

Цитата:

Цитата SharkyEXE
мне нужно, чтобы в файл 1.au3 написать строку типа »

В чём проблема вписать в Ваш файл 1.au3 в потребное Вам место две строки:
Код:

Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")

$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_

(заменив выделенное на Ваш принтер)?

SharkyEXE 05-04-2020 21:09 2915939

Iska

Здравствуйте.

Для чего мне хотелось несколько способов удаления принтеров - wmic, vbs, cmd

Я пишу скрипт на языке autoit, туда есть желание вставить способы удаления принтеров, используя wmic, vbs, cmd, чтобы запустить скрипт и принтеры удалились

Ну вот хочется мне все способы удаления, что зедсь плохого то, не просто один споосб, а несколько способов

Iska 05-04-2020 21:20 2915940

SharkyEXE, это один и тот же способ. Вы можете стирать мел с доски белой тряпкой, чёрной тряпкой, хоть синей тряпкой — в основе будет лежать одна и та же технология, в данном случае — Wbem.

SharkyEXE 05-04-2020 21:26 2915941

Iska

Здравствуйте.

Тогда, если Вы знаете, будьте так любезны, напишите альтернативные, не Wbem способы удаления принтера?

Я не знаток, не мага профессионал, просто я считал, что vbs или wmic - это разные способы удаления принтера

Теперь мне хочется, если это возможно, разные методы, разные технологии удаления принтера

Спасибо.

Iska 05-04-2020 22:49 2915946

Разве что:
Код:

rundll32.exe printui.dll,PrintUIEntry /n "Epson Stylus C20 Series (M)" /dl

SharkyEXE 05-04-2020 23:25 2915951

Iska

Здравствуйте.

Итого, подъитог

Абсолютно одинаковые способы удаления принтера (способы на Wbem, vbs = wmic, кому что нравится, можно использовать ОДНО ИЗ или сразу оба способа, функционально одно и тоже)

vbs
Код:

Option Explicit

On Error Resume Next

WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_

WScript.Quit 0

wmic
Код:

wmic.exe Printer where "DeviceID='Epson Stylus C20 Series (M)'" delete
Альтернативный способ удаления принтера (способ не на Wbem)
rundll32
Код:

rundll32.exe printui.dll,PrintUIEntry /n "Epson Stylus C20 Series (M)" /dl
Все верно написал или я ошибся, просьба поправить?

Iska 05-04-2020 23:39 2915952

Угу. Только лучше будет написать как-то так:
Цитата:

1. Wbem:
а) WSH (VBScript): …
б) утилита командной строки wmic.exe: …
2.

SharkyEXE 22-08-2021 13:56 2964781

Iska

Здравствуйте

Я могу ошибаться, просьба поправить, но я когда использую код перейти, я код скомпилировал в exe файл, когда я запускаю exe файл, то если у меня нету принтера нету, то вываливается ошибка

Суть - можно Вас попросить, пожалуйста, в коде сделать проверку, мол:
1) если принтер Epson Stylus C20 Series (M) найдется, то для принтера Epson Stylus C20 Series (M) сделать команду
Код:

$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
2) если принтера Epson Stylus C20 Series (M) нету, то для принтера Epson Stylus C20 Series (M) не делать команду
Код:

$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
Пожалуйста, будьте так, любезны

Iska 24-08-2021 23:31 2964959

SharkyEXE, попробуйте, например, так:
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $oSWbemLocator  = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemObjectEx

For $oSWbemObjectEx In $oSWbemLocator.ConnectServer(".", "root\cimv2").InstancesOf("Win32_Printer")
        If $oSWbemObjectEx.DeviceID = "Epson Stylus C20 Series (M)" Then
                $oSWbemObjectEx.Delete_

                ExitLoop
        EndIf
Next

Exit(0)



Время: 13:11.

Время: 13:11.
© OSzone.net 2001-