手机
当前位置:查字典教程网 >脚本专栏 >vbs >VBS 强制关闭Symantec Endpoint Protection的代码
VBS 强制关闭Symantec Endpoint Protection的代码
摘要:使用这个脚本,可以随时让它歇下来。当然也可以让它继续工作。前提是,你必须是本机管理员。这个脚本使用一各很过时的终止程序方法:ntsd.exe...

使用这个脚本,可以随时让它歇下来。当然也可以让它继续工作。

前提是,你必须是本机管理员。

这个脚本使用一各很过时的终止程序方法:ntsd.exe -c q -p ProcessID。所以以前有过一个bat版,之所以用VBS是因为效率高一点,而且没有太多的黑色窗口。

主要思想是:循环终止程序+停止服务

代码如下:

复制代码 代码如下:

'On Error Resume Next

' 检查操作系统版本

Call CheckOS()

Call MeEncoder()

' 程序初始化,取得参数

If WScript.Arguments.Count = 0 Then

Call main()

WScript.Quit

Else

Dim strArg, arrTmp

For Each strArg In WScript.Arguments

arrTmp = Split(strArg, "=")

If UBound( arrTmp ) = 1 Then

Select Case LCase( arrTmp(0) )

Case "sep"

Call sep( arrTmp(1) )

Case "process_stop"

Call process_stop( arrTmp(1) )

Case "process_start"

Call process_start( arrTmp(1) )

Case "server_stop"

Call server_stop( arrTmp(1) )

Case "server_start"

Call server_start( arrTmp(1) )

Case "show_tip"

Call show_tip( arrTmp(1) )

Case Else

WScript.Quit

End Select

End If

Next

WScript.Quit

End If

' 主程序

Sub main()

If (IsRun("Rtvscan.exe", "") = 1) Or (IsRun("ccSvcHst.exe", "") = 1) Or (IsRun("SMC.exe", "") = 1) Then

Call SEP_STOP()

Else

Call SEP_START()

End If

End Sub

' 带参数运行

Sub sep( strMode )

Select Case LCase(strMode)

Case "stop"

Call SEP_STOP()

Case "start"

Call SEP_START()

End Select

End Sub

' 停止SEP

Sub SEP_STOP()

Set wso = CreateObject("WScript.Shell")

'kill other app

Call process_clear()

'kill sep

wso.Run """" & WScript.ScriptFullName & """ server_stop=""SENS""", 0, True

'Get Me PID

Set pid = Getobject("winmgmts:.").InstancesOf("Win32_Process")

For Each id In pid

If LCase(id.name) = LCase("Wscript.exe") Then

mepid=id.ProcessID

End If

Next

'tips

wso.Run """" & WScript.ScriptFullName & """ show_tip=stop", 0, False

'stop service

wso.Run """" & WScript.ScriptFullName & """ server_stop=""SENS""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_stop=""Symantec AntiVirus""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_stop=""ccEvtMgr""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_stop=""SmcService""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_stop=""SNAC""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_stop=""ccSetMgr""", 0, True

'kill apps

wso.Run """" & WScript.ScriptFullName & """ process_stop=ccApp.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=ccSvcHst.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=SNAC.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=Rtvscan.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=SescLU.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=Smc.exe", 0, False

wso.Run """" & WScript.ScriptFullName & """ process_stop=SmcGui.exe", 0, False

'wait

WScript.Sleep 15000

'kill other script

Set pid = Getobject("winmgmts:.").InstancesOf("Win32_Process")

For Each ps In pid

If (LCase(ps.name) = "wscript.exe") Or (LCase(ps.name) = "cscript.exe") Then ps.terminate

Next

'kill other app

Call process_clear()

'start ?

'Call SEP_START()

End Sub

' 恢复SEP

Sub SEP_START()

Set wso = CreateObject("WScript.Shell")

'tips

wso.Run """" & WScript.ScriptFullName & """ show_tip=start", 0, False

'start server

wso.Run """" & WScript.ScriptFullName & """ server_stop=""SENS""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_start=""Symantec AntiVirus""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_start=""ccEvtMgr""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_start=""SmcService""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_start=""SNAC""", 0, True

wso.Run """" & WScript.ScriptFullName & """ server_start=""ccSetMgr""", 0, True

Set wso = Nothing

End Sub

' 关闭进程

Function process_stop( strAppName )

Dim i

For i = 1 To 100

Set pid = Getobject("winmgmts:.").InstancesOf("Win32_Process")

For Each id In pid

If LCase(id.name) = LCase(strAppName) Then

Dim wso

Set wso = CreateObject("WScript.Shell")

wso.run "ntsd.exe -c q -p " & id.ProcessID, 0, True

End If

Next

WScript.Sleep 500

Next

End Function

' 停止服务

Sub server_stop( byVal strServerName )

Set wso = CreateObject("WScript.Shell")

wso.run "sc config """ & strServerName & """ start= disabled", 0, True

wso.run "cmd /c echo Y|net stop """ & strServerName & """", 0, True

Set wso = Nothing

End Sub

' 启动服务

Sub server_start( byVal strServerName )

Set wso = CreateObject("WScript.Shell")

wso.run "sc config """ & strServerName & """ start= auto", 0, True

wso.run "cmd /c echo Y|net start """ & strServerName & """", 0, True

Set wso = Nothing

End Sub

' 显示提示信息

Sub show_tip( strType )

Set wso = CreateObject("WScript.Shell")

Select Case LCase(strType)

Case "stop"

wso.popup chr(13) + "正在停止 SEP,請稍等.. " + chr(13), 20, "StopSEP 正在运行", 0+64

Case "start"

wso.popup chr(13) + "正在启动 SEP,請稍等.. " + chr(13), 20, "StopSEP 已经停止", 0+64

End Select

Set wso = Nothing

End Sub

' Clear process

Sub process_clear()

'kill other app

Set pid = Getobject("winmgmts:.").InstancesOf("Win32_Process")

For Each ps In pid

Select Case LCase(ps.name)

Case "net.exe"

ps.terminate

Case "net1.exe"

ps.terminate

Case "sc.exe"

ps.terminate

Case "ntsd.exe"

ps.terminate

End Select

Next

End Sub

' ====================================================================================================

' ****************************************************************************************************

' * 公共函数

' * 使用方式:将本段全部代码加入程序末尾,将以下代码(1行)加入程序首行即可:

' * Dim WhoAmI, TmpDir, WinDir, AppDataDir, StartupDir, MeDir, UNCHost : Call GetGloVar() ' 全局变量

' * 取得支持:电邮至 yu2n@qq.com

' * 更新日期:2012-12-10 11:37

' ****************************************************************************************************

' 功能索引

' 命令行支持:

' 检测环境:IsCmdMode是否在CMD下运行

' 模拟命令:Exist是否存在文件或文件夹、MD创建目录、Copy复制文件或文件夹、Del删除文件或文件夹、

' Attrib更改文件或文件夹属性、Ping检测网络联通、

' 对话框:

' 提示消息:WarningInfo警告消息、TipInfo提示消息、ErrorInfo错误消息

' 输入密码:GetPassword提示输入密码、

' 文件系统:

' 复制、删除、更改属性:参考“命令行支持”。

' INI文件处理:读写INI文件(Unicode) ReadIniUnicode / WriteIniUnicode

' 注册表处理:RegRead读注册表、RegWrite写注册表

' 日志处理:WriteLog写文本日志

' 字符串处理:

' 提取:RegExpTest

' 程序:

' 检测:IsRun是否运行、MeIsAlreadyRun本程序是否执行、、、、

' 执行:Run前台等待执行、RunHide隐藏等待执行、RunNotWait前台不等待执行、RunHideNotWite后台不等待执行、

' 加密运行:MeEncoder

' 系统:

' 版本

' 延时:Sleep

' 发送按键:SendKeys

' 网络:

' 检测:Ping、参考“命令行支持”。

' 连接:文件共享、、、、、、、、、、

' 时间:Format_Time格式化时间、NowDateTime当前时间

' ====================================================================================================

' ====================================================================================================

' 初始化全局变量

' Dim WhoAmI, TmpDir, WinDir, AppDataDir, StartupDir, MeDir, UNCHost

Sub GetGloVar()

WhoAmI = CreateObject( "WScript.Network" ).ComputerName & "" & CreateObject( "WScript.Network" ).UserName ' 使用者信息

TmpDir = CreateObject("Scripting.FileSystemObject").getspecialfolder(2) & "" ' 临时文件夹路径

WinDir = CreateObject("wscript.Shell").ExpandenVironmentStrings("%windir%") & "" ' 本机 %Windir% 文件夹路径

AppDataDir = CreateObject("WScript.Shell").SpecialFolders("AppData") & "" ' 本机 %AppData% 文件夹路径

StartupDir = CreateObject("WScript.Shell").SpecialFolders("Startup") & "" ' 本机启动文件夹路径

MeDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,"")) ' 脚本所在文件夹路径

' 脚本位于共享的目录时,取得共享的电脑名(UNCHost),进行位置验证(If UNCHost <> "SerNTF02" Then WScript.Quit) ' 防止拷贝到本地运行

UNCHost = LCase(Mid(WScript.ScriptFullName,InStr(WScript.ScriptFullName,"")+2,InStr(3,WScript.ScriptFullName,"",1)-3))

End Sub

' ====================================================================================================

' 小函数

Sub Sleep( sTime ) ' 延时 sTime 毫秒

WScript.Sleep sTime

End Sub

Sub SendKeys( strKey ) ' 发送按键

CreateObject("WScript.Shell").SendKeys strKey

End Sub

' KeyCode - 按键代码:

' Shift + *Ctrl ^ *Alt % *BACKSPACE {BACKSPACE}, {BS}, or {BKSP} *BREAK {BREAK}

' CAPS LOCK {CAPSLOCK} *DEL or DELETE {DELETE} or {DEL} *DOWN ARROW {DOWN} *END {END}

' ENTER {ENTER}or ~ *ESC {ESC} *HELP {HELP} *HOME {HOME} *INS or INSERT {INSERT} or {INS}

' LEFT ARROW {LEFT} *NUM LOCK {NUMLOCK} *PAGE DOWN {PGDN} *PAGE UP {PGUP} *PRINT SCREEN {PRTSC}

' RIGHT ARROW {RIGHT} *SCROLL LOCK {SCROLLLOCK} *TAB {TAB} *UP ARROW {UP} *F1 {F1} *F16 {F16}

' 实例:切换输入法(模拟同时按下:Shift、Ctrl键)"+(^)" ;重启电脑(模拟按下:Ctrl + Esc、u、r键): "^{ESC}ur" 。

' 同时按键:在按 e和 c的同时按 SHIFT 键: "+(ec)" ;在按 e时只按 c(而不按 SHIFT): "+ec" 。

' 重复按键:按 10 次 "x": "{x 10}"。按键和数字间有空格。

' 特殊字符:发送 “+”、“^” 特殊的控制按键:"{+}"、"{^}"

' 注意:只可以发送重复按一个键的按键。例如,可以发送 10次 "x",但不可发送 10次 "Ctrl+x"。

' 注意:不能向应用程序发送 PRINT SCREEN键{PRTSC}。

Function AppActivate( strWindowTitle ) ' 激活标题包含指定字符窗口,例如判断D盘是否被打开If AppActivate("(D:)") Then

AppActivate = CreateObject("WScript.Shell").AppActivate( strWindowTitle )

End Function

' ====================================================================================================

' ShowMsg 消息弹窗

Sub WarningInfo( strTitle, strMsg, sTime )

CreateObject("wscript.Shell").popup strMsg, sTime , strTitle, 48+4096 ' 提示信息

End Sub

Sub TipInfo( strTitle, strMsg, sTime )

CreateObject("wscript.Shell").popup strMsg, sTime , strTitle, 64+4096 ' 提示信息

End Sub

Sub ErrorInfo( strTitle, strMsg, sTime )

CreateObject("wscript.Shell").popup strMsg, sTime , strTitle, 16+4096 ' 提示信息

End Sub

' ====================================================================================================

' RunApp 执行程序

Sub Run( strCmd )

CreateObject("WScript.Shell").Run strCmd, 1, True ' 正常运行 + 等待程序运行完成

End Sub

Sub RunNotWait( strCmd )

CreateObject("WScript.Shell").Run strCmd, 1, False ' 正常运行 + 不等待程序运行完成

End Sub

Sub RunHide( strCmd )

CreateObject("WScript.Shell").Run strCmd, 0, True ' 隐藏后台运行 + 等待程序运行完成

End Sub

Sub RunHideNotWait( strCmd )

CreateObject("WScript.Shell").Run strCmd, 0, False ' 隐藏后台运行 + 不等待程序运行完成

End Sub

' ====================================================================================================

' CMD 命令集

' ----------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------

' 获取CMD输出

Function CmdOut(str)

Set ws = CreateObject("WScript.Shell")

host = WScript.FullName

'Demon注:这里不用这么复杂吧,LCase(Right(host, 11))不就行了

If LCase( right(host, len(host)-InStrRev(host,"")) ) = "wscript.exe" Then

ws.run "cscript """ & WScript.ScriptFullName & chr(34), 0

WScript.Quit

End If

Set oexec = ws.Exec(str)

CmdOut = oExec.StdOut.ReadAll

End Function

' 检测是否运行于CMD模式

Function IsCmdMode()

IsCmdMode = False

If (LCase(Right(WScript.FullName,11)) = LCase("CScript.exe")) Then IsCmdMode = True

End Function

' Exist 检测文件或文件夹是否存在

Function Exist( strPath )

Exist = False

Set fso = CreateObject("Scripting.FileSystemObject")

If ((fso.FolderExists(strPath)) Or (fso.FileExists(strPath))) Then Exist = True

Set fso = Nothing

End Function

' ----------------------------------------------------------------------------------------------------

' MD 创建文件夹路径

Sub MD( ByVal strPath )

Dim arrPath, strTemp, valStart

arrPath = Split(strPath, "")

If Left(strPath, 2) = "" Then ' UNC Path

valStart = 3

strTemp = arrPath(0) & "" & arrPath(1) & "" & arrPath(2)

Else ' Local Path

valStart = 1

strTemp = arrPath(0)

End If

Set fso = CreateObject("Scripting.FileSystemObject")

For i = valStart To UBound(arrPath)

strTemp = strTemp & "" & arrPath(i)

If Not fso.FolderExists( strTemp ) Then fso.CreateFolder( strTemp )

Next

Set fso = Nothing

End Sub

' ----------------------------------------------------------------------------------------------------

' copy 复制文件或文件夹

Sub Copy( ByVal strSource, ByVal strDestination )

On Error Resume Next ' Required 必选

Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FileExists(strSource)) Then ' 如果来源是一个文件

If (fso.FolderExists(strDestination)) Then ' 如果目的地是一个文件夹,加上路径后缀反斜线“”

fso.CopyFile fso.GetFile(strSource).Path, fso.GetFolder(strDestination).Path & "", True

Else ' 如果目的地是一个文件,直接复制

fso.CopyFile fso.GetFile(strSource).Path, strDestination, True

End If

End If ' 如果来源是一个文件夹,复制文件夹

If (fso.FolderExists(strSource)) Then fso.CopyFolder fso.GetFolder(strSource).Path, fso.GetFolder(strDestination).Path, True

Set fso = Nothing

End Sub

' ----------------------------------------------------------------------------------------------------

' del 删除文件或文件夹

Sub Del( strPath )

On Error Resume Next ' Required 必选

Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FileExists(strPath)) Then

fso.GetFile( strPath ).attributes = 0

fso.GetFile( strPath ).delete

End If

If (fso.FolderExists(strPath)) Then

fso.GetFolder( strPath ).attributes = 0

fso.GetFolder( strPath ).delete

End If

Set fso = Nothing

End Sub

' ----------------------------------------------------------------------------------------------------

' attrib 改变文件属性

Sub Attrib( strPath, strArgs ) 'strArgs = [+R | -R] [+A | -A ] [+S | -S] [+H | -H]

Dim fso, valAttrib, arrAttrib()

Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FileExists(strPath)) Then valAttrib = fso.getFile( strPath ).attributes

If (fso.FolderExists(strPath)) Then valAttrib = fso.getFolder( strPath ).attributes

If valAttrib = "" Or strArgs = "" Then Exit Sub

binAttrib = DecToBin(valAttrib) ' 十进制转二进制

For i = 0 To 16 ' 二进制转16位二进制

ReDim Preserve arrAttrib(i) : arrAttrib(i) = 0

If i > 16-Len(binAttrib) Then arrAttrib(i) = Mid(binAttrib, i-(16-Len(binAttrib)), 1)

Next

If Instr(1, LCase(strArgs), "+r", 1) Then arrAttrib(16-0) = 1 'ReadOnly 1 只读文件。

If Instr(1, LCase(strArgs), "-r", 1) Then arrAttrib(16-0) = 0

If Instr(1, LCase(strArgs), "+h", 1) Then arrAttrib(16-1) = 1 'Hidden 2 隐藏文件。

If Instr(1, LCase(strArgs), "-h", 1) Then arrAttrib(16-1) = 0

If Instr(1, LCase(strArgs), "+s", 1) Then arrAttrib(16-2) = 1 'System 4 系统文件。

If Instr(1, LCase(strArgs), "-s", 1) Then arrAttrib(16-2) = 0

If Instr(1, LCase(strArgs), "+a", 1) Then arrAttrib(16-5) = 1 'Archive 32 上次备份后已更改的文件。

If Instr(1, LCase(strArgs), "-a", 1) Then arrAttrib(16-5) = 0

valAttrib = BinToDec(Join(arrAttrib,"")) ' 二进制转十进制

If (fso.FileExists(strPath)) Then fso.getFile( strPath ).attributes = valAttrib

If (fso.FolderExists(strPath)) Then fso.getFolder( strPath ).attributes = valAttrib

Set fso = Nothing

End Sub

Function DecToBin(ByVal number) ' 十进制转二进制

Dim remainder

remainder = number

Do While remainder > 0

DecToBin = CStr(remainder Mod 2) & DecToBin

remainder = remainder 2

Loop

End Function

Function BinToDec(ByVal binStr) ' 二进制转十进制

Dim i

For i = 1 To Len(binStr)

BinToDec = BinToDec + (CInt(Mid(binStr, i, 1)) * (2 ^ (Len(binStr) - i)))

Next

End Function

' ----------------------------------------------------------------------------------------------------

' Ping 判断网络是否联通

Function Ping(host)

On Error Resume Next

Ping = False : If host = "" Then Exit Function

Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & host & "'")

For Each objStatus in objPing

If objStatus.ResponseTime >= 0 Then Ping = True : Exit For

Next

Set objPing = nothing

End Function

' ====================================================================================================

' 获取当前的日期时间,并格式化

Function NowDateTime()

'MyWeek = "周" & Right(WeekdayName(Weekday(Date())), 1) & " "

MyWeek = ""

NowDateTime = MyWeek & Format_Time(Now(),2) & " " & Format_Time(Now(),3)

End Function

Function Format_Time(s_Time, n_Flag)

Dim y, m, d, h, mi, s

Format_Time = ""

If IsDate(s_Time) = False Then Exit Function

y = cstr(year(s_Time))

m = cstr(month(s_Time))

If len(m) = 1 Then m = "0" & m

d = cstr(day(s_Time))

If len(d) = 1 Then d = "0" & d

h = cstr(hour(s_Time))

If len(h) = 1 Then h = "0" & h

mi = cstr(minute(s_Time))

If len(mi) = 1 Then mi = "0" & mi

s = cstr(second(s_Time))

If len(s) = 1 Then s = "0" & s

Select Case n_Flag

Case 1

Format_Time = y & m & d & h & mi & s ' yyyy-mm-dd hh:mm:ss

Case 2

Format_Time = y & "-" & m & "-" & d ' yyyy-mm-dd

Case 3

Format_Time = h & ":" & mi & ":" & s ' hh:mm:ss

Case 4

Format_Time = y & "年" & m & "月" & d & "日" ' yyyy年mm月dd日

Case 5

Format_Time = y & m & d ' yyyymmdd

End Select

End Function

' ====================================================================================================

' 检查字符串是否符合正则表达式

'Msgbox Join(RegExpTest( "[A-z]+-[A-z]+", "a-v d-f b-c" ,"Value"), VbCrLf)

'Msgbox RegExpTest( "[A-z]+-[A-z]+", "a-v d-f b-c" ,"Count")

'Msgbox RegExpTest( "[A-z]+-[A-z]+", "a-v d-f b-c" ,"")

Function RegExpTest(patrn, strng, mode)

Dim regEx, Match, Matches ' 建立变量。

Set regEx = New RegExp ' 建立正则表达式。

regEx.Pattern = patrn ' 设置模式。

regEx.IgnoreCase = True ' 设置是否区分字符大小写。

regEx.Global = True ' 设置全局可用性。

Dim RetStr, arrMatchs(), i : i = -1

Set Matches = regEx.Execute(strng) ' 执行搜索。

For Each Match in Matches ' 遍历匹配集合。

i = i + 1

ReDim Preserve arrMatchs(i) ' 动态数组:数组随循环而变化

arrMatchs(i) = Match.Value

RetStr = RetStr & "Match found at position " & Match.FirstIndex & ". Match Value is '" & Match.Value & "'." & vbCRLF

Next

If LCase(mode) = LCase("Value") Then RegExpTest = arrMatchs ' 以数组返回所有符合表达式的所有数据

If LCase(mode) = LCase("Count") Then RegExpTest = Matches.Count ' 以整数返回符合表达式的所有数据总数

If IsEmpty(RegExpTest) Then RegExpTest = RetStr ' 返回所有匹配结果

End Function

' ====================================================================================================

' 读写注册表

Function RegRead( strKey )

On Error Resume Next

Set wso = CreateObject("WScript.Shell")

RegRead = wso.RegRead( strKey ) 'strKey = "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunDocTip"

If IsArray( RegRead ) Then RegRead = Join(RegRead, VbCrLf)

Set wso = Nothing

End Function

' 写注册表

Function RegWrite( strKey, strKeyVal, strKeyType )

On Error Resume Next

Dim fso, strTmp

RegWrite = Flase

Set wso = CreateObject("WScript.Shell")

wso.RegWrite strKey, strKeyVal, strKeyType

strTmp = wso.RegRead( strKey )

If strTmp <> "" Then RegWrite = True

Set wso = Nothing

End Function

' ====================================================================================================

' 读写INI文件(Unicode) ReadIniUnicode / WriteIniUnicode

' This subroutine writes a value to an INI file

'

' Arguments:

' myFilePath [string] the (path and) file name of the INI file

' mySection [string] the section in the INI file to be searched

' myKey [string] the key whose value is to be written

' myValue [string] the value to be written (myKey will be

' deleted if myValue is <DELETE_THIS_VALUE>)

'

' Returns:

' N/A

'

' CAVEAT: WriteIni function needs ReadIniUnicode function to run

'

' Written by Keith Lacelle

' Modified by Denis St-Pierre, Johan Pol and Rob van der Woude

Sub WriteIniUnicode( myFilePath, mySection, myKey, myValue )

On Error Resume Next

Const ForReading = 1

Const ForWriting = 2

Const ForAppending = 8

Const TristateTrue = -1

Dim blnInSection, blnKeyExists, blnSectionExists, blnWritten

Dim intEqualPos

Dim objFSO, objNewIni, objOrgIni, wshShell

Dim strFilePath, strFolderPath, strKey, strLeftString

Dim strLine, strSection, strTempDir, strTempFile, strValue

strFilePath = Trim( myFilePath )

strSection = Trim( mySection )

strKey = Trim( myKey )

strValue = Trim( myValue )

Set objFSO = CreateObject( "Scripting.FileSystemObject" )

Set wshShell = CreateObject( "WScript.Shell" )

strTempDir = wshShell.ExpandEnvironmentStrings( "%TEMP%" )

strTempFile = objFSO.BuildPath( strTempDir, objFSO.GetTempName )

Set objOrgIni = objFSO.OpenTextFile( strFilePath, ForReading, True, TristateTrue)

Set objNewIni = objFSO.OpenTextFile( strTempFile, ForWriting, True, TristateTrue)

'Set objNewIni = objFSO.CreateTextFile( strTempFile, False, False )

blnInSection = False

blnSectionExists = False

' Check if the specified key already exists

blnKeyExists = ( ReadIniUnicode( strFilePath, strSection, strKey ) <> "" )

blnWritten = False

' Check if path to INI file exists, quit if not

strFolderPath = Mid( strFilePath, 1, InStrRev( strFilePath, "" ) )

If Not objFSO.FolderExists ( strFolderPath ) Then

REM WScript.Echo "Error: WriteIni failed, folder path (" _

REM & strFolderPath & ") to ini file " _

REM & strFilePath & " not found!"

Set objOrgIni = Nothing

Set objNewIni = Nothing

Set objFSO = Nothing

REM WScript.Quit 1

Exit Sub

End If

While objOrgIni.AtEndOfStream = False

strLine = Trim( objOrgIni.ReadLine )

If blnWritten = False Then

If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then

blnSectionExists = True

blnInSection = True

ElseIf InStr( strLine, "[" ) = 1 Then

blnInSection = False

End If

End If

If blnInSection Then

If blnKeyExists Then

intEqualPos = InStr( 1, strLine, "=", vbTextCompare )

If intEqualPos > 0 Then

strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )

If LCase( strLeftString ) = LCase( strKey ) Then

' Only write the key if the value isn't empty

' Modification by Johan Pol

If strValue <> "<DELETE_THIS_VALUE>" Then

objNewIni.WriteLine strKey & "=" & strValue

End If

blnWritten = True

blnInSection = False

End If

End If

If Not blnWritten Then

objNewIni.WriteLine strLine

End If

Else

objNewIni.WriteLine strLine

' Only write the key if the value isn't empty

' Modification by Johan Pol

If strValue <> "<DELETE_THIS_VALUE>" Then

objNewIni.WriteLine strKey & "=" & strValue

End If

blnWritten = True

blnInSection = False

End If

Else

objNewIni.WriteLine strLine

End If

Wend

If blnSectionExists = False Then ' section doesn't exist

objNewIni.WriteLine

objNewIni.WriteLine "[" & strSection & "]"

' Only write the key if the value isn't empty

' Modification by Johan Pol

If strValue <> "<DELETE_THIS_VALUE>" Then

objNewIni.WriteLine strKey & "=" & strValue

End If

End If

objOrgIni.Close

objNewIni.Close

' Delete old INI file

objFSO.DeleteFile strFilePath, True

' Rename new INI file

objFSO.MoveFile strTempFile, strFilePath

Set objOrgIni = Nothing

Set objNewIni = Nothing

Set objFSO = Nothing

Set wshShell = Nothing

End Sub

Function ReadIniUnicode( myFilePath, mySection, myKey )

On Error Resume Next

Const ForReading = 1

Const ForWriting = 2

Const ForAppending = 8

Const TristateTrue = -1

Dim intEqualPos

Dim objFSO, objIniFile

Dim strFilePath, strKey, strLeftString, strLine, strSection

Set objFSO = CreateObject( "Scripting.FileSystemObject" )

ReadIniUnicode = ""

strFilePath = Trim( myFilePath )

strSection = Trim( mySection )

strKey = Trim( myKey )

If objFSO.FileExists( strFilePath ) Then

Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False, TristateTrue )

Do While objIniFile.AtEndOfStream = False

strLine = Trim( objIniFile.ReadLine )

' Check if section is found in the current line

If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then

strLine = Trim( objIniFile.ReadLine )

' Parse lines until the next section is reached

Do While Left( strLine, 1 ) <> "["

' Find position of equal sign in the line

intEqualPos = InStr( 1, strLine, "=", 1 )

If intEqualPos > 0 Then

strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )

' Check if item is found in the current line

If LCase( strLeftString ) = LCase( strKey ) Then

ReadIniUnicode = Trim( Mid( strLine, intEqualPos + 1 ) )

' In case the item exists but value is blank

If ReadIniUnicode = "" Then

ReadIniUnicode = " "

End If

' Abort loop when item is found

Exit Do

End If

End If

' Abort if the end of the INI file is reached

If objIniFile.AtEndOfStream Then Exit Do

' Continue with next line

strLine = Trim( objIniFile.ReadLine )

Loop

Exit Do

End If

Loop

objIniFile.Close

Else

REM WScript.Echo strFilePath & " doesn't exists. Exiting..."

REM Wscript.Quit 1

REM Msgbox strFilePath & " doesn't exists. Exiting..."

Exit Function

End If

End Function

' ====================================================================================================

' 写文本日志

Sub WriteLog(str, file)

If (file = "") Or (str = "") Then Exit Sub

str = NowDateTime & " " & str & VbCrLf

Dim fso, wtxt

Const ForAppending = 8 'ForReading = 1 (只读不写), ForWriting = 2 (只写不读), ForAppending = 8 (在文件末尾写)

Const Create = True 'Boolean 值,filename 不存在时是否创建新文件。允许创建为 True,否则为 False。默认值为 False。

Const TristateTrue = -1 'TristateUseDefault = -2 (SystemDefault), TristateTrue = -1 (Unicode), TristateFalse = 0 (ASCII)

On Error Resume Next

Set fso = CreateObject("Scripting.filesystemobject")

set wtxt = fso.OpenTextFile(file, ForAppending, Create, TristateTrue)

wtxt.Write str

wtxt.Close()

set fso = Nothing

set wtxt = Nothing

End Sub

' ====================================================================================================

' 程序控制

' 检测是否运行

Function IsRun(byVal AppName, byVal AppPath) ' Eg: Call IsRun("mshta.exe", "c:test.hta")

IsRun = 0 : i = 0

For Each ps in GetObject("winmgmts:.rootcimv2:win32_process").instances_

IF LCase(ps.name) = LCase(AppName) Then

If AppPath = "" Then IsRun = 1 : Exit Function

IF Instr( LCase(ps.CommandLine) , LCase(AppPath) ) Then i = i + 1

End IF

Next

IsRun = i

End Function

' ----------------------------------------------------------------------------------------------------

' 检测自身是否重复运行

Function MeIsAlreadyRun()

MeIsAlreadyRun = False

If ((IsRun("WScript.exe",WScript.ScriptFullName)>1) Or (IsRun("CScript.exe",WScript.ScriptFullName)>1)) Then MeIsAlreadyRun = True

End Function

' ----------------------------------------------------------------------------------------------------

' 关闭进程

Sub Close_Process(ProcessName)

'On Error Resume Next

For each ps in getobject("winmgmts:.rootcimv2:win32_process").instances_ '循环进程

If Ucase(ps.name)=Ucase(ProcessName) Then

ps.terminate

End if

Next

End Sub

' ====================================================================================================

' 系统

' 检查操作系统版本

Sub CheckOS()

If LCase(OSVer()) <> "xp" Then

Msgbox "不支持该操作系统!", 48+4096, "警告"

WScript.Quit ' 退出程序

End If

End Sub

' ----------------------------------------------------------------------------------------------------

' 取得操作系统版本

Function OSVer()

Dim objWMI, objItem, colItems

Dim strComputer, VerOS, VerBig, Ver9x, Version9x, OS, OSystem

strComputer = "."

Set objWMI = GetObject("winmgmts:" & strComputer & "rootcimv2")

Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)

For Each objItem in colItems

VerBig = Left(objItem.Version,3)

Next

Select Case VerBig

Case "6.1" OSystem = "Win7"

Case "6.0" OSystem = "Vista"

Case "5.2" OSystem = "Windows 2003"

Case "5.1" OSystem = "XP"

Case "5.0" OSystem = "W2K"

Case "4.0" OSystem = "NT4.0"

Case Else OSystem = "Unknown"

If CInt(Join(Split(VerBig,"."),"")) < 40 Then OSystem = "Win9x"

End Select

OSVer = OSystem

End Function

' ----------------------------------------------------------------------------------------------------

' 取得操作系统语言

Function language()

Dim strComputer, objWMIService, colItems, strLanguageCode, strLanguage

strComputer = "."

Set objWMIService = GetObject("winmgmts://" &strComputer &"/root/CIMV2")

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")

For Each objItem In colItems

strLanguageCode = objItem.OSLanguage

Next

Select Case strLanguageCode

Case "1033" strLanguage = "en"

Case "2052" strLanguage = "chs"

Case Else strLanguage = "en"

End Select

language = strLanguage

End Function

' ====================================================================================================

' 加密自身

Sub MeEncoder()

Dim MeAppPath, MeAppName, MeAppFx, MeAppEncodeFile, data

MeAppPath = left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,""))

MeAppName = Left( WScript.ScriptName, InStrRev(WScript.ScriptName,".") - 1 )

MeAppFx = Right(WScript.ScriptName, Len(WScript.ScriptName) - InStrRev(WScript.ScriptName,".") + 1 )

MeAppEncodeFile = MeAppPath & MeAppName & ".s.vbe"

If Not ( LCase(MeAppFx) = LCase(".vbs") ) Then Exit Sub

Set fso = CreateObject("Scripting.FileSystemObject")

data = fso.OpenTextFile(WScript.ScriptFullName, 1, False, -1).ReadAll

data = CreateObject("Scripting.Encoder").EncodeScriptFile(".vbs", data, 0, "VBScript")

fso.OpenTextFile(MeAppEncodeFile, 2, True, -1).Write data

MsgBox "编码完毕,文件生成到:" & vbCrLf & vbCrLf & MeAppEncodeFile, 64+4096, WScript.ScriptName

Set fso = Nothing

WScript.Quit

End Sub

【VBS 强制关闭Symantec Endpoint Protection的代码】相关文章:

一个实现VBS倒计时的代码

VBS获取外网IP地址并发送到指定邮箱的代码

用VBS实现PHP的md5_file函数代码

VBS 数字转英文代码

VBS中常用脚本代码

用VBS记录客户机操作的代码

创建Guid 的代码

VBS监视网络连接与断开的代码

一段提取用户名和md5的vbs代码

VBS教程:VBScript 语句-Property Set 语句

精品推荐
分类导航