3

Я использую это, чтобы попытаться получить список принтеров на удаленном компьютере:

Get-WmiObject win32_printer -ComputerName "$oldPcName" 

Проблема в том, что я получаю только локальные принтеры, а не эти принтеры с сервера печати, подключенного к компьютеру. Как я могу получить список сетевых принтеров?

Моя цель - получить список сетевых принтеров на удаленном компьютере, удалить их и добавить разные принтеры с другого сервера печати.

Спасибо

3 ответа3

0

В Windows 7

Чтобы увидеть сетевые принтеры, я читаю реестр

Function InstalledPrinters ($ComputerName)
    {
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $InstalledPrinters = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Connections"
        $InstalledPrinters | Add-Member -Name 'PrinterName' -MemberType NoteProperty -Value ""
        Foreach ($InstalledPrinter in $InstalledPrinters) {$InstalledPrinter.PrinterName = $InstalledPrinter.GetValue("Printer").split("\")[3]}
        Return $InstalledPrinters | sort PrinterName | select PSComputerName, PrinterName
        }
    } 

Чтобы удалить сетевой принтер:

rundll32.exe PRINTUI.DLL PrintUIEntry /gd /c\\$ComputerName /n\\$PrintServer\$PrinterName Gw /q

Чтобы установить сетевой принтер:

rundll32.exe PRINTUI.DLL PrintUIEntry /ga /c\\$ComputerName /n\\$PrintServer\$PrinterName Gw /q
0
#--------------------------
#Set Execution Of PSScripts
#--------------------------

Set-ExecutionPolicy Unrestricted -force

#------------
#Turn Off UAC
#------------

New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force

#------------------------------
#Enter The Name Of The Computer
#------------------------------

$comp = "Name of computer"

#or if you wish to be prompted for the computer name

$comp = Read-host 'Enter the name of the computer?'

#---------------------------------------
#Starts WinRM Service On Remote Computer
#---------------------------------------

Import-Module Remote_PSRemoting -force
Set-WinRMListener -computername $comp
Restart-WinRM -computername $comp
Set-WinRMStartUp -computername $comp

Start-Sleep -Seconds 60

#----------------------------------------------
#Establish a PSSession With The Remote Computer
#----------------------------------------------

New-PSSession $comp | Enter-PSSession

#All of the replace commands are used to strip the extra characters and just #give a \\server\printer path return
#-----------------------
#Gets A List Of Printers
#-----------------------

$printers1 = Get-childitem -Path HKCU:\printers\connections | select name
$printers2 = $printers1 -replace '.*,,'
$printers3 = $printers2 -replace ',','\'
$printers = $printers3 -replace '}', ''

------------------------------------------------------
#To Replace The Old Print Server Name With The New One
------------------------------------------------------

$newprinters = $printers -replace 'oldserver','\\newserver'

#--------------------
#Gets Default Printer
#--------------------

$default = Get-itemproperty -Path "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows" | select device
$default1 = $default -replace '.*='
$default2 = $default1 -replace '()'
$default3 = $default2 -replace ',winspool'
$defaultprinter = $default3 -replace ',.*'

------------------------------------------------------
#To Replace The Old Print Server Name With The New One
------------------------------------------------------

$newdefaultprinter = $defaultprinter -replace 'oldserver','\\newserver'

#------------------------
#Deletes The Old Printers
#------------------------

Get-WMIObject Win32_Printer | where{$_.Network -eq 'true'} | foreach{$_.delete()}

#----------------------------------------
#Exits PSSession With The Remote Computer
#----------------------------------------

Exit-PSSession

#-----------
#Turn UAC On
#-----------

#Value = 0 through 4 depending on the level of UAC

New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 2 -Force

#------------------------------------
#Turn Off Execution Policy Of Scripts
#------------------------------------

Set-ExecutionPolicy undefined -Force

#####This is as far as I could get with it. I always turn off UAC and Enable Scripts in the beginning and turn them back on ant the end.  The summary of this script will give you the new network Printer paths and the users default printers.  It also deletes the users old network printers. With powershell versions before windows 8 and server 2012, you would have to create a logon script to add the new printers and mark the default printer using WMI commands.  Use could also use a csv file with a list of computer names as an input if you wish to run this command on multiple computers.  It would look something like...


$csv = Import-csv -Path pathofcsvfile
foreach ($line in $csv) {

#With a bracket at the end to run through each computer in the list...

Это намного проще с более новыми версиями Windows, так как они имеют командлет Get-printers ...

Надеюсь, это поможет вам начать ... Я хотел бы, чтобы кто-то закончил этот сценарий, поскольку у меня не было времени на работу, чтобы сделать это ...

0

Хм. Там может быть способ сделать это с Raspberry Pi. Вы подключаете Raspberry Pi к принтеру и Wi-Fi, вы включаете переадресацию портов для SSH или используете VNC Viewer для доступа к Raspberry Pi. Используя VNC, вы можете передавать файлы в Raspberry Pi по сети. Затем вы получаете Raspberry Pi, чтобы распечатать файлы, которые вы хотите.

Это не лучшая простая идея, но это единственный способ, который я знаю. Raspberry Pi также очень дешевы. Последняя модель стоит всего 35 фунтов. Если вы хотите сделать это, вам нужно создать учетную запись VNC, а затем добавить Raspberry Pi в адресную книгу VNC. Для этого вам нужно иметь Raspbian Desktop и войти в свою учетную запись VNC на Raspberry Pi.

Характеристики Raspberry Pi:1 ГБ оперативной памяти DDR2, процессор с тактовой частотой 1,4 ГГц, контакты GPIO

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .