Компьютерный форум 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=283692)

sigmatik 16-06-2014 13:43 2364693

Принтер по умолчанию по маске имени
 
Есть прекрасный, простой и вполне рабочий скрипт для установки определенного принтера в качестве используемого по-умолчанию, вот он:

Код:

rundll32 printui.dll,PrintUIEntry /y /n "Printer_name"
Задача: Модифицировать скрипт таким образом, чтобы в параметре Printer_name можно было задвать имя принтера по маске.
Пример:
Имя принтера "HP1320_buh (Перенаправлено 1)"
Нужно сделать так, чтобы по-умолчанию ставился принтер, первая часть названия которого совпадает с HP_1320_buh , то есть что то вроде "HP_1320_buh****"

Код:

rundll32 printui.dll,PrintUIEntry /y /n "HP_1320_buh***"
- не работает

Спасибо

cameron 16-06-2014 14:18 2364699

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

sigmatik 16-06-2014 14:27 2364704

Цитата:

Цитата cameron
всегда отрадно видеть любителей костылей, изобретающих велосипеды с треугольными, поперечными колёсами. »

Есть проблема с определенным оборудованием в определенной конфигурации, описана например здесь http://toster.ru/q/100419
Решения нет. Костыли рассматриваются пока как единственно возможное решение.

Iska 16-06-2014 14:45 2364714

WSH:
читать дальше »
Код:

Option Explicit

Dim i

Dim objRegExp
Dim objWshNetwork
Dim collWshCollection


Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
        .IgnoreCase = True
        .Pattern    = "HP_1320_buh.*"
End With

With WScript.CreateObject("WScript.Network")
        Set collWshCollection = .EnumPrinterConnections()
       
        For i = 0 To collWshCollection.Count - 1 Step 2
                If objRegExp.Test(collWshCollection.Item(i + 1)) Then
                        .SetDefaultPrinter collWshCollection.Item(i + 1)
                       
                        Exit For
                End If
        Next
       
        Set collWshCollection = Nothing
End With

Set objRegExp = Nothing

WScript.Quit 0


Умолчальным будет сделан первый же подходящий по шаблону принтер.

sigmatik 16-06-2014 15:19 2364729

Цитата:

Цитата Iska
WSH »

Спасибо , но скрипт не работает. Выполняется без ошибок, но поставленную задачу не решает, принтер по умолчанию не меняется :(

sigmatik 16-06-2014 15:40 2364733

Цитата:

Цитата sigmatik
Спасибо , но скрипт не работает. Выполняется без ошибок, но поставленную задачу не решает, принтер по умолчанию не меняется »

Прошу прощения, в скрипте точку пропустил, все работает!. Спасибо.

P.S. а для соискателей могу предложить еще один вариант на powershell

Код:

$pr
$pr=get-WmiObject -class Win32_printer | where ({$_.name -like "reg1*"}) | foreach { $_.name }
rundll32 printui.dll,PrintUIEntry /y /n $pr


Iska 16-06-2014 16:44 2364756

Цитата:

Цитата sigmatik
могу предложить еще один вариант на powershell »

Вам надо там ещё обрабатывать ситуацию, когда не будет найдено ни одного подходящего принтера. Также не проверял, как будет се6я вести Ваш скрипт с несколькими подходящими под шаблон именами принтеров.

julia 25-01-2022 16:39 2978653

Цитата:

Цитата Iska
WSH:
« скрыть »

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

если добавляю

WScript.Sleep 30000

Ошибка: предполагается наличие инструкции

NickM 25-01-2022 18:37 2978665

Таймер задается в миллисекундах.
А так всё должно работать, возможно в Вашем сценарии используются какие-нибудь вложенные конструкции?

julia 26-01-2022 10:09 2978711

копипаста из сообщения

только строка с паттерном выглядит так

.Pattern = "\d{3,4}.*"

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

и верхняя строчка скрипта

WScript.Sleep 30000

в итоге ошибка предполагается наличие инструкции
строка 3
символ 1


Время: 05:20.

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