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

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

Dragokas 12-07-2020 02:25 2927957

Удаление принтера с указанным портом
 
Здравствуйте!

Хочу удалить принтер(ы), привязанные к указанному порту (например, "SHRFAX:").
Подскажите, как сделать (желательно однострочником).

Спасибо.

Код:

PS C:\Users\Alex> Get-Printer

Name                          ComputerName    Type        DriverName                PortName        Shared  Published
----                          ------------    ----        ----------                --------        ------  --------
Fax                                            Local        Microsoft Shared Fax D... SHRFAX:        False    False

Примерно так (только нету такого параметра):

Код:

$Printer = Get-Printer -PortName "SHRFAX:"
Remove-Printer -InputObject $Printer


NickM 12-07-2020 07:02 2927962

А так не пробовали?
Код:

$printer = get-printer * | where {$_.portname -eq 'SHRFAX:'}; remove-printer -inputobject $printer

Dragokas 12-07-2020 17:02 2928010

Да, так работает. Спасибо.

Dragokas 12-07-2020 18:09 2928012

А вот как теперь это грамотно экранировать, чтобы вызвать из-под CMD ?

Код:

powershell.exe -ExecutionPolicy UnRestricted -c "$printer = get-printer * | where {$_.portname -eq 'SHRFAX:'}; remove-printer -inputobject $printer"

= : The term '=' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:2


Jeffers 12-07-2020 18:36 2928014

А в чем у вас сложность выполнить этот код в powershell? Microsoft не рекомендует использовать cmd.

NickM 12-07-2020 18:58 2928017

Цитата:

Цитата Dragokas
А вот как теперь это грамотно экранировать, чтобы вызвать из-под CMD ? »

Хмм, в десятке Ваш пример работает без ошибок, но требует админ привелегии:


Код:

> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1

Код:

>powershell.exe -ExecutionPolicy UnRestricted -c "$printer = get-printer * | where {$_.portname -eq 'SHRFAX:'}; remove-printer -inputobject $printer"
remove-printer : Отказано в доступе к указанному ресурсу.
строка:1 знак:63
+ ... ere {$_.portname -eq 'SHRFAX:'}; remove-printer -inputobject $printer
+                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (MSFT_Printer (N... = 0, Type = 0):ROOT/StandardCimv2/MSFT_Printer) [R
  emove-Printer], CimException
    + FullyQualifiedErrorId : HRESULT 0x80070005,Remove-Printer


Dragokas 12-07-2020 21:32 2928028

NickM, странно, действительно заработало. Запускал от админа. Возможно, где-то лишний знак затесался.

Jeffers, в реале запуск идёт не из-под CMD, а другой программы, поэтому так.

Цитата:

Цитата Jeffers
Microsoft не рекомендует использовать cmd. »

При том, что сама же до сих пор в Windows 10 его использует в ветке реестра AutoRun для подчистки за своим продуктом OneDrive.


Время: 13:05.

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