/ / | |
1 | |
29.09.2023, 11:34. Показов 1185. Ответов 11 |
/ / | |
29.09.2023, 11:57 | 2 |
Добавлено через 2 минуты |
/ / | |
29.09.2023, 12:20 [ТС] | 3 |
/ / | |
29.09.2023, 13:42 | 4 |
А если не копировать решение буквально?
PortName : HPLaserJetMFPMdn |
/ / | |
29.09.2023, 20:25 | 5 |
а я думал, он так пошутил. ведь ты же пошутил, да, Alexnet84 ? |
/ / | |
02.10.2023, 14:37 [ТС] | 6 |
/ / | ||||||
02.10.2023, 19:09 | 7 | |||||
Это список свойств объекта, который создал Get-Printer
|
/ / | |
02.10.2023, 21:13 | 8 |
Это список свойств объекта, который создал Get-Printer |
/ / | |
02.10.2023, 21:34 | 9 |
Проблема в том У меня нет сетевого принтера, соответственно и проблемы. Я исхожу из данных Alexnet84 |
/ / | |
02.10.2023, 22:08 | 10 |
У меня нет сетевого принтера |
/ / | |
03.10.2023, 08:38 | 11 |
|
/ / | |
04.10.2023, 17:16 [ТС] | 12 |
есть команда (желательно одной строчкой), которая покажет список: |
/ / | 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:
# 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
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
8 bronze badges
Итак начнем. Задача, которую пытались решить — это установка принтеров на терминальные серверы (нынче серверы узла сеансов) фермы. Было несколько путей:
установка с помощью групповых политик
Установка вручную — конечно, самый простой путь, но если серверов несколько, то вероятность ошибки велика, да и установка вручную — это скучно. Нужна была автоматизация, поэтому сначала выбрал групповые политики — разворачивание принтера на компьютер (на rdsh).
Выбрал установку на компьютер, потому что AD, которое мне досталось по сути не имело структуры — все пользователи размещались в одном OU. Чтобы навести порядок в AD и распределить пользователей на OU, которые соответствуют либо структуре здания либо штатному расписанию потребуется много времени.
В результате использования GPO выявил следующие нюансы:
драйверы принтеров не устанавливаются автоматически или это происходит долго;
даже если установить драйверы принтера на rdsh, то установка принтера через gpo происходит только после перезагрузки сервера;
после входа пользователя на сервер — список принтеров пуст примерно минут пять бывает больше;
принтеры очень часто не отображаются в панели управления, но отображаются в диалоговом окне печати, например в блокноте. В оснастке управления печатью развернутые принтеры не отображаются;
При удалении принтера из групповой политики принтер частенько не удаляется сразу, даже после 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
Изменить принтер по-умолчанию в Windows можно через панель Параметры.
- Перейдите в Settings -> Printers and Scanners
- Чтобы запретить Windows автоматически менять принтер по умолчанию, отключите опцию Let Windows manage my default printer
- Затем выберите в списке принтер, который хотите назначить по умолчанию -> Manage
- Выберите опцию Set as default
Таже можно выбрать принтер по умолчанию из классической панели управления Windows. Перейдите в Control Panel -> Device and Printer (или выполните команду
shell:PrintersFolder
). Щелкните по принтеру и выберите Set as default printer.
Назначить принтер по умолчанию из командной строки PowerShell
Вы можете назначить принтер по умолчанию из командной строки с помощью утилиты wmic. Вывести список принтеров:
wmic printer get name,default
У принтера по умолчанию включен атрибут Default=True.
Изменить принтер по-умолчанию:
wmic printer where name="Имяпринтера" call setdefaultprinter
Также можно использовать 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
Как задать принтер по-умолчанию через GPO?
Если вам нужно централизованно задать принтер по умолчанию для нескольких пользователей в домене Active Directory, можно использовать GPO.
Brother MFC-L2750DW series,winspool,FILE:
- 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:
Using PowerShell to add a network printer to a computer can be quite efficient. Here’s a step-by-step tutorial:
- 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.
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:
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, чтобы подтвердить, что он удален.