IT運維 | 基于Windows下自動化運維腳本Autoit
2020-04-02 17:22 作者:艾銻無限 瀏覽量:
從打破雞蛋這個故事中我們能學(xué)到什么
大多數(shù)管理者的困境
作為一名專業(yè)的教練,我經(jīng)常會被問到:
教練,我的團隊溝通不暢該怎么辦?
教練,我的團隊執(zhí)行力不強要如何處理?
教練,我的團隊里沒有人才可用要如何做呢?
教練,我的團隊士氣很低怎樣激勵他們呢?
教練,我的團隊經(jīng)常達不成目標(biāo)能給些建議嗎?
教練,我的團隊沒有凝聚力有什么好的方法嗎?
教練,我的團隊沒有能量,我要怎么給他們賦能呢?
……
教練與企業(yè)管理者的對話:
每當(dāng)這個時候,我都會問這些企業(yè)的負責(zé)人,
一個雞蛋如果從外給予壓力,最終會怎什么呢?
他們有的說,會形成碎雞蛋,也有人說,打破了可以做成炒雞蛋,還有人說,可以用雞蛋清敷在臉上做面膜,人類的想象力總是讓人出乎意料……
我又問到,
那如果從里面給到動力,最后破殼而出,又會發(fā)生什么呢?
所有人的回答幾乎都是一樣的,一只有著生命力的小雞.
我又問了一個問題,
我說假如你可以讓你的員工具備破殼而出的生命力,你覺得企業(yè)會發(fā)生什么呢?
他們說,那簡直太棒了,每個人都能自發(fā)地去做事,而且?guī)еで楹蛣恿Γ麄€企業(yè)一定朝氣蓬勃,充滿斗志,但是,教練,我怎么做才能讓他們具備這樣的生命力呢?
我說,這是一個好問題,你覺得母雞是怎么做的呢?
他們說,母雞每天都會坐在雞蛋上,哪都不去玩,全身心投入,給到雞蛋持續(xù)的關(guān)懷和溫度,并且堅持21天,直到小雞可以從蛋殼中走出來.
那母雞孵化小雞這個過程給到你什么啟發(fā)呢?
他們說,我也需要給到自己團隊這樣的關(guān)懷和支持,用心去孵化他們內(nèi)在的動力,幫助他們釋放出潛能,為他們創(chuàng)造適合他們成長的環(huán)境和土壤,以及給予更多的陽光和水,我相信他們一定能由內(nèi)而外的活出有能量的狀態(tài),到那時無論什么困難和挑戰(zhàn)都會迎刃而解.
每個人都是自己生命中的天才
他們分享完我就直接鼓掌,我一直都認(rèn)為,每個人都是自己生命中的天才,而且我也是這樣去踐行的,無論是多大的企業(yè)家,還是最普通的員工都可以活出自己內(nèi)在的智慧,并且解決生命中的困境.
馬斯洛也曾說過類似的話,他說“人并不是被澆鑄或塑造成人的,而是依靠自身實現(xiàn)潛能的,環(huán)境對人的成長象土壤、陽光和水對于植物一樣,只能促進潛能的現(xiàn)實化。”
生命生長需要時間
無論是打破一個雞蛋,還是一花一世界,萬物皆具潛能,只是我們只盯在相上,只盯在結(jié)果上,卻沒有為結(jié)果投入更多的時間和耐心,即使我們今天看到的太陽的光芒,也不是今天太陽發(fā)出來的.
根據(jù)科學(xué)家的計算,從太陽發(fā)出光到地球需要8分20秒左右的時間,這就意味著,當(dāng)我們生命中出現(xiàn)了至暗時刻,不用著急,也不用慌張,因為太陽光在路上,給它一點時間,至暗終會迎來光明.
以下文章由IT外包服務(wù)商北京艾銻無限科技發(fā)展公司整理
IT運維 | 基于Windows下自動化運維腳本Autoit
一、運維需求分析:
IT運維自動化中的操作,比如
服務(wù)器安裝部署,應(yīng)急操作,服務(wù)切換等偏操作類的
服務(wù)器維護工作,歸到最底層就是一個個腳本按既定的流程,通過代理(或無代理的SSH方式)遠程調(diào)用執(zhí)行。同時,為了提高使用效率提供流程編排,豐富操作可視化,再通常CMDB關(guān)聯(lián)監(jiān)控,流程審批等工具實現(xiàn)工具間的互聯(lián)互通,形成管理上的閉環(huán)。對于最底層的腳本,目前可供我們選擇的有很多,比如常用的python,shell,bat。在實際實踐中,windows操作系統(tǒng)下的
自動化運維比linux更麻煩一些。因為在linux下的日常
系統(tǒng)運維操作的就是一些命令的組合,通過python或shell可以比較快的實現(xiàn)。而Windows
系統(tǒng)維護則不同,我們的習(xí)慣是鼠標(biāo)在前端工具上操作,這不是python等腳本語言所不擅長的,如果要用python等腳本實現(xiàn),需要運維人員在思維進行轉(zhuǎn)變,將前端的界面操作轉(zhuǎn)換轉(zhuǎn)化為后臺可運行的腳本語言實現(xiàn)。另外,當(dāng)遇到一些不支持二次開發(fā)的商業(yè)軟件,上面的轉(zhuǎn)換就會變得無解。比如:
- 每天需要在一個現(xiàn)有的C/S軟件上進行開關(guān)操作,但這個軟件工具又不提供任何接口;
- 要在幾十臺機器上給病毒軟件打個補丁,但軟件廠家只提供一個在軟件菜單上點擊按鈕的方式來實現(xiàn)升級;
上面兩種情況,有幾個特點:
-
windows操作系統(tǒng)上的軟件操作;
-
這個軟件不提供調(diào)用接口或調(diào)用接口的成本高;
-
主要是通過鼠標(biāo)在多個界面上來回切換,鍵盤輸入的操作;
在一些
IT外包公司的工程師使用autoit腳本語言解決這些問題,autoit腳本是一種在WINDOWS下模擬手工操作的腳本語言,可以作為需要在WINDWOS界上進行操作的自動化,比如:
-
運行 Windows 及 DOS 下的可執(zhí)行文件
-
模擬鍵擊動作(支持大多數(shù)的鍵盤布局)
-
模擬鼠標(biāo)移動和點擊動作。
-
對窗口進行移動、調(diào)整大小和其它操作。
-
直接與窗口的“控件“交互(設(shè)置/獲取 文字、移動、關(guān)閉,等等)
-
配合剪貼板進行剪切/粘貼文本操作
-
另外,它還附有大量獲取數(shù)據(jù)的宏
二、語言概況:
1、一些基本的語法:
語法有很多,具體可以到網(wǎng)上下載一個幫助文檔,下面只摘常用的幾點:
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, "倒數(shù)", $i)
Next
MsgBox(0,"", "循環(huán)結(jié)束")
4)While...WEnd
While $i<3
MsgBox(0,"example",$i)
$i = $i + 1
WEnd
MsgBox(0,"", "循環(huán)結(jié)束")
5)Do...Until
Do
MsgBox(0, "目前變量 $i 的值是: ", $i)
$i = $i + 1
Until $i = 10
6) 函數(shù)
$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)參數(shù):
AutoIt3.exe myscript.au3 參數(shù)1 "這是一個字符串型參數(shù)"
$CmdLine[0] 等價于... 2
$CmdLine[1] 等價于... 參數(shù)1
$CmdLine[2] 等價于...這是一個字符串型參數(shù)
@ScriptName 等價于... myscript.au3
$CmdLineRaw,它保存著完整的未被拆分的命令行語句,等價于...myscript.au3 參數(shù)1 "這是一個字符串型參數(shù)"
2、常用的一些方法
1)SEND(對指定窗口發(fā)送鍵盤命令時會用到)
'^':表示告知 AutoIt 要發(fā)送一個 CONTROL 鍵擊動作,因此語句 Send("^!a") 的意思是發(fā)送按鍵 "CTRL+ALT+a"。以下是一些常用的鍵盤按鍵:
Send 命令(無標(biāo)志參數(shù)) |
鍵擊結(jié)果 |
{!} |
! |
{#} |
# |
{+} |
+ |
{^} |
^ |
{{} |
{ |
{}} |
} |
{SPACE} |
空格 |
{ENTER} |
主鍵盤區(qū)的 回車鍵 |
{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} |
左徽標(biāo)鍵 |
{RWIN} |
右徽標(biāo)鍵 |
{NUMLOCK on} |
NUMLOCK (on/off/toggle)(開/關(guān)/切換) |
{CAPSLOCK off} |
CAPSLOCK (on/off/toggle)(開/關(guān)/切換) |
{SCROLLLOCK toggle} |
SCROLLLOCK (on/off/toggle)(開/關(guān)/切換) |
{CTRLBREAK} |
Ctrl+Break |
{PAUSE} |
PAUSE |
{NUMPAD0} - {NUMPAD9} |
數(shù)字鍵盤上的 數(shù)字鍵 |
{NUMPADMULT} |
數(shù)字鍵盤上的 乘號 |
{NUMPADADD} |
數(shù)字鍵盤上的 加號 |
{NUMPADSUB} |
數(shù)字鍵盤上的 減號 |
{NUMPADDIV} |
數(shù)字鍵盤上的 除號 |
{NUMPADDOT} |
數(shù)字鍵盤上的 點號 |
{NUMPADENTER} |
數(shù)字鍵盤上的 回車鍵 |
{APPSKEY} |
Windows 應(yīng)用程序鍵 |
{LALT} |
左 ALT 鍵 |
{RALT} |
右 ALT 鍵 |
{LCTRL} |
左 CTRL 鍵 |
{RCTRL} |
右 CTRL 鍵 |
{LSHIFT} |
左 Shift 鍵 |
{RSHIFT} |
右 Shift 鍵 |
{SLEEP} |
系統(tǒng)休眠(SLEEP)鍵 |
{ALTDOWN} |
按住 ALT 鍵直到發(fā)送 {ALTUP} 為止 |
{SHIFTDOWN} |
按住 SHIFT 鍵直到發(fā)送 {SHIFTUP} 為止 |
{CTRLDOWN} |
按住 CTRL 鍵直到發(fā)送 {CTRLUP} 為止 |
{LWINDOWN} |
按住左徽標(biāo)鍵直到發(fā)送 {LWINUP} 為止 |
{RWINDOWN} |
按住右徽標(biāo)鍵直到發(fā)送 {RWINUP} 為止 |
{ASC nnnn} |
發(fā)送 ALT+nnnn 組合鍵 |
2、鼠標(biāo)MouseClick
; 在當(dāng)前位置執(zhí)行一次雙擊
MouseClick("left")
MouseClick("left")
; 在位置 0,500 雙擊
MouseClick("left", 0, 500, 2)
3、RUN
運行外部程序。
Run ( "文件名" [, "工作目錄" [, 標(biāo)志]] )
Run("Notepad.exe", "", @SW_MAXIMIZE)
4、ProcessClose
結(jié)束某個進程。
ProcessClose ( "進程名" )
ProcessClose("notepad.exe")
; 返回記事本程序的 PID,若未發(fā)現(xiàn)該進程則返回值為 0。
$PID = ProcessExists("notepad.exe")
If $PID Then ProcessClose($PID)
ProcessExists
注:ProcessExists ( "進程名" )的用法:
進程名是指可執(zhí)行文件的名稱(無需給出完整路徑),例如:"notepad.exe" 或 "winword.exe"
PID 是標(biāo)識進程的唯一的數(shù)值。
為使 ProcessExists 函數(shù)能在 Windows NT 4.0 下工作,系統(tǒng)還需要一個 DLL 文件(PSAPI.DLL,已包含在 AutoIt 的安裝目錄下)。
每隔 250 毫秒左右進程將被檢測一次。
示例
If ProcessExists("notepad.exe") Then
MsgBox(0, "示例", "記事本運行中。")
EndIf
5、WinWaitActive
暫停腳本的執(zhí)行直至指定窗口被激活(成為可活動狀態(tài))為止。
WinWaitActive ( "窗口標(biāo)題", ["窗口文本"], [超時時間] )
參數(shù)
窗口標(biāo)題 |
目標(biāo)窗口標(biāo)題。 |
窗口文本 |
[可選參數(shù)] 目標(biāo)窗口文本。 |
超時時間 |
[可選參數(shù)] 以秒為單位。 |
返回值
成功: |
返回值為1。 |
失敗: |
返回值為0,說明已超時。 |
;等待窗口 "無標(biāo)題" 出現(xiàn)并激活
WinWaitActive("無標(biāo)題")
;同上,但指定了等待時間為 5 秒
WinWaitActive("無標(biāo)題", "", 5)
6、MsgBox
通常用在調(diào)試當(dāng)中
MsgBox(0, "標(biāo)題", "內(nèi)容")
上面幾個命令用上,就能做一些簡單的操作了,實際使用過程中,如果遇到一些操作可以查一下幫助文檔。下面這些是我作了一些匯總的函數(shù),可以找到了函數(shù)再去找?guī)椭臋n比較快
三、軟件安裝:
autoit3安裝后會有以下幾個子工具:
主要看這個工具:
AutoIt3.exe |
AutoIt 的主程序,腳本文件 僅需 它即可得以解釋運行! |
AU3Info.exe |
AutoIt窗口信息工具,用來獲取WINDOWS工具的窗口的信息,比如: |
AutoIt.chm |
幫助文件。 |
script |
編輯工具 |
AU3Info.exe這個工具很重要,它能獲取:
-
窗口標(biāo)題(Window titles)
-
窗口上的文本文字(Text)(包括可見部分和不可見部分)
-
窗口的大小和坐標(biāo)位置
-
狀態(tài)欄的內(nèi)容
-
鼠標(biāo)指針的坐標(biāo)位置
-
鼠標(biāo)指針?biāo)赶笏氐念伾?/li>
-
鼠標(biāo)經(jīng)過的 控件(Control)的相關(guān)信息