IT运维 | 基于Windows下自动化运维脚本Autoit
2020-04-02 17:22 作者:艾锑无限 浏览量:
从打破鸡蛋这个故事中我们能学到什么
大多数管理者的困境
作为一名专业的教练,我经常会被问到:
教练,我的团队沟通不畅该怎么办?
教练,我的团队执行力不强要如何处理?
教练,我的团队里没有人才可用要如何做呢?
教练,我的团队士气很低怎样激励他们呢?
教练,我的团队经常达不成目标能给些建议吗?
教练,我的团队没有凝聚力有什么好的方法吗?
教练,我的团队没有能量,我要怎么给他们赋能呢?
……
教练与企业管理者的对话:
每当这个时候,我都会问这些企业的负责人,
一个鸡蛋如果从外给予压力,最终会怎什么呢?
他们有的说,会形成碎鸡蛋,也有人说,打破了可以做成炒鸡蛋,还有人说,可以用鸡蛋清敷在脸上做面膜,人类的想象力总是让人出乎意料……
我又问到,
那如果从里面给到动力,最后破壳而出,又会发生什么呢?
所有人的回答几乎都是一样的,一只有着生命力的小鸡.
我又问了一个问题,
我说假如你可以让你的员工具备破壳而出的生命力,你觉得企业会发生什么呢?
他们说,那简直太棒了,每个人都能自发地去做事,而且带着激情和动力,整个企业一定朝气蓬勃,充满斗志,但是,教练,我怎么做才能让他们具备这样的生命力呢?
我说,这是一个好问题,你觉得母鸡是怎么做的呢?
他们说,母鸡每天都会坐在鸡蛋上,哪都不去玩,全身心投入,给到鸡蛋持续的关怀和温度,并且坚持21天,直到小鸡可以从蛋壳中走出来.
那母鸡孵化小鸡这个过程给到你什么启发呢?
他们说,我也需要给到自己团队这样的关怀和支持,用心去孵化他们内在的动力,帮助他们释放出潜能,为他们创造适合他们成长的环境和土壤,以及给予更多的阳光和水,我相信他们一定能由内而外的活出有能量的状态,到那时无论什么困难和挑战都会迎刃而解.
每个人都是自己生命中的天才
他们分享完我就直接鼓掌,我一直都认为,每个人都是自己生命中的天才,而且我也是这样去践行的,无论是多大的企业家,还是最普通的员工都可以活出自己内在的智慧,并且解决生命中的困境.
马斯洛也曾说过类似的话,他说“人并不是被浇铸或塑造成人的,而是依靠自身实现潜能的,环境对人的成长象土壤、阳光和水对于植物一样,只能促进潜能的现实化。”
生命生长需要时间
无论是打破一个鸡蛋,还是一花一世界,万物皆具潜能,只是我们只盯在相上,只盯在结果上,却没有为结果投入更多的时间和耐心,即使我们今天看到的太阳的光芒,也不是今天太阳发出来的.
根据科学家的计算,从太阳发出光到地球需要8分20秒左右的时间,这就意味着,当我们生命中出现了至暗时刻,不用着急,也不用慌张,因为太阳光在路上,给它一点时间,至暗终会迎来光明.
以下文章由IT外包服务商北京艾锑无限科技发展公司整理
IT运维 | 基于Windows下自动化运维脚本Autoit
一、运维需求分析:
IT运维自动化中的操作,比如
服务器安装部署,应急操作,服务切换等偏操作类的
服务器维护工作,归到最底层就是一个个脚本按既定的流程,通过代理(或无代理的SSH方式)远程调用执行。同时,为了提高使用效率提供流程编排,丰富操作可视化,再通常CMDB关联监控,流程审批等工具实现工具间的互联互通,形成管理上的闭环。对于最底层的脚本,目前可供我们选择的有很多,比如常用的python,shell,bat。在实际实践中,windows操作系统下的
自动化运维比linux更麻烦一些。因为在linux下的日常
系统运维操作的就是一些命令的组合,通过python或shell可以比较快的实现。而Windows
系统维护则不同,我们的习惯是鼠标在前端工具上操作,这不是python等脚本语言所不擅长的,如果要用python等脚本实现,需要运维人员在思维进行转变,将前端的界面操作转换转化为后台可运行的脚本语言实现。另外,当遇到一些不支持二次开发的商业软件,上面的转换就会变得无解。比如:
- 每天需要在一个现有的C/S软件上进行开关操作,但这个软件工具又不提供任何接口;
- 要在几十台机器上给病毒软件打个补丁,但软件厂家只提供一个在软件菜单上点击按钮的方式来实现升级;
上面两种情况,有几个特点:
-
windows操作系统上的软件操作;
-
这个软件不提供调用接口或调用接口的成本高;
-
主要是通过鼠标在多个界面上来回切换,键盘输入的操作;
在一些
IT外包公司的工程师使用autoit脚本语言解决这些问题,autoit脚本是一种在WINDOWS下模拟手工操作的脚本语言,可以作为需要在WINDWOS界上进行操作的自动化,比如:
-
运行 Windows 及 DOS 下的可执行文件
-
模拟键击动作(支持大多数的键盘布局)
-
模拟鼠标移动和点击动作。
-
对窗口进行移动、调整大小和其它操作。
-
直接与窗口的“控件“交互(设置/获取 文字、移动、关闭,等等)
-
配合剪贴板进行剪切/粘贴文本操作
-
另外,它还附有大量获取数据的宏
二、语言概况:
1、一些基本的语法:
语法有很多,具体可以到网上下载一个帮助文档,下面只摘常用的几点:
1)条件if … then ….else….endif
If $var > 10 Then
MsgBox(0, "示例", $var & " 果真大于 10!^_^")
Else
MsgBox(0, "示例", $var & " 居然小于 10!?-_-!")
EndIf
2)条件select
$var = 30
Select
Case $var > 1 AND $var <= 10
MsgBox(0, "示例", "$var 大于 1")
Case $var > 10 AND $var <= 20
MsgBox(0, "示例", "$var 大于 10")
Case $var > 20 AND $var <= 30
MsgBox(0, "示例", "$var 大于 20")
Case $var > 30 AND $var <= 40
MsgBox(0, "示例", "$var 大于 30")
Case $var > 40
MsgBox(0, "示例", "$var 大于 40")
EndSelect
3)FOR
For $i = 5 to 1 Step -1
MsgBox(0, "倒数", $i)
Next
MsgBox(0,"", "循环结束")
4)While...WEnd
While $i<3
MsgBox(0,"example",$i)
$i = $i + 1
WEnd
MsgBox(0,"", "循环结束")
5)Do...Until
Do
MsgBox(0, "目前变量 $i 的值是: ", $i)
$i = $i + 1
Until $i = 10
6) 函数
$val = 10
For $i = 1 To 10
$doubled = MyDouble($val)
MsgBox(0, "", $val & " 的两倍是 " & $doubled)
$val = $doubled
Next
Exit
Func MyDouble($value)
$value = $value * 2
Return $value
EndFunc
7) 注释
单行: ;
多行:
#comments-start
...
...
#comments-end
注:缩写代替:#cs 和 #ce。
8) 嵌入文件
#include
9)参数:
AutoIt3.exe myscript.au3 参数1 "这是一个字符串型参数"
$CmdLine[0] 等价于... 2
$CmdLine[1] 等价于... 参数1
$CmdLine[2] 等价于...这是一个字符串型参数
@ScriptName 等价于... myscript.au3
$CmdLineRaw,它保存着完整的未被拆分的命令行语句,等价于...myscript.au3 参数1 "这是一个字符串型参数"
2、常用的一些方法
1)SEND(对指定窗口发送键盘命令时会用到)
'^':表示告知 AutoIt 要发送一个 CONTROL 键击动作,因此语句 Send("^!a") 的意思是发送按键 "CTRL+ALT+a"。以下是一些常用的键盘按键:
Send 命令(无标志参数) |
键击结果 |
{!} |
! |
{#} |
# |
{+} |
+ |
{^} |
^ |
{{} |
{ |
{}} |
} |
{SPACE} |
空格 |
{ENTER} |
主键盘区的 回车键 |
{ALT} |
ALT |
{BACKSPACE} 或 {BS} |
退格 |
{DELETE} 或 {DEL} |
删除(DELETE) |
{UP} |
向上箭头 |
{DOWN} |
向下箭头 |
{LEFT} |
向左箭头 |
{RIGHT} |
向右箭头 |
{HOME} |
HOME |
{END} |
END |
{ESCAPE} 或 {ESC} |
ESC键 |
{INSERT} 或 {INS} |
INS(Insert) |
{PGUP} |
PageUp |
{PGDN} |
PageDown |
{F1} - {F12} |
功能键 |
{TAB} |
TAB |
{PRINTSCREEN} |
Print Screen key |
{LWIN} |
左徽标键 |
{RWIN} |
右徽标键 |
{NUMLOCK on} |
NUMLOCK (on/off/toggle)(开/关/切换) |
{CAPSLOCK off} |
CAPSLOCK (on/off/toggle)(开/关/切换) |
{SCROLLLOCK toggle} |
SCROLLLOCK (on/off/toggle)(开/关/切换) |
{CTRLBREAK} |
Ctrl+Break |
{PAUSE} |
PAUSE |
{NUMPAD0} - {NUMPAD9} |
数字键盘上的 数字键 |
{NUMPADMULT} |
数字键盘上的 乘号 |
{NUMPADADD} |
数字键盘上的 加号 |
{NUMPADSUB} |
数字键盘上的 减号 |
{NUMPADDIV} |
数字键盘上的 除号 |
{NUMPADDOT} |
数字键盘上的 点号 |
{NUMPADENTER} |
数字键盘上的 回车键 |
{APPSKEY} |
Windows 应用程序键 |
{LALT} |
左 ALT 键 |
{RALT} |
右 ALT 键 |
{LCTRL} |
左 CTRL 键 |
{RCTRL} |
右 CTRL 键 |
{LSHIFT} |
左 Shift 键 |
{RSHIFT} |
右 Shift 键 |
{SLEEP} |
系统休眠(SLEEP)键 |
{ALTDOWN} |
按住 ALT 键直到发送 {ALTUP} 为止 |
{SHIFTDOWN} |
按住 SHIFT 键直到发送 {SHIFTUP} 为止 |
{CTRLDOWN} |
按住 CTRL 键直到发送 {CTRLUP} 为止 |
{LWINDOWN} |
按住左徽标键直到发送 {LWINUP} 为止 |
{RWINDOWN} |
按住右徽标键直到发送 {RWINUP} 为止 |
{ASC nnnn} |
发送 ALT+nnnn 组合键 |
2、鼠标MouseClick
; 在当前位置执行一次双击
MouseClick("left")
MouseClick("left")
; 在位置 0,500 双击
MouseClick("left", 0, 500, 2)
3、RUN
运行外部程序。
Run ( "文件名" [, "工作目录" [, 标志]] )
Run("Notepad.exe", "", @SW_MAXIMIZE)
4、ProcessClose
结束某个进程。
ProcessClose ( "进程名" )
ProcessClose("notepad.exe")
; 返回记事本程序的 PID,若未发现该进程则返回值为 0。
$PID = ProcessExists("notepad.exe")
If $PID Then ProcessClose($PID)
ProcessExists
注:ProcessExists ( "进程名" )的用法:
进程名是指可执行文件的名称(无需给出完整路径),例如:"notepad.exe" 或 "winword.exe"
PID 是标识进程的唯一的数值。
为使 ProcessExists 函数能在 Windows NT 4.0 下工作,系统还需要一个 DLL 文件(PSAPI.DLL,已包含在 AutoIt 的安装目录下)。
每隔 250 毫秒左右进程将被检测一次。
示例
If ProcessExists("notepad.exe") Then
MsgBox(0, "示例", "记事本运行中。")
EndIf
5、WinWaitActive
暂停脚本的执行直至指定窗口被激活(成为可活动状态)为止。
WinWaitActive ( "窗口标题", ["窗口文本"], [超时时间] )
参数
窗口标题 |
目标窗口标题。 |
窗口文本 |
[可选参数] 目标窗口文本。 |
超时时间 |
[可选参数] 以秒为单位。 |
返回值
成功: |
返回值为1。 |
失败: |
返回值为0,说明已超时。 |
;等待窗口 "无标题" 出现并激活
WinWaitActive("无标题")
;同上,但指定了等待时间为 5 秒
WinWaitActive("无标题", "", 5)
6、MsgBox
通常用在调试当中
MsgBox(0, "标题", "内容")
上面几个命令用上,就能做一些简单的操作了,实际使用过程中,如果遇到一些操作可以查一下帮助文档。下面这些是我作了一些汇总的函数,可以找到了函数再去找帮助文档比较快
三、软件安装:
autoit3安装后会有以下几个子工具:
主要看这个工具:
AutoIt3.exe |
AutoIt 的主程序,脚本文件 仅需 它即可得以解释运行! |
AU3Info.exe |
AutoIt窗口信息工具,用来获取WINDOWS工具的窗口的信息,比如: |
AutoIt.chm |
帮助文件。 |
script |
编辑工具 |
AU3Info.exe这个工具很重要,它能获取:
-
窗口标题(Window titles)
-
窗口上的文本文字(Text)(包括可见部分和不可见部分)
-
窗口的大小和坐标位置
-
状态栏的内容
-
鼠标指针的坐标位置
-
鼠标指针所指象素的颜色值
-
鼠标经过的 控件(Control)的相关信息