Мой первый скрипт, который написал для одномоментной настройки компьютеров в офисе, пока не была полностью налажена сетевая инфраструктура. Запуск выполняется с внешнего носителя (флешка), по этому я указывал полный адрес до модулей, драйверов, профилей и то что может быть ещё нужно. Данный скрипт состоит из множества блоков с комментариями(#), с строчками диалоговых окон для каждого блока. Так же много лишних строк, но оставил на будущий разбор ошибок. Конечно, вполне вероятно, что количество строк можно на порядок уменьшить, думаю что до этого я ещё дойду. А пока расскажу по подробнее про блоки и о переменных которые нужно прописывать.
Отключение ограничений на исполнения скрипта.
Этот блок был изначально провальный, так как это и есть скрипт. Он не может запускаться пока не будет снято ограничение. Решил оставить как напоминание — что нужно очень хорошо продумывать код.
#Write-Host "Снимаем ограничение на запуск скриптов"
#$wshell = new-object -ComObject wscript.shell
#$output = $wshell.popup("Позволяем работать скрипту")
#Start-Process D:\Bats\Execution.bat
#get-ExecutionPolicy
Этот вопрос я решил простым bat-файлом, в котором прописал команды. Сделав ярлык в корень флешки и запускаю далее с правами Администратора.
powershell.exe (Set-ExecutionPolicy Unrestricted)
powershell.exe d:\bats\WiFi_Printer.ps1
Копирование модулей для PowerShell
В данном блоке копирую модуль «wifiprofilemanagement» на пользовательский компьютер, что бы в дальнейшем можно было работать профилями WiFi на пользовательском компьютере, но можно обойтись стандартными командами типа netsh.
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Копируем модули для PowerShell")
Copy-Item -Path D:\Module\wifiprofilemanagement\* -Destination 'C:\Program Files\WindowsPowerShell\Modules\wifiprofilemanagement' -Recurse
После копирования, нужно проверить корректность установки модуля
Get-Module -Name wifiprofilemanagement -ListAvailable
Get-Command -Module wifiprofilemanagement
Блок установки WiFi профиля
Сначала очень много читал, искал в интернете про варианты переноса профилей WiFi на компьютер через скрипт, было много лишних модулей скачено, испробовано. Но потом понял, что установить профиль можно одной строчкой, которая многим известна. Но для этого нужен сам XML файл профиля. А вот для него, как раз пришлось использовать модуль «wifiprofilemanagement» на компьютере источнике, где WiFi уже был настроен. О работе этого модуля расскажу позже в отдельной заметке.
В самом коде нужно будет только указать адрес файла и точное название файла профиля. Пример: …»D:\profile\WiFi.XML»…
netsh wlan add profile filename="D:\profile\WiFi.XML" user=all
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Проверь WIFI, сейчас начну настраивать принтер")
Блок установки принтера
Заключительный блок, установка принтера, состоит из нескольких подблоков. Это добавление порта, добавление установка драйвера принтера, добавление самого IP адреса к порту и других параметров и объединение всех воедино.
Для начала задаю переменные, которые подставляются в код и проверяют наличие порта по заданному имени, в случае обнаружении он пропустит шаг по созданию порта, перейдя к следующему. Если такой порт не будет найден, то будет выполняться команда по созданию этого порта, настоятельно рекомендую в имени порта использовать сетевой (IP) адрес принтера. Следующий шаг, добавление драйверов в систему, его легко установить благодаря встроенным в операционную систему VBS скриптов, а точнее prndrvr.vbs. Его расположение зависит от языка Windows в моём случае в папке C:\Windows\System32\Printing_Admin_Scripts\ru-RU\. Тут нужно будет из INF-файла скопировать название драйвера принтера и указать в коде, а так же путь к этому файлу. Далее, при помощи тех же VBS скриптов — Prnport.vbs, прописываем на наш порт настройки протокола LPR, имя очереди, и настройки SNMP. Последний подблок тоже использует VBS — prnmngr.vbs, с помощи его мы назначаем принтеру имя — «Printer_name», ассоциируем его с драйвером и портом. Финальные штрихи это строчка открытия окна «Устройства и принтеры», отправка тестовой страницы на установленный принтер, применение принтера по умолчанию,
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Устанавливаю Принтер")
$portName = "IP_***.***.***.***"
$checkPortExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
if (-not $checkPortExists) {
Add-PrinterPort -name IP_***.***.***.*** -PrinterHostAddress "***.***.***.***"
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs" -a -m "HP Universal PCL v*.*.*" -i D:\driver\printer\*.inf
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-RU\Prnport.vbs" -a -r IP_***.***.***.*** -h ***.***.***.*** -o LPR -q print -me -y public -i 1 -n 515
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-Ru\prnmngr.vbs" -a -p "Printer_name" -m "HP Universal PCL" -r "IP_***.***.***.***"
}
show-controlpanelitem -CanonicalName microsoft.devicesandprinters
(New-Object -ComObject wscript.network).SetDefaultPrinter('Printer_name')
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-Ru\prnqctl.vbs” -e -p "Printer_name"
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Принтер настроен и отправлена тестовая страница на принтер")
Код целиком с # комментариями
#Write-Host "======>Снимаем ограничение на запуск скриптов<======"
#$wshell = new-object -ComObject wscript.shell
#$output = $wshell.popup("Позволяем работать скрипту")
#Start-Process D:\Bats\Execution.bat
#get-ExecutionPolicy
# Перенос Модуля на другой компьютер
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Копируем модули для PowerShell")
Copy-Item -Path d:\Module\wifiprofilemanagement\* -Destination 'C:\Program Files\WindowsPowerShell\Modules\wifiprofilemanagement' -Recurse
# Проверка доступности модуля
Get-Module -Name wifiprofilemanagement -ListAvailable
Get-Command -Module wifiprofilemanagement
#Установка WiFI
netsh wlan add profile filename="XML-File" user=all #Указать путь к XML файлу настроек определённой WiFi сети
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Проверь WIFI, сейчас начну настраивать принтер")
# Установка принтера
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Устанавливаю Принтер")
$portName = "IP_***.***.***.***" #Указать IP принтера вместо *
$checkPortExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
if (-not $checkPortExists) {
Add-PrinterPort -name IP_***.***.***.*** -PrinterHostAddress "***.***.***.***" #Указать IP принтера вместо *
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-RU\prndrvr.vbs" -a -m "HP Universal PCL v*.*.*" -i *:\driver\printer\*.inf #Из *.inf файла скопировать и вписать модель необходимого драйвера, указать путь до инф файла
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-RU\Prnport.vbs" -a -r IP_***.***.***.*** -h ***.***.***.*** -o LPR -q print -me -y public -i 1 -n 515 #Указать IP принтера вместо *
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-Ru\prnmngr.vbs" -a -p "Printer_name" -m "HP Universal PCL" -r "IP_***.***.***.***" #Указать имя принтера вместо Printer_name и IP принтера вместо *
}
show-controlpanelitem -CanonicalName microsoft.devicesandprinters
(New-Object -ComObject wscript.network).SetDefaultPrinter('Printer_name') #Указать IP принтера вместо *
cscript "C:\Windows\System32\Printing_Admin_Scripts\ru-Ru\prnqctl.vbs” -e -p "Printer_name" #Указать имя принтера вместо Printer_name
$wshell = new-object -ComObject wscript.shell
$output = $wshell.popup("Принтер настроен и отправлена тестовая страница на принтер")
#$wshell = new-object -ComObject wscript.shell
#$output = $wshell.popup("На компьютере настроен WiFi и Принтер с названием Printer_name")
exit