惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
V
V2EX
B
Blog RSS Feed
有赞技术团队
有赞技术团队
博客园 - Franky
美团技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
L
LangChain Blog
GbyAI
GbyAI
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
D
Docker
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
博客园_首页
A
About on SuperTechFans
J
Java Code Geeks
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
G
Google Developers Blog
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
F
Full Disclosure
Jina AI
Jina AI
H
Help Net Security

AutoIT – Ed_'s Blog

暂无文章

[记录] 使用AutoIT脚本自动添加远程打印机并配置验证账户 – yywr's Blog
yywr · 2019-03-30 · via AutoIT – Ed_'s Blog

Skip to content

公司使用打印系统记录每一个部门的打印量并计算费用(租赁打印机),域内计算机很好办,使用登陆账户就好了,但是非域内计算机就麻烦了,整个配置步骤过多,对来宾打印用户并不友好,虽然用的可能不多,但是体验真不好,所以想到了用AutoIT脚本的方式简化安装配置过程。

脚本写完后在理想的环境下安装一般没有太大问题,但存在一定的几率失败,因为没有太抠细节,也没怎么做错误验证,有些操作脚本没法做,或者做起来太麻烦,投入产出比不合实际。由于是第一次使用AutoIT写脚本,这里记录一些关键点用来回顾。

脚本流程如下:

  1. 检测本地系统语言和版本
  2. 检测与服务器之间的连接
  3. 建立本地与打印服务器的连接(服务器需验证)
  4. 添加远程打印机到本地
  5. 打开打印机设置选项
  6. 使用AutoIT窗口管理模拟人为操作配置打印账户
  7. 断开与服务器的连接

把这些操作换成手工操作,步骤超过15步,而且涉及到两个账户密码,让终端用户来设置可不会那么顺利

Windwos系统本身特性对脚本的影响

  • 系统语言不同,窗口的标题自然不同,AutoIT会用到窗口的标题进行窗口识别,需要设置变量进行处理,同时需要提供不同语言的GUI界面
  • 系统版本不同,系统内置应用的标题也会不同,同样需要单独设置。比如PowerShell窗口,用绝对路径启动,在Win7下窗口标题显示绝对路径,但在Win10下显示”Windows PowerShell”

AutoIT内置了宏来获取系统信息,比如语言 @OSLang, 系统版本@OSVersion

使用Windows系统本身的功能

对AutoIT并不算熟悉,只是借这次机会终于浏览了一遍官方的手册,不在乎手段,只看结果,用了本来就会的一点Windows技能

  • 建立带验证的连接,第一个想到的就是 IPC$ 通道 net use \\PrinterServer\IPC$ /user:Username Password ,挻好用的
  • 断开连接:net use /delete \\PrinterServer\IPC$
  • 连接安装远程打印机,一开始用的是printui,但是存一些问题,尤其是会有额外的安装窗口弹出,对AutoIT来说,每多一个窗口就多一道复杂性,所以找来了Powershell命令,拿过来用了,也挻好用。。。
    • 添加打印机:(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection(“\\Printerserver\Printer”)
    • 删除打印机:(New-Object -ComObject WScript.Network).RemovePrinterConnection(“\\Printerserver\Printer”)
  • 打开打印机首选项,还是用到了PrintUI,运行 rundll32 printui.dll,PrintUIEntry /e /n ” \\Printerserver\Printer”

使用AutoIT创建GUI获取打印账户密码还是简单的,只要有编程基础就不会出什么问题。按需查阅官方文档就够了,问题出现在窗口管理这里。

  • 首先是窗口是否按预期的那样出现,用WinWait(),指定超时时间,我没有做超时后没出现该怎么做,只是把超时调的长点,不想做…
  • 必须用到WinWAitClose(), 操作窗口是需要时间的,必需等操作完了生效了才能进行下一步(这里的实例指当前操作窗口被关闭),尤其是运行慢的电脑,超时调长点没错,这点很重要,因为是用脚本操纵其它程序窗口,需要等待,除非用API获取被操作程序的状态😂
  • 窗口控件的ID是会“变“的,准确来说是在我这个实例中,使用PrintUI打开的打印首选项和手工点开的打印首选项窗口里面的控件ID是不一样的,可能因为获取到的是远程机器上的选项而不是本地的
  • 在最终版前,不要隐藏窗口,出了问题调试起来麻烦

其它要记的

AutoIT中怎么运行Powershell命令

  • $PSEXE = “C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -command “
  • $PSCmd = ’ (New-Object -ComObject WScript.Network).RemovePrinterConnection(“\\Printerserver\Printer”) ‘
  • Run( $PSEXE & $PSCmd)

字符串中有引号怎么处理

可以像上面一样,内部用双引号,外部用单引号,事实上我反过来也是可以的,尤其注意的是在用 & 连接变量的时候别搞错了,在什么地方需要放引号弄清楚

参考&相关链接

  • PrintUIEntry: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/rundll32-printui
  • Powershell 使用打印机:https://docs.microsoft.com/zh-cn/powershell/scripting/samples/working-with-printers?view=powershell-6
  • AutoIT中文手册:https://www.jb51.net/shouce/autoit3/
  • AutoIT官网:https://www.autoitscript.com/site/autoit/
  • GuiHub: https://github.com/yywr/InstallGuestPrintByAutoitscript