linux環(huán)境下通過(guò)WMI對(duì)windows進(jìn)行監(jiān)控和管理

目的

需要在linux環(huán)境下對(duì)客戶windows環(huán)境安裝agent

環(huán)境準(zhǔn)備

安裝

安裝包下載WMI client (WMIC) for Linux

測(cè)試

1.通過(guò)wmic命令遠(yuǎn)程查詢信息

# 查看計(jì)算機(jī)信息
wmic -U administrator%kk123456 //192.168.1.108 "select * from Win32_ComputerSystem"

# 查看操作系統(tǒng)信息
wmic -U administrator%kk123456 //192.168.1.108 "Select * from Win32_OperatingSystem"

# 查看進(jìn)程信息
wmic -U administrator%kk123456 //192.168.1.108 "Select * from Win32_Process Where CommandLine like '%explorer%'"

# 查看進(jìn)程監(jiān)控信息
wmic -U administrator%kk123456 //192.168.1.108 "Select PrivateBytes from Win32_PerfFormattedData_PerfProc_Process"

2.通過(guò)winexe命令遠(yuǎn)程執(zhí)行命令酱虎、

winexe -U administrator%kk123456 //192.168.1.108 "cmd /c ipconfig"

功能實(shí)現(xiàn)

基本原理

1.通過(guò)winexe遠(yuǎn)程調(diào)用echo命令锹淌,在windows機(jī)器上創(chuàng)建vbs腳本
vbs腳本中遠(yuǎn)程下載安裝包圃阳、執(zhí)行安裝腳本
2.通過(guò)winexe遠(yuǎn)程調(diào)用wscript執(zhí)行vbs腳本

代碼實(shí)現(xiàn)

1.winexe_wrapper.py文件

代碼功能: 調(diào)用winexe命令

#encoding: utf-8

import os
import subprocess
import logging
import traceback


logger = logging.getLogger(__name__)


def _command(args):                                                             #執(zhí)行系統(tǒng)命令
    _process = subprocess.Popen(args, \
                                stdin=subprocess.PIPE, \
                                stdout=subprocess.PIPE, \
                                stderr=subprocess.PIPE, \
                                shell=True)
    _stdout, _stderr = _process.communicate()
    _returncode = _process.returncode
    return _returncode, _stdout, _stderr


class WinexeWrapper(object):

    def __init__(self, host, username, password):
        self.username = username
        self.password = password
        self.host = host
        self.bin = '/bin/winexe'

    def _make_credential_args(self):
        arguments = []
        userpass = '--user="{username}%{password}"'.format(
            username=self.username,
            password=self.password,
        )
        arguments.append(userpass)
        hostaddr = '"http://{host}"'.format(host=self.host)
        arguments.append(hostaddr)
        return arguments

    def execute(self, cmds):
        credentials = self._make_credential_args()                              #拼接命令行中用戶名密碼參數(shù)
        if type(cmds) != type([]):
            cmds = [cmds]
        arguments = [self.bin] + credentials + cmds                             #拼接命令行參數(shù)
        return _command(' '.join(arguments))                                    #執(zhí)行命令


def winexe(host, username, password, cmd):
    if os.name == 'nt':
        import wmi
        try:
            client = wmi.WMI(computer=host, user=username, password=password)
            return client.Win32_Process.Create(CommandLine=cmd)[1]
        except wmi.x_access_denied as e:
            logger.error(e)
            logger.exception(traceback.format_exc())
        except wmi.x_wmi as e:
            logger.error(e)
            logger.exception(traceback.format_exc())
        except BaseException as e:
            logger.error(e)
            logger.exception(traceback.format_exc())
        return -1
    else:
        client = WinexeWrapper(host=host, username=username, password=password)
        return client.execute("'{0}'".format(cmd))[0]


if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    host = '192.168.1.108'
    username = 'administrator'
    password = 'kk123456'
    print winexe(host, username, password, 'cmd /c ipconfig')
  1. install.py腳本

代碼功能: 拼接執(zhí)行創(chuàng)建vbs腳本拓劝,調(diào)用winexe接口遠(yuǎn)程執(zhí)行

#encoding: utf-8
from __future__ import with_statement
from winexe_wrapper import WinexeWrapper

if __name__ == '__main__':
    host = '192.168.1.108'                                                      #win機(jī)器地址
    username = 'administrator'                                                  #win機(jī)器用戶名
    password = 'kk123456'                                                       #win機(jī)器密碼
    client = WinexeWrapper(host=host, username=username, password=password)     #創(chuàng)建WinexeWrapper對(duì)象

    vbs_file = r'c:\install'                                                    #vbs文件
    download_file_url = r'http://192.168.1.101/package.exe'                     #安裝包下載位置
    install_file = r'c:\install.exe'                                            #安裝包下載后保存文件
    log_file = r'c:\install.log'                                                #安裝日志輸出

    contents = [
        'Set Post = CreateObject("Msxml2.ServerXMLHTTP")',                      #創(chuàng)建vbs中HTTP(S)請(qǐng)求對(duì)象
        'Set Shell = CreateObject("Wscript.Shell")',                            #創(chuàng)建vbs中命令行對(duì)象
        'Set FSO = CreateObject("Scripting.FileSystemObject")',                 #創(chuàng)建vbs中文件系統(tǒng)對(duì)象
        'Post.setOption 2, 13056',                                              #設(shè)置HTTPS請(qǐng)求不檢查服務(wù)器端證書
        'Post.Open "GET","{0}",0'.format(download_file_url),                    #請(qǐng)求下載URL
        'Post.Send()',                                                          #發(fā)送HTTP請(qǐng)求
        'Set aGet = CreateObject("ADODB.Stream")',                              #創(chuàng)建vbs中流對(duì)象
        'aGet.Mode = 3',                                                        #設(shè)置流對(duì)象模式(讀黑竞、寫)
        'aGet.Type = 1',                                                        #設(shè)置流對(duì)象類型(二進(jìn)制類型)
        'aGet.Open()',                                                          #打開流對(duì)象
        'aGet.Write(Post.responseBody)',                                        #將HTTP(S)請(qǐng)求結(jié)果寫入流對(duì)象
        'aGet.SaveToFile "{0}",2'.format(install_file),                         #保存流到安裝包
        'wscript.sleep 5000',                                                   #休眠5s
        'Shell.Run "{0}", 0, True'.format(install_file),                        #同步執(zhí)行安裝腳本
        'wscript.sleep 1000',
        'FSO.DeleteFile("{0}"), True'.format(install_file),                     #刪除下載的安裝包
        'wscript.sleep 1000',
        'FSO.DeleteFile("{0}"), True'.format(vbs_file),                         #刪除vbs腳本
    ]

    cmds = []

    cmds.append("echo Rem client install > {0}".format(vbs_file))               #重寫vbs文件,第一行寫入注釋

    for content in contents:
        cmds.append('echo {0} >> "{1}"'.format(content, vbs_file))              #追加方式寫入vbs文件

    cmds.append('wscript.exe /E:vbs "{0}" > {1}'.format(vbs_file, log_file))    #執(zhí)行vbs腳本

    print client.execute("'cmd /c {0}'".format(' & '.join(cmds)))               #調(diào)用winexe命令

后續(xù)功能

1.對(duì)winc進(jìn)行封裝, 通過(guò)查詢執(zhí)行進(jìn)程是否存在判斷是否安裝成功
2.并行對(duì)不同機(jī)器進(jìn)行安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末演训,一起剝皮案震驚了整個(gè)濱河市允悦,隨后出現(xiàn)的幾起案子衅疙,更是在濱河造成了極大的恐慌莲趣,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饱溢,死亡現(xiàn)場(chǎng)離奇詭異喧伞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绩郎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門潘鲫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肋杖,你說(shuō)我怎么就攤上這事溉仑。” “怎么了状植?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵浊竟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我津畸,道長(zhǎng)振定,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任肉拓,我火速辦了婚禮后频,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帝簇。我一直安慰自己徘郭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布丧肴。 她就那樣靜靜地躺著残揉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芋浮。 梳的紋絲不亂的頭發(fā)上抱环,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音纸巷,去河邊找鬼镇草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瘤旨,可吹牛的內(nèi)容都是我干的梯啤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼存哲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼因宇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起祟偷,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤察滑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后修肠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贺辰,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年嵌施,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饲化。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰管,死狀恐怖滓侍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牲芋,我是刑警寧澤撩笆,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站缸浦,受9級(jí)特大地震影響夕冲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裂逐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一歹鱼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卜高,春花似錦弥姻、人聲如沸南片。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疼进。三九已至,卻和暖如春秧廉,著一層夾襖步出監(jiān)牢的瞬間伞广,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工疼电, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚼锄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓蔽豺,卻偏偏與公主長(zhǎng)得像区丑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茫虽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容