Power shell добавить локальный принтер windows

/ /

1

29.09.2023, 11:34. Показов 1185. Ответов 11


Author24 — интернет-сервис помощи студентам

/ /

29.09.2023, 11:57

2

Добавлено через 2 минуты
Alexnet84,
данный вопрос можно назвать иначе: ‘Погуглите кто-нибудь вместо меня, самому мне лень’

/ /

29.09.2023, 12:20

 [ТС]

3

/ /

29.09.2023, 13:42

4

Цитата
Сообщение от Alexnet84
Посмотреть сообщение

А если не копировать решение буквально?

Цитата
Сообщение от Alexnet84
Посмотреть сообщение

PortName : HPLaserJetMFPMdn

/ /

29.09.2023, 20:25

5

а я думал, он так пошутил.

ведь ты же пошутил, да, Alexnet84 ?
пошутил ?

/ /

02.10.2023, 14:37

 [ТС]

6

/ /

02.10.2023, 19:09

7

Цитата
Сообщение от Alexnet84
Посмотреть сообщение

Это список свойств объекта, который создал Get-Printer
Ну а самому сложить 2+2?

PowerShell
1
2
 GetPrinter.PortName
GetPrinterPort printerhostaddress

/ /

02.10.2023, 21:13

8

Цитата
Сообщение от lesser
Посмотреть сообщение

Это список свойств объекта, который создал Get-Printer

/ /

02.10.2023, 21:34

9

Цитата
Сообщение от YuS_2
Посмотреть сообщение

Проблема в том

У меня нет сетевого принтера, соответственно и проблемы. Я исхожу из данных Alexnet84

/ /

02.10.2023, 22:08

10

Цитата
Сообщение от lesser
Посмотреть сообщение

У меня нет сетевого принтера

/ /

03.10.2023, 08:38

11

Цитата
Сообщение от YuS_2
Посмотреть сообщение

Узнать адрес сетевого принтера через Get-Printer

/ /

04.10.2023, 17:16

 [ТС]

12

есть команда (желательно одной строчкой), которая покажет список:
сетевой (с IP адресом) и локальный принтер.

/ /

04.10.2023, 17:16

Помогаю со студенческими работами здесь

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

First of all I am not really into scripting. So I am sorry if I may ask a “stupid” question or likewise things.

function Get-UserNetPrinter { <# .SYNOPSIS Get all the Network Printers from the Registry Requires Remote Registry access on the remote machine .DESCRIPTION Extract a list of all Print-Server Printers that a computer is using. These are not the same as direct install printers. For that, WMI is easier .PARAMETER ComputerName A computer or array of computers .EXAMPLE Get-UserNetPrinter $(hostname) DESCRIPTION ------------ Get all the installed printers on the current machine OUTPUT ------------ Returns Computer Printer Details as an object E.g: computer : ComputerName user : Domain\User printServer : PrintServerName printer : PrinterName pringerGUID : {ABCDE-FGH-1234-5678-ABCDEFGHI} printerDesc : printerDriver : XX V123 printerLocation : printerPortName : printerShareName : PrinterSharedName printerSpooling : PrintAfterSpooled printerPriority : 1 printerUNC : \\UNC\PATH\GOES\HERE printerDefault : .NOTES Author: Pessimist__Prime for Reddit Last-Edit-Date: 14/06/2017 Changelog: 14/06/2017 - Initial Script 14/06/2017 - Adam Mnich added default printer #> [CmdletBinding()] PARAM( [Parameter(ValueFromPipelineByPropertyName = $true, Position = 0)] [string[]]$computerName = $env:ComputerName ) begin { #Return the script name when running verbose, makes it tidier write-verbose "===========Executing $($MyInvocation.InvocationName)===========" #Return the sent variables when running debug Write-Debug "BoundParams: $($MyInvocation.BoundParameters|Out-String)" $regexPrinter = "\\\\.*\\(.*)$" $regexPrinter2 = "(\w*)," $regexPrinter3 = "\\\\.*\\(.*),winspool" } process { #Iterate through each computer passed to function foreach ($computer in $computerName) { write-verbose "Processing $computer" #Open the old remote registry $reglm = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.Registryhive]::LocalMachine, $computer) $regu = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.Registryhive]::Users, $computer) #Grab the USER SIDS, try and ignore service accounts and stuff $sids = ($regu.GetSubKeyNames() | Where-Object {($_ -notlike '*.DEFAULT*') -and ($_ -notlike "*classes*") -and ($_.length -ge 9)}) foreach ($sid in $sids) { write-verbose "Processing UserSID: $sid" $printersReg = $regu.OpenSubKey("$sid\printers\connections") $printerDefaultReg = $regu.OpenSubKey("$sid\printers\defaults") $DefaultPrinter = try { ($regu.OpenSubKey("$sid\printers\defaults\$($printerDefaultReg.GetSubKeyNames())")).getvalue($null) } catch {$null} if ($printerDefaultReg -eq $null){ $printerDefaultReg = $regu.OpenSubKey("$sid\Software\Microsoft\Windows NT\CurrentVersion\Windows") $DefaultPrinter = try {$printerDefaultReg.GetValue("Device")} catch {$null} } Write-Verbose "Default Printer $DefaultPrinter" if ($DefaultPrinter -match $regexPrinter3){ $DefaultPrinter = $Matches[1] } elseif ($DefaultPrinter -match $regexPrinter){ $DefaultPrinter = $Matches[1] } elseif ($DefaultPrinter -match $regexPrinter2){ $DefaultPrinter = $Matches[1] } if (($printersReg -ne $null) -and ($printersReg.length -gt 0)) { $printers = $printersReg.getsubkeynames() #Try and get the username from the SID - Need to be the same domain #Should change to a try-catch for different domains $user = $($(New-Object System.Security.Principal.SecurityIdentifier($sid)).Translate([System.Security.Principal.NTAccount]).Value) foreach ($printer in $printers) { #Need to split the regkey name to get proper values #Split 2 = Print server #Split 3 = printer name #Never seen a value in the 0 or 1 spots $split = $printer.split(",") $printerDetails = $regu.openSubKey("$SID\Printers\Connections\$printer") $printerGUID = $printerDetails.getValue("GuidPrinter") $spoolerPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers\$($split[2])\Printers\$printerGUID\DsSpooler" $printSpooler = $reglm.OpenSubKey("$spoolerPath") #Make an object to store in the array $pdetails = [pscustomobject]@{ computer = $computer user = $user printServer = $split[2] printer = $split[3] pringerGUID = $printerGUID printerDesc = $($printSpooler.getValue("description")) printerDriver = $($printSpooler.getValue("DriverName")) printerLocation = $($printSpooler.getValue("Location")) printerPortName = $($printSpooler.getValue("PortName")) printerShareName = $($printSpooler.getValue("printShareName")) printerSpooling = $($printSpooler.getValue("printSpooling")) printerPriority = $($printSpooler.getValue("priority")) printerUNC = $($printSpooler.getValue("uNCName")) printerDefault = if ($split[3] -eq $DefaultPrinter){$true} } #Add the object to the array $pdetails } } else { #Well, something didn't work on this computer entry #This script could do with better error handling write-verbose "No Access or No Printers" } } } }
}192.168.254.254

Is there anyway to adapt this code that I get this result?

thanks for your replies! I would now like to show to you what did work for me. First I had to enable remote registry on the computers I have in my report.

Therefore I did use this script:

:/>  Какая видеокарта на моем компьютере виндовс 7

# Prompt the user to enter the path to the text file containing computer names
$computerNamesFile = Read-Host "Enter the path to the text file containing computer names"
# Check if the computer names file exists
if (Test-Path $computerNamesFile) { # Read computer names from the file $computerNames = Get-Content $computerNamesFile foreach ($computerName in $computerNames) { # Check if the remote computer is reachable through ping test if (Test-Connection -ComputerName $computerName -Count 1 -Quiet) { # Enable Remote Registry service on the remote computer Invoke-Command -ComputerName $computerName -ScriptBlock { Set-Service -Name "RemoteRegistry" -StartupType Automatic Start-Service -Name "RemoteRegistry" } Write-Host "Remote Registry has been enabled on $computerName." } else { Write-Host "Error: $computerName is not reachable. Skipping enabling Remote Registry." } }
} else { Write-Host "Error: Computer names file not found at $computerNamesFile."
}

Then I did use the script to report all the installed network printers with the same hostname report:

function Get-UserNetPrinter { <# .SYNOPSIS Get all the Network Printers from the Registry Requires Remote Registry access on the remote machine .DESCRIPTION Extract a list of all Print-Server Printers that a computer is using. These are not the same as direct install printers. For that, WMI is easier .PARAMETER ComputerListFilePath Path to the file containing a list of computer names .PARAMETER OutputFilePath Path to the file where the output will be stored .EXAMPLE Get-UserNetPrinter -ComputerListFilePath "C:\path\to\computerlist.txt" -OutputFilePath "\\network\path\output.txt" DESCRIPTION ------------ Get all the installed printers on the specified machines and store the results in the specified file .NOTES Author: Pessimist__Prime for Reddit Last-Edit-Date: 14/06/2017 Changelog: 14/06/2017 - Initial Script 14/06/2017 - Adam Mnich added default printer #> [CmdletBinding()] PARAM ( [Parameter(Position = 0, Mandatory = $true)] [string]$ComputerListFilePath, [Parameter(Position = 1, Mandatory = $true)] [string]$OutputFilePath ) begin { #Return the script name when running verbose, makes it tidier Write-Verbose "===========Executing $($MyInvocation.InvocationName)===========" #Return the sent variables when running debug Write-Debug "BoundParams: $($MyInvocation.BoundParameters|Out-String)" $regexPrinter = "\\\\.*\\(.*)$" $regexPrinter2 = "(\w*)," $regexPrinter3 = "\\\\.*\\(.*),winspool" $results = @() } process { # Read computer names from the file $ComputerNames = Get-Content $ComputerListFilePath # Iterate through each computer passed to function foreach ($Computer in $ComputerNames) { if (Test-Connection -ComputerName $Computer -Count 1 -Quiet) { Write-Verbose "Processing $Computer" #Open the old remote registry $reglm = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.Registryhive]::LocalMachine, $Computer) $regu = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.Registryhive]::Users, $Computer) #Grab the USER SIDS, try and ignore service accounts and stuff $SIDs = ($regu.GetSubKeyNames() | Where-Object {($_ -notlike '*.DEFAULT*') -and ($_ -notlike "*classes*") -and ($_.length -ge 9)}) foreach ($SID in $SIDs) { Write-Verbose "Processing UserSID: $SID" $printersReg = $regu.OpenSubKey("$SID\printers\connections") $printerDefaultReg = $regu.OpenSubKey("$SID\printers\defaults") $DefaultPrinter = try { ($regu.OpenSubKey("$SID\printers\defaults\$($printerDefaultReg.GetSubKeyNames())")).getvalue($null) } catch { $null } if ($printerDefaultReg -eq $null) { $printerDefaultReg = $regu.OpenSubKey("$SID\Software\Microsoft\Windows NT\CurrentVersion\Windows") $DefaultPrinter = try { $printerDefaultReg.GetValue("Device") } catch { $null } } Write-Verbose "Default Printer $DefaultPrinter" if ($DefaultPrinter -match $regexPrinter3) { $DefaultPrinter = $Matches[1] } elseif ($DefaultPrinter -match $regexPrinter) { $DefaultPrinter = $Matches[1] } elseif ($DefaultPrinter -match $regexPrinter2) { $DefaultPrinter = $Matches[1] } if (($printersReg -ne $null) -and ($printersReg.length -gt 0)) { $printers = $printersReg.getsubkeynames() #Try and get the username from the SID - Need to be the same domain #Should change to a try-catch for different domains $User = $($(New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value) foreach ($Printer in $printers) { #Need to split the regkey name to get proper values #Split 2 = Print server #Split 3 = printer name #Never seen a value in the 0 or 1 spots $Split = $Printer.split(",") $PrinterDetails = $regu.openSubKey("$SID\Printers\Connections\$Printer") $PrinterGUID = $PrinterDetails.GetValue("GuidPrinter") $SpoolerPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers\$($Split[2])\Printers\$PrinterGUID\DsSpooler" $PrintSpooler = $reglm.OpenSubKey("$SpoolerPath") #Make an object to store in the array $PDetails = [pscustomobject]@{ Computer = $Computer User = $User PrintServer = $Split[2] Printer = $Split[3] PringerGUID = $PrinterGUID PrinterDesc = $($PrintSpooler.GetValue("description")) PrinterDriver = $($PrintSpooler.GetValue("DriverName")) PrinterLocation = $($PrintSpooler.GetValue("Location")) PrinterPortName = $($PrintSpooler.GetValue("PortName")) PrinterShareName = $($PrintSpooler.GetValue("printShareName")) PrinterSpooling = $($PrintSpooler.GetValue("printSpooling")) PrinterPriority = $($PrintSpooler.GetValue("priority")) PrinterUNC = $($PrintSpooler.GetValue("uNCName")) PrinterDefault = if ($Split[3] -eq $DefaultPrinter) { $true } } #Output the object $results += $PDetails } } else { #No printers or access issues Write-Verbose "No Access or No Printers" } } } else { Write-Verbose "Ping failed for $Computer, skipping..." } } } end { $results | Export-Csv -Path $OutputFilePath -NoTypeInformation }
}

When I finished my report, I deactivated remote registry again on these computers.

Start-Process -FilePath "C:\Users\ANYUser\Desktop\*.exe" -ArgumentList "/S /v/qn"
Pnputil /add-driver "C:\Program Files\gs\gs9.50\lib\*.inf"
Add-PrinterPort -Name "File:(print to file)"
Add-PrinterDriver -Name "NAME PDF"
Add-Printer -Name "NAME OF PRINTER" -PortName "File:(print to file)" -DriverName "NAME PDF"

asked Oct 30, 2023 at 13:57

the1fan's user avatar

You might just need to add the -wait parameter to Start-Process so it will wait until the executables have finished running before proceeding with the rest of the setup:

Start-Process -FilePath "C:\Users\ANYUser\Desktop\*.exe" -ArgumentList "/S","/v","/qn" -Wait
Pnputil /add-driver "C:\Program Files\gs\gs9.50\lib\*.inf"
Add-PrinterPort -Name "File:(print to file)"
Add-PrinterDriver -Name "NAME PDF"
Add-Printer -Name "NAME OF PRINTER" -PortName "File:(print to file)" -DriverName "NAME PDF"

In addition, -ArgumentList should be formatted as an array looks like this:
“Members”,”Of”,”The”,”Array”. One argument in each entry.

answered Oct 30, 2023 at 14:30

Hugo's user avatar

8 bronze badges

Итак начнем. Задача, которую пытались решить — это установка принтеров на терминальные серверы (нынче серверы узла сеансов) фермы. Было несколько путей:

  • установка с помощью групповых политик

Установка вручную — конечно, самый простой путь, но если серверов несколько, то вероятность ошибки велика, да и установка вручную — это скучно. Нужна была автоматизация, поэтому сначала выбрал групповые политики — разворачивание принтера на компьютер (на rdsh).

:/>  Какие обновления нельзя устанавливать в операционной системе Windows 7 x64.: spayte — LiveJournal

Выбрал установку на компьютер, потому что AD, которое мне досталось по сути не имело структуры — все пользователи размещались в одном OU. Чтобы навести порядок в AD и распределить пользователей на OU, которые соответствуют либо структуре здания либо штатному расписанию потребуется много времени.

В результате использования GPO выявил следующие нюансы:

  • драйверы принтеров не устанавливаются автоматически или это происходит долго;

  • даже если установить драйверы принтера на rdsh, то установка принтера через gpo происходит только после перезагрузки сервера;

  • после входа пользователя на сервер — список принтеров пуст примерно минут пять бывает больше;

  • принтеры очень часто не отображаются в панели управления, но отображаются в диалоговом окне печати, например в блокноте. В оснастке управления печатью развернутые принтеры не отображаются;

    Power shell добавить локальный принтер windows
  • При удалении принтера из групповой политики принтер частенько не удаляется сразу, даже после gpupdate force.

Самое критичное — это установка принтера только после перезагрузки — довольно неприятная ситуация, когда необходимо выкинуть с терминала 50 пользователей. Поэтому начал смотреть в сторону скрипта на Powershell.

Организацию работы по установке принтера предполагал такой: принтер устанавливается вручную на сервер печати, затем запускается скрипт, который устанавливает этот принтер на все терминальные серверы фермы, с такими же настройками что и на сервере печати.

Удаленная установка принтера
Удаленная установка принтера

В результате сбора информации нашел хорошую статью про PrintBRM – Отказоустойчивый сервер печати на базе Windows, благодарю автора – информация была полезна. Испытал, метод рабочий, но хотелось больше контроля над алгоритмом установки, поэтому использовал Powershell.

Алгоритм скрипта
Алгоритм скрипта
$driversFile= "\\storage\printDrivers\drivers.txt"
$printersFile= "\\storage\printDrivers\printers.txt"
$ACLfolder = "\\storage\printDrivers\acl\"
$csvfile= "\\storage\printDrivers\printers.csv"
$folderDrivers= "\\storage\printDrivers\drivers\"
$terminals = @("tspd-01", "tspd-02", "its-01", "its-02")
$exportFlag=0
#удаляем файл списка названий драйверов
if(Test-Path $ACLfolder){Remove-Item -Path $ACLfolder -Recurse}
if(Test-Path $driversFile){Remove-Item -Path $driversFile}
if(Test-Path $printersFile){Remove-Item -Path $printersFile}
if(Test-Path $csvfile){Remove-Item -Path $csvfile}
Start-Sleep -Seconds 5
#формируем список названий драйверов
$drivers=Get-PrinterDriver | select Name | where {$_.Name -notlike "*Microsoft*" -and $_.Name -notlike "Remote*"}
foreach ($driver in $drivers) {
write $driver.Name | out-file $driversFile -Append
}
#формируем список принтеров
$printers = get-printer | where {$_.Name -notlike "*Microsoft*" -and $_.Name -notlike "Remote*"}
#создаем директорию для ACL
Mkdir $ACLfolder
foreach($printer in $printers){
Write $printer.Name | out-file $printersFile -Append
#экспортируем ACL принтера в текстовый файл
$aclfile=$ACLfolder+$printer.Name+".txt"
(Get-Printer $printer.Name -Full).PermissionSDDL | Out-File $aclfile
}
#формируем csv файл с информацией о принтере
get-printer | where {$_.Name -notlike "*Microsoft*" -and $_.Name -notlike "Remote*"} |Export-CSV $csvfile -NoTypeInformation -Encoding UTF8
#функция экспорта драйверов
function ExportDrivers($folderDrivers){ #очищаем папку с драйверами if(Test-Path $folderDrivers){Remove-Item -Path $folderDrivers -Recurse} #получаем список драйверов принтеров $PrintDriver = Get-WindowsDriver -Online | where {($_.ClassName -like "Printer")} foreach ($print in $PrintDriver){ write $print #Записываем название драйверов НЕ от микрософта if($print.ProviderName -ne "Microsoft"){ #Создаем имя папки $folderName=($folderDrivers + $print.Driver).replace('.inf','') write $folderName #Создаем папку Mkdir $folderName #экспортируем драйвера принтеров в папку pnputil.exe /export-driver $print.Driver $folderName } }
}
#Запуск экспорта
if($exportFlag -eq 1){ExportDrivers -folderDrivers $folderDrivers}
Write "_____________________"
$pass = "Morkovka10"
$us="Domain\mylogin"
$password = ConvertTo-SecureString -String $pass -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ($us, $password )
#Запуск удаленной сесии
foreach($server in $terminals){
$s = New-PSSession -computerName $server -authentication CredSSP -credential $cred
Invoke-Command -Session $s -Scriptblock { #проброс перемнных в сессию $csvfile=$using:csvfile $ACLfolder= $using:ACLfolder $folderDrivers=$using:folderDrivers $driversFile=$using:driversFile $h = hostname write "____________________________________ $h ________________________________________________________________________" #устанавливаем драйвера в хранилище драйверов write "install drivers!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" $folderDrivers=$folderDrivers+"*.inf" pnputil.exe /add-driver $folderDrivers /subdirs /install write "install drivers!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" #добавляем отсутствующие драйвера write "_______________________________" Write "добавляем отсутствующие драйвера принтеров из хранилища драйверов" $drivers = Get-Content -Path $driversFile foreach ($driver in $drivers){ if((Get-PrinterDriver -Name $driver).Count -eq 0){ Add-PrinterDriver -Name $driver } } write "_______________________________" #Получаем массив объектов - список принтеров на принтсервере из csv $printers = $printers =Import-CSV -Path $csvfile #Получаем массив локальных принтеров $localPrinters = get-printer -Full | where {$_.Name -notlike "*Microsoft*" -and $_.Name -notlike "Remote*"} #удаляем локальные принтеры которых нет на принтсервере foreach ($localP in $localPrinters){ $match = $printers -match $localP.Name if($match.Count -eq 0){ $pname=$localP.Name write "REMOVE $pname - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" Remove-Printer -Name $localP.Name } } Foreach($p in $printers){ write $p.Name write $p.DriverName write $p.PortName $aclfile=$ACLfolder+$p.Name+".txt" $perms = Get-Content -Path $aclfile if((Get-Printer -Name $p.Name).Count -ne 0){ #синхронизируем ACL Set-Printer $p.Name -PermissionSDDL $perms #Получаем локальный принтер $localprinter= Get-Printer -Name $p.Name #Проверяем порт if($localprinter.PortName -ne $p.PortName){ write "порт НЕ совпадает" #Добавляем порт если его нет if((Get-PrinterPort -Name $p.PortName).Count -eq 0){ Add-PrinterPort -Name $p.PortName -PrinterHostAddress $p.PortName } #Добавляем порт принтеру Set-Printer -Name $p.Name -PortName $p.PortName }else{write "порт совпадает"} #Проверяем драйвер if($localprinter.DriverName -ne $p.DriverName){ Set-Printer -Name $p.Name -DriverName $p.DriverName } } else { #Добавляем порт if((Get-PrinterPort -Name $p.Name).Count -eq 0){ Add-PrinterPort -Name $p.PortName -PrinterHostAddress $p.PortName } #Добавляем принтер Add-Printer -Name $p.Name -DriverName $p.DriverName -PortName $p.PortName #Добавляем ACL Set-Printer $p.Name -PermissionSDDL $perms } } }
} 

В результате мы получили:

  • удаленную установку принтеров на терминальные серверы без необходимости их перезагрузки;

  • единый сервер администрирования печати — сервер‑печати, который является эталонным — именно с него копируются все настройки устанавливаемых принтеров;

  • простой метод развертывания принтеров, поэтому его можно передать специалистам службы поддержки — установил принтер на сервер печати, настроил права и затем запустил скрипт — все просто!

  • Сервер печати — занимает мало места (в виде ВМ), поэтому можно быстро и легко его бекапить каждый день, поэтому не страшно, если техподдержка начудит — его быстро можно восстановить.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Как организована установка принтеров в вашей организации?

Проголосовали 28 пользователей. Воздержались 4 пользователя.

Microsoft изменила порядок назначения принтера по умолчанию в Windows 10 и 11. Теперь принтером по умолчанию всегда назначается принтер, на котором пользователь успешно печатал в последний раз в текущем местоположении. Таким образом, принтер по-умолчанию в этих версиях Windows может постоянно меняться, если вы иногда печатаете на разных принтерах в разных локациях. В этой статье мы рассмотрим, как назначить принтер по-умолчанию из графического интерфейса Windows, командной строки или через групповые политики.

:/>  Как включить микрофон на компьютере Windows 7

Выбрать принтер по-умолчанию из панели управления Windows

Изменить принтер по-умолчанию в Windows можно через панель Параметры.

  1. Перейдите в Settings -> Printers and Scanners
  2. Чтобы запретить Windows автоматически менять принтер по умолчанию, отключите опцию Let Windows manage my default printerЗапретить выбирать принтер автоматически
  3. Затем выберите в списке принтер, который хотите назначить по умолчанию -> Manage
  4. Выберите опцию Set as default Назначить принтер по -умолчанию в Windows

Таже можно выбрать принтер по умолчанию из классической панели управления Windows. Перейдите в Control Panel -> Device and Printer (или выполните команду
shell:PrintersFolder
). Щелкните по принтеру и выберите Set as default printer.

Панель управления Windows - принтер по умолчанию

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

Вы можете назначить принтер по умолчанию из командной строки с помощью утилиты wmic. Вывести список принтеров:

wmic printer get name,default

У принтера по умолчанию включен атрибут Default=True.
Изменить принтер по-умолчанию:

wmic printer where name="Имяпринтера" call setdefaultprinter

командная строка wmic - назначить принтер по умолчанию

Также можно использовать PowerShell для управления принтерами.

Вывести список принтеров:

Изменить принтер по-умолчанию:

$Printer = Get-CimInstance -Class Win32_Printer -Filter "Name='HP LaserJet M1530 MFP Series PCL 6'"
Invoke-CimMethod -InputObject $Printer -MethodName SetDefaultPrinter

Чтобы запретить Windows автоматически переназначать принтер по умолчанию, нужно затем изменить значение параметра реестра LegacyDefaultPrinterMode:

REG ADD "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -v LegacyDefaultPrinterMode /t REG_DWORD /d 1 /f

Параметр реестра LegacyDefaultPrinterMode - отключить авто выбор принтера по умолчанию

Как задать принтер по-умолчанию через GPO?

Если вам нужно централизованно задать принтер по умолчанию для нескольких пользователей в домене Active Directory, можно использовать GPO.

Brother MFC-L2750DW series,winspool,FILE:

Настройки принтера по умолчанию в реестре Windows

  • Hive:
    HKCU
  • Key Path:
    SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
  • Value Name:
    Device
  • Value Type:
    REG_SZ
  • Value Data:
    Brother MFC-L2750DW series,winspool,FILE:

Назначить принтер по умолчанию на компьютерах через GPO

GPO: Отключить управление принтером, используемым по умолчанию, со стороны Windows

Anthony M

photo credit: https://www.pexels.com/

Using PowerShell to add a network printer to a computer can be quite efficient. Here’s a step-by-step tutorial:

  1. Open PowerShell as Administrator:
  • Right-click on the Start button.
  • Choose “Windows PowerShell (Admin)” or “Command Prompt (Admin).”

2. Check Existing Printers:

3. Add a Network Printer:

Use the Add-Printer cmdlet to add a network printer. You’ll need the printer’s IP address or hostname.

photo credit: Robert McMillen, Troubleshooting IT Remote Administration

4. Set Default Printer (Optional):

If you want to set the added printer as the default printer, use:

Set-PrintDefault -Name "PrinterName"

Replace “PrinterName” with the name of the printer you added.

5. Verify the Addition:

To confirm that the printer has been added, you can use:

photo credit: https://www.pexels.com/

That’s it! You’ve successfully added a network printer using PowerShell. Make sure to replace placeholder values with your actual printer information.

К компьютеру за время его жизни подключаются десятки различных периферийных устройств. Для ускорения повторного подключения Windows сохраняет сведения об этих устройствах. Иногда списки таких устройств становятся слишком большими. В этом случае можно удалить сведения о ненужных гаджетах. Если вы больше не пользуетесь принтером и хотите его удалить, или хотите удалить и повторно установить принтер для решения проблем, Windows 11 и Windows 10 упрощают удаление принтеров.

Если вы используете ПК из Windows 11, перейдите в Настройки > Bluetooth и устройства > Принтеры и сканеры. В Windows 10 перейдите к Настройка > Устройства > Принтеры и сканеры.

Найдите и выберите принтер, который необходимо удалить. В Windows 11 выберите «Удалить». В Windows 10 выберите пункт «Удалить устройство» и нажмите кнопку «Да».

Windows удалила выбранный принтер.

Удаление принтера с помощью диспетчера устройств

Для удаления принтера с помощью диспетчера устройств сначала откройте диспетчер устройств , щелкнув правой кнопкой мыши значок меню «Пуск» и выбрав «Диспетчер устройств».

Выберите «Просмотр» на панели меню, затем включите «Показать скрытые устройства», чтобы принтер отображался, даже если он скрыт.

В этом же окне откройте «Принтеры» и найдите принтер. Если вы не можете найти принтер, разверните «Очереди печати» и найдите его там. Находя его, щелкните правой кнопкой мыши название принтера и выберите «Удалить устройство».

В открывшемся окне «Удалить устройство» включите «Попытка удалить драйвер для данного устройства» (Windows 11) или «Удалить программное обеспечение драйвера для данного устройства» (Windows 10). Затем нажмите «Удалить».

Удалите принтер и драйверы в диспетчере устройств.

Подождите, пока диспетчер устройств удалит выбранный принтер. Затем включите изменения, перезагрузив компьютер с Windows 11 или Windows 10 .

Используйте PowerShell для удаления принтера

Откройте меню «Пуск», найдите PowerShell и выберите «Запуск от имени администратора».

В запросе «Контроль аккаунтов пользователей» (UAC) выберите «Да».

В PowerShell перечислите доступные принтеры, введя следующую команду и нажав Enter: Get-Printer

Из списка принтеров запомните имя принтера, который необходимо удалить. Затем введите команду Remove-Printer -Name “PrinterName”, заменив «PrinterName» на указанное имя, и нажмите Enter. Убедитесь, что имя принтера взято в двойные кавычки.

PowerShell удалил указанный принтер. Вы можете снова запустить Get-Printer, чтобы подтвердить, что он удален.