当前位置: 首页 > news >正文

windows@共享网络共享打印机@局域网内远程调用打印机打印

文章目录

    • abstract
    • 流程简述
    • 预备工作
      • 启动服务🎈
      • 启用网络发现和共享开关
      • 检查共享密码保护(可选)
    • 相关概念
    • 通过GUI设置局域网共享打印机
      • 使用开始菜单直接跳转到打印机设置
      • 逐步操作
    • 命令行配置方式
      • 使用`net`命令共享打印机
      • 使用powershell相关模块配置
    • 使用PowerShell 配置共享打印机🎈
      • 查看或列出打印机
        • 检查网共享打印机
        • 资源管理器中查看网络共享打印机
      • 共享打印机(主设备)
      • 添加网络打印机(辅设备)
        • 设置防火墙规则
      • 使用Powershell 快速添加网络共享打印机
      • 跟踪共享打印机上的打印任务🎈
      • 重命名打印机
    • FAQ
      • 打印机驱动检查
      • 连接扫描到的打印机时遇到失败
      • 共享打印使用的凭证
      • 访问权限问题
      • 总结

abstract

  • 和共享文件夹类似,windows上可以共享打印机设备

    • 一般来说,windows10以上的系统设置共享打印机很方便,可以通过开始菜单搜索直接跳转到设置页面

    • 共享您的网络打印机 - Microsoft 支持

  • 在Windows局域网(LAN)环境下共享打印机,可以实现局域网内的多台设备共享同一台打印机。

    • 其应用场合举例:一个办公是内只需要有一台打印机,而有多台计算机,如果希望每台计算机都能够调用打印机,能够提高打印机的使用便利性和效率;打印机通常只能链接到一台计算机上,有了共享打印机,就不再需要将文件发送给主设备,只要主设备在线并授权给辅设备,那么辅设备可以通过主设备直接打印东西,而不需要主设备上有人转操作
    • 另一个场景是,远程打印,假设楼下有一台打印机和连接它的计算机(作为打印关系中的主设备),那么在办公室里可以在取得主设备授权后远程交代打印任务给打印机,提前将文件打印好,让需要的人去领取
  • 设置共享打印机主要有两类方法:图形界面设置方法和命令行方法,后者操作上比较简单

流程简述

官方文档给出了设置和控制面板两种设置界面内的设置方法,并且主要分为主设备打印机设置,辅设备打印机设置

预备工作

  • 使用powershell来快速执行(要求管理员权限)

启动服务🎈

  • 启用相关服务,比如spooler服务

    • 一般是辅设备上设置启用spooler服务
  • 管理员方式打开powershell,执行sasv spooler或者以下

    start-Service spooler
    
    • 如果经常用,想要设置为开机自动运行的服务,则执行
     Set-Service -Name Spooler -StartupType Automatic
    

启用网络发现和共享开关

function Set-NetworkDiscovery
{<#.SYNOPSIS设置网络网络发现.EXAMPLEPS> Set-NetworkDiscovery -state on.EXAMPLEPS> Set-NetworkDiscovery -state off#>param([ValidateSet('on', 'off')][string]$state = 'on')$switch = ($state -eq 'on') ? 'yes':'no'# Write-Host $switch#对于英文系统netsh advfirewall firewall set rule group="Network Discovery" new enable=$switch #对于中文系统netsh advfirewall firewall set rule group="网络发现" new enable=$switch }
function Set-NetworkFileAndPrinterSharing
{<#.SYNOPSIS设置文件和打印机共享.EXAMPLEPS> Set-NetworkFileAndPrinterSharing -state on.EXAMPLEPS> Set-NetworkFileAndPrinterSharing -state off#>param([ValidateSet('on', 'off')][string]$state = 'on')$switch = ($state -eq 'on') ? 'yes':'no'# Write-Host $switchnetsh advfirewall firewall set rule group="File and Printer Sharing" new enable=$switchnetsh advfirewall firewall set rule group="文件和打印机共享" new enable=$switch}
#调用两个函数
Set-NetworkDiscovery;
Set-NetworkFileAndPrinterSharing;

检查共享密码保护(可选)

  • 设置(password protected sharing)这个步骤不是必须的,如果访问过程中遇到问题,再考虑执行设置

  • 关于匿名访问的配置对应的powershell修改注册表参考脚本

    $everyoneKeyPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"# 检查 everyoneincludesanonymous 值
    $everyoneValue = Get-ItemProperty -Path $everyoneKeyPath -Name "everyoneincludesanonymous" -ErrorAction SilentlyContinue
    $restrictValue = Get-ItemProperty -Path $everyoneKeyPath -Name "restrictanonymous" -ErrorAction SilentlyContinueif ($everyoneValue -eq $null) {Write-Output "everyoneincludesanonymous 不存在,将新建并设置默认值 0"New-ItemProperty -Path $everyoneKeyPath -Name "everyoneincludesanonymous" -Value 0 -PropertyType DWord -Force
    } else {Write-Output "everyoneincludesanonymous 当前值为: $($everyoneValue.everyoneincludesanonymous)"
    }if ($restrictValue -eq $null) {Write-Output "restrictanonymous 不存在,将新建并设置默认值 1"New-ItemProperty -Path $everyoneKeyPath -Name "restrictanonymous" -Value 1 -PropertyType DWord -Force
    } else {Write-Output "restrictanonymous 当前值为: $($restrictValue.restrictanonymous)"
    }# 修改值,启用密码保护共享
    Set-ItemProperty -Path $everyoneKeyPath -Name "everyoneincludesanonymous" -Value 0 -Force
    Write-Output "everyoneincludesanonymous 已设置为 0(禁用匿名访问)"Set-ItemProperty -Path $everyoneKeyPath -Name "restrictanonymous" -Value 1 -Force
    Write-Output "restrictanonymous 已设置为 1(启用身份验证)"

相关概念

  • 主设备:和打印机直接连接的计算机
  • 辅设备:本身没有直接连接打印机,希望共享使用其他设备(主设备)的打印机

通过GUI设置局域网共享打印机

使用开始菜单直接跳转到打印机设置

  • 在开始菜单中搜printer
  • 点击打印机和扫描仪

逐步操作

  1. 连接打印机:确保打印机已经连接到一台Windows计算机,并能够正常使用。
  2. 共享打印机
    • 打开“控制面板” > “设备和打印机”。
    • 右键点击要共享的打印机,选择“打印机属性”。
    • 进入**“共享”选项卡**,勾选“共享这台打印机”,并为打印机设置一个共享名称(比如简短的ptr,或者带编号的短名p1,方便后续引用
  3. 设置打印权限
    • 如果选项可用的话,可以在“共享”选项卡中点击“附加驱动程序”来为不同架构的系统(如x86和x64)安装适配的驱动,以便其他系统使用。
  4. 配置网络设置
    • 打开“控制面板” > “网络和共享中心” > “更改高级共享设置”。
    • 确保“文件和打印机共享”已经开启,并在网络配置中关闭“密码保护的共享”(根据需求选择是否需要)。

命令行配置方式

在命令行中使用命令可以简化共享打印机的配置。常用的命令行工具是net命令和PowerShell

使用net命令共享打印机

可以使用net share命令来共享打印机。

主设备上设置共享:

net share PrinterName=C:\Windows\System32\spool\PRINTERS /grant:Everyone,full
  • PrinterName是你为共享打印机指定的名称。
  • /grant:Everyone,full意味着向网络中的所有用户提供完全控制权限。

使用powershell相关模块配置

  • 详见下一节

使用PowerShell 配置共享打印机🎈

  • PrintManagement Module | Microsoft Learn

在PowerShell中,我们可以更灵活地配置共享打印机。

查看或列出打印机

使用Get-Printer( Retrieves a list of printers installed on a computer)查看打印机

PS> get-printerName                           ComputerName    Type         DriverName
----                           ------------    ----         ----------
Microsoft Print to PDF                         Local        Microsoft Print To PDF
Adobe PDF                                      Local        Adobe PDF Converter
\\front\HP DeskJet 2700 series front           Connection   HP DJ 2700 series PCL-3
检查网共享打印机

检查非本地打印机

PS> get-printer |?{$_.Type -eq 'connection'}Name                           ComputerName    Type         DriverName
----                           ------------    ----         ----------
\\front\HP DeskJet 2700 series front           Connection   HP DJ 2700 series PCL-3

或者get-printer \\*,如果需要查看详情,使用fl追加

PS> get-printer -Name \\*|flName                         : \\front\HP DeskJet 2700 series
ComputerName                 : front
Type                         : Connection
ShareName                    : ptr
PortName                     : USB001
DriverName                   : HP DJ 2700 series PCL-3
Location                     :
Comment                      :
SeparatorPageFile            :
PrintProcessor               : winprint
Datatype                     : RAW
Shared                       : True
Published                    : False
DeviceType                   : Print
PermissionSDDL               :
RenderingMode                :
KeepPrintedJobs              : False
Priority                     : 1
DefaultJobPriority           : 0
StartTime                    : 0
UntilTime                    : 0
PrinterStatus                : ServerOffline
JobCount                     : 0
DisableBranchOfficeLogging   :
BranchOfficeOfflineLogSizeMB :
WorkflowPolicy               :
资源管理器中查看网络共享打印机
  • 启用了网络发现后,可以在资源管理器中通过unc地址\\server,(例如\\front),会尝试列出\\front设备共享出来的共享文件夹和打印机等资源,显示的名字是ShareName,而不是打印机或共享文件夹本身的名字

共享打印机(主设备)

Set-Printer -Name "PrinterName" -Shared $true -ShareName "SharedPrinterName"

添加网络打印机(辅设备)

Add-Printer -ConnectionName "\\ServerName\PrinterName"
设置防火墙规则

确保Windows防火墙允许文件和打印机共享。可以通过以下命令启用相应规则:(中英文系统语言通用)

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
netsh advfirewall firewall set rule group="文件和打印机共享" new enable=Yes

使用Powershell 快速添加网络共享打印机

假设主设备(启用了网络发现,计算机名为front)已经设置启用了打印机共享,共享名称为ptr(此时共享打印机的访问路径为\\front\ptr)

那么在其他设备(比如同网络局域网下),可以执行以下命令快速为辅设备快速添加打印机

 
PS> Add-Printer -ConnectionName "\\front\ptr" #添加成功不会输出信息,可以使用get-printer来查看PS> Get-PrinterName                           ComputerName    Type
----                           ------------    ----
Microsoft Print to PDF                         Local
\\front\HP DeskJet 2700 series front           Connecti…

可以发现,我们连接上了\\front共享出来的打印机,不过这里的名字是打印机型号名,而不是我们指定的共享名

跟踪共享打印机上的打印任务🎈

连接上打印机后,需要用它来打印东西,一个问题是如何知道打印任务的进展

powershell中有Get-PrintJob来跟踪指定打印机上的打印任务

而对于局域网内的打印机,如果是用\\..\..的链接访问的共享打印机,那可以用\\*来指代共享打印机

此时的跟踪命令如下(命令中|fl)用来显示完整信息,而不是默认的简略信息

Get-PrintJob \\*|fl

为了说明问题,给出以下操作记录例子

PS☀️[BAT:19%][MEM:56% (4.4/7.85)GB][20:48:59]
# [cxxu@CXXUREDMIBOOK][<以:192.168.1.198>][~\Desktop]
PS> $res=Get-Printer \\*|Get-PrintJob;$resId    ComputerName    PrinterName     DocumentName         SubmittedTime        JobStatus
--    ------------    -----------     ------------         -------------        ---------
3     front           HP DeskJet 270… 07d18a7537d94b26768… 2024/9/9 20:52:53    SpoolingPS☀️[BAT:25%][MEM:58.24% (4.57/7.85)GB][20:52:54]
# [cxxu@CXXUREDMIBOOK][<以:192.168.1.198>][~\Desktop]
PS> $res=Get-Printer \\*|Get-PrintJob;$resId    ComputerName    PrinterName     DocumentName         SubmittedTime        JobStatus
--    ------------    -----------     ------------         -------------        ---------
3     front           HP DeskJet 270… 07d18a7537d94b26768… 2024/9/9 20:52:53    Spooling, Prin…PS☀️[BAT:25%][MEM:58.24% (4.57/7.85)GB][20:52:56]
# [cxxu@CXXUREDMIBOOK][<以:192.168.1.198>][~\Desktop]
PS> $res=Get-Printer \\*|Get-PrintJob;$res|flId            : 3
ComputerName  : front
PrinterName   : HP DeskJet 2700 series
UserName      : smb
DocumentName  : 07d18a7537d94b26768d64e151f0db56
Datatype      : RAW
Priority      : 1
Position      : 1
SubmittedTime : 2024/9/9 20:52:53
Size          : 0
JobTime       : 854593
PagesPrinted  : 1
TotalPages    : 0
JobStatus     : Printing, Retained

可以看到,一个打印任务包含了spooling,Printing等阶段或状态

Printing:打印作业正在进行中。

Retained:打印作业完成后被保留在队列中,以便日后重复打印或保存记录。

打印任务结束一段时间后,Get-Printer将返回空

重命名打印机

  • 也许你希望打印机的名字简单一些,powershell提供了相应的命令:Rename-Printer (PrintManagement) | Microsoft Learn
  • 这个命令需要管理员权限的账户才能够设置

FAQ

打印机驱动检查

PS> Get-PrinterDriverName                                PrinterEnvironment MajorVersion    Manufacturer
----                                ------------------ ------------    ------------
HP DJ 2700 series PCL-3             Windows x64        4               HP
Microsoft enhanced Point and Print… Windows x64        4               Microsoft
Universal Print Class Driver        Windows x64        4               Microsoft
Microsoft Virtual Print Class Driv… Windows x64        4               Microsoft
Microsoft Print To PDF              Windows x64        4               Microsoft
Microsoft IPP Class Driver          Windows x64        4               Microsoft
Remote Desktop Easy Print           Windows x64        3               Microsoft
Microsoft enhanced Point and Print… Windows x64        3               Microsoft
Adobe PDF Converter                 Windows x64        3               Adobe
Microsoft enhanced Point and Print… Windows NT x86     3               Microsoft

其中只有第一个是实体打印机,其他都是虚拟打印机

 $s= Get-PrinterDriver;$s[0]|select *

通过此命令来获取指定打印机(列表中第1个)打印机驱动详情

连接扫描到的打印机时遇到失败

  • 有些修改版系统做了组件删减等原因,导致驱动无法自动处理
  • 这种情况下可能需要辅设备安装打印机的驱动才能使用,但是许多产生提供的驱动安装程序要求检测到打印机后才让你安装,这就造成共享打印机不可用问题;可以考虑从已经安装了驱动的计算机上找到并备份对应的打印机驱动,然后以某种方式提供给辅设备,比如共享文件夹(不要求驱动)
  • 主设备和辅设备使用不同操作系统(如32位与64位系统)时,共享打印机的设置和使用可能会更加复杂。
  • 在powershell(v7+)中执行add-printer如果发生错误,描述不太具体,可以尝试用windows powershell来执行,抛出的错误会更详细点

共享打印使用的凭证

  • 上面的例子中,UserName是smb,这是主设备front上的一个用户账户,它被创建于用来共享文件夹和打印机
  • 如果此前用过smb用户链接过front的共享文件夹过并保留了凭证,那么可以直接用来作为共享打印机使用凭证
  • 否则可能要求你输入用户名和密码来验证使用权限

访问权限问题

如果其他设备不能访问共享打印机,检查是否禁用了“密码保护的共享”,并确保“Everyone”组有相应的权限。

总结

Windows局域网共享打印机可以通过GUI或命令行来配置,命令行工具如net sharerundll32以及PowerShell都可以简化设置过程。此外,自动化批处理脚本可以极大提高配置效率。以下是主要命令的简要总结:

命令说明
net share PrinterName共享本地打印机
rundll32 printui.dll添加网络共享打印机
Set-Printer使用PowerShell共享打印机
Add-Printer使用PowerShell添加网络打印机
netsh advfirewall firewall配置防火墙规则

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kafka客户端核心参数详解
  • ceph简介
  • vue开发遇到的js判断问题
  • 【我的Android进阶之旅】解决CardView四个圆角有白边的问题
  • ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换
  • 怎么把网站设置成HTTPS访问?
  • Android 应用使用theme处理全局焦点框
  • Java Web实战:利用三层架构与Servlet构建登录注册模块
  • 【Echarts】使用多横坐标轴展示近十五天天气预报
  • 连年(年份)
  • 在国内版Office 365中通过PowerShell命令查询指定主题的邮件详解
  • 轻量级模型解读——基于神经网络架构搜索(NAS)系列
  • 开放式耳机有哪些值得推荐?十大口碑最好开放式蓝牙耳机!
  • 科技与艺术完美融合的LED异形创意圆形(饼/盘)显示屏横空出世
  • 开放式蓝牙耳机推荐?五款高评分爆款机型汇总!
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Intervention/image 图片处理扩展包的安装和使用
  • javascript 哈希表
  • JWT究竟是什么呢?
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • SAP云平台里Global Account和Sub Account的关系
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Windows Containers 大冒险: 容器网络
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 回顾2016
  •  一套莫尔斯电报听写、翻译系统
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 通过调用文摘列表API获取文摘
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #微信小程序(布局、渲染层基础知识)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (黑马点评)二、短信登录功能实现
  • (利用IDEA+Maven)定制属于自己的jar包
  • (一)插入排序
  • (转)Mysql的优化设置
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • :中兴通讯为何成功
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Transactional 参数详解
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • []FET-430SIM508 研究日志 11.3.31
  • [000-01-030].Zookeeper学习大纲
  • [012-1].第12节:Mysql的配置文件的使用
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BJDCTF2020]The mystery of ip1
  • [C++内存管理]new,delete,operator new,opreator delete
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [CTO札记]盛大文学公司名称对联
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [HDCTF 2023]Welcome To HDCTF 2023
  • [hdu 3746] Cyclic Nacklace [kmp]