Показать полную графическую версию : [решено] Удаление принтеров из командной строки
Лично я от Вас первый раз в этой теме вижу этот код, »
Я имел в виду этот:
есть стандартный Prnmngr.vbs (в XP/2003 - в папке \WINDOWS\system32, в последующих ОС - в папке \Windows\System32\Printing_Admin_Scripts\локаль). »
код.
можно или нет внутрь файла 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
Я имел в виду этот: »
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
Может быть кому интересно, здесь перейти (http://moonlightsoft.blogspot.com/2014/04/vbscript_16.html) есть решение
Скрипт перейти (http://forum.oszone.net/post-2914404-19.html) с учетом этого решения (http://moonlightsoft.blogspot.com/2014/04/vbscript_16.html) - файл 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 - ничего не вылазиет - принтер удаляется
Отлично, то что надо!
SharkyEXE, у меня включён контроль учётных записей, пользователь входит в группу Администраторы, я открываю интерпретатор команд (без повышения привилегий), исполняю любой из двух приведённых мною скриптов (опять-таки — без повышения привилегий), и ранее установленный принтер удаляется. Windows 7 SP1 x64.
SharkyEXE
23-03-2020, 22:52
Iska
Здравствуйте.
Я написал так, как мне привычнее :)
Кому-то, может быть, как мне, проще чуть больше кода, зато наверняка
Тут больше - чтое сть возможность, так сказать, два в одном, и скрипт на VBS, и если требуется - будет запрос о повышении прав, если не требуется - сообщения не будет, все в одном файле, а не какие-то ярлыки, через чужого запуск и прочее, здесь - все в одном месте
SharkyEXE, я написал лишь о том, что у меня, в моих конкретных условиях, отрабатывает и без повышения привилегий до административных.
SharkyEXE
24-03-2020, 06:18
Iska
Понятно.
PS. Вы бы не могли, пожалуйста, эту строку
WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Fax'").Delete_перевести на язык Autoit?
Например, так:
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
Iska
А никак нельзя в одну строку соединить эту команды, пожалуйста?
Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$oSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_Printer.DeviceID='Epson Stylus C20 Series (M)'").Delete_
А никак нельзя в одну строку соединить эту команды »
(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
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
Так — \Tools\Compile:
https://i.imgur.com/vQCQo37.png
что, собственно, приводит к тому же — установке в коде:
#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
Но Вы мне скажите, зачем Вам нужна одна строка? »
Меньше кода - тем более, чем плохо, что одно одной строкой добиться цели - удалить принтер
SharkyEXE, третий (и последний) принцип построения программ звучит так: «Наглядность».
SharkyEXE
05-04-2020, 19:48
Iska
Здравствуйте.
Вы бы не могли, пожалуйста, эту строку
wmic.exe Printer where "DeviceID='Epson Stylus C20 Series (M)'" deleteперевести на язык Autoit?
Спасибо.
SharkyEXE, я уже переводил (http://forum.oszone.net/post-2914469.html#post2914469) по Вашей просьбе пару недель назад.
SharkyEXE
05-04-2020, 20:14
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)
Не получается
мне нужно, чтобы в файл 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
Iska
Здравствуйте.
Для чего мне хотелось несколько способов удаления принтеров - wmic, vbs, cmd
Я пишу скрипт на языке autoit, туда есть желание вставить способы удаления принтеров, используя wmic, vbs, cmd, чтобы запустить скрипт и принтеры удалились
Ну вот хочется мне все способы удаления, что зедсь плохого то, не просто один споосб, а несколько способов
SharkyEXE, это один и тот же способ. Вы можете стирать мел с доски белой тряпкой, чёрной тряпкой, хоть синей тряпкой — в основе будет лежать одна и та же технология, в данном случае — Wbem.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.