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)的相關信息