用法:CScript scriptname.extension [option...] [arguments...]
选项:
//B 批模式:不显示脚本错误及提示信息
//D 启用 Active Debugging
//E:engine 使用执行脚本的引擎
Option Explicit
' On Error Resume Next
Dim objShell,objArg,objInStream,objOutStream,intSiteIndex,objW3svc,ObjChildObject,strChildObjectName
Dim objIIs,objIIsWeb,objFso,objBackupFile,arrServerBindings,strServerComment,strMaxConnections
Dim strPath,strBackupFile,strFileLine,arrSiteInfo,intCreateWebStatus,strOldIP,strNewIP,intSiteCount
Dim intBindsIndex,intBindsArrID,intChoice,strSearchMode,strSearchedSite,strSaveToBackup,strResult
Dim strSaveFileName,strOverWrite,objResultFile,strIpString,intSearched,strDomainString,strPathString
Dim strDeleteMode,intDeleteId,arrSiteId(999),strCommentString,intCountDeleteSite
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
If (LCase(Right(Wscript.FullName , 11))="wscript.exe") Then
Set objShell=Wscript.CreateObject("Wscript.Shell")
objShell.Run("cmd.exe /k cscript //nologo "&chr(34)&Wscript.ScriptFullName&chr(34))
Wscript.Quit
End If
Set objOutStream = Wscript.StdOut
Set objInStream = Wscript.StdIn
Set objArg = Wscript.Arguments
If objArg.Count <= 0 Then
HELP()
Wscript.Quit
End If
Select Case UCase(objArg(0))
Case "BACKUP"
HELP()
BackupSite()
Case "RESTORE"
HELP()
RestoreSite()
Case "CHANGEIP"
HELP()
ChangeSiteIP()
Case "CHANGE_APP"
HELP()
Change_AppIsolated()
Case "SEARCH"
HELP()
Search()
Case "DELETESITE"
HELP()
DeleteSite()
End Select
Function BackupSite() ' 备份站点模块
if objArg.Count <= 1 then
objOutStream.Write " 请输入用来备份站点信息的文件名: "
strBackupFile = objInStream.ReadLine
end if
if objArg.Count = 2 then
strBackupFile = objArg( 1 )
end if
intSiteIndex = 1 ' 站点ID的索引
Wscript.Echo vbCrLf & "开始备份站点信息……" & vbCrLf
' *********************************************
Set objW3svc = GetObject( " IIS://localhost/w3svc " ) ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断ObjChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name)
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections ' 把IIS虚拟站点的最大连接数赋值给变量MaxConnections
Set objIIsWeb = objIIs.GetObject("IIsWebVirtualDir","Root")
strPath = objIIsWeb.Path
Set objFso = CreateObject("Scripting.FileSystemObject")
If (objFso.fileexists(strBackupFile)) Then
Set objBackupFile = objFso.OpenTextFile(strBackupFile,ForAppending,True)
objBackupFile.WriteLine(strServerComment &vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath)
objBackupFile.Close
Wscript.Echo "正在备份站点 " & strServerComment & "!"
Else
Set objBackupFile = objFso.CreateTextFile(strBackupFile,True)
objBackupFile.WriteLine(strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath)
objBackupFile.Close
Wscript.Echo "正在备份站点 " & strServerComment & "!"
End If
intSiteIndex = intSiteIndex + 1
End If
Next
Wscript.Echo vbCrLf & "一共备份了 " & intSiteIndex - 1 & "个站点信息!" & vbCrLf
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Set objFso = Nothing
Set objBackupFile = Nothing
End Function
Function RestoreSite() ' 恢复站点模块
if objArg.Count <= 1 then
objOutStream.Write " 请输入用来恢复站点信息的文件名: "
strBackupFile = objInStream.ReadLine
end if
if objArg.Count = 2 then
strBackupFile = objArg( 1 )
end if
Wscript.Echo vbCrLf & " 开始恢复站点信息…… " & vbCrLf
Set objFso = CreateObject( " Scripting.FileSystemObject " )
If Not (objFso.fileexists(strBackupFile)) Then
Wscrip.Echo " 没有找到文件 " & strBackupFile & " ! " & vbCrLf & " 请确定文件的位置! "
Wscript.Quit
End If
Set objBackupFile = objFso.OpenTextFile(strBackupFile, 1 )
intSiteCount = 1
Do While objBackupFile.AtEndOfStream <> True
strFileLine = objBackupFile.ReadLine
arrSiteInfo = split(strFileLine,vbTab)
intCreateWebStatus = CreateWebServer(arrSiteInfo( 0 ),split(arrSiteInfo( 1 ), " , " ),arrSiteInfo( 2 ),arrSiteInfo( 3 ))
If intCreateWebStatus = 1 Then
Wscript.Echo " 建立站点 " & arrSiteInfo( 0 ) & " 成功 "
intSiteCount = intSiteCount + 1
Else
Wscript.Echo " 建立站点 " & arrSiteInfo( 0 ) & " 失败 "
End If
Loop
objBackupFile.Close
Wscript.Echo vbCrLf & " 一共恢复了 " & intSiteCount - 1 & " 个站点信息! " & vbCrLf
Set objBackupFile = Nothing
Set objFso = Nothing
End Function
Function ChangeSiteIP() ' 修改站点IP模块
' *********************************************
' 获取两个IP,一个是原来的,是个是新的
' *********************************************
objOutStream.Write " 请输入站点原IP: "
strOldIP = objInStream.ReadLine
objOutStream.Write " 请输入站点新IP: "
strNewIP = objInStream.ReadLine
' *********************************************
Wscript.Echo vbCrLf & "开始修改……" & vbCrLf
Set objW3svc = GetObject("IIS://localhost/w3svc") ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer", objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
Wscript.Echo " 正在修改站点 " & strServerComment & " 的IP " ' 在命令行打印正在修改IP的站点名称
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
For intBindsArrID = 1 To intBindsIndex
If instr(arrServerBindings(intBindsArrID - 1 ) , strOldIP) Then
arrServerBindings(intBindsArrID - 1 ) = Replace(arrServerBindings(intBindsArrID - 1 ) , strOldIP , strNewIP) ' 把数组内包含oldip的字符串替换成newip的字符串
End If
Next
objIIs.ServerBindings = arrServerBindings ' 把iis对象的ServerBindings属性修改为替换过IP的数组
objIIs.setinfo ' 使替换过的设置生效
End If
Next
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Wscript.Echo vbCrLf & " 修改完成! "
End Function
Function Change_AppIsolated() ' 修改应用程序保护模块
objOutStream.Write "选择你需要设置的(0,低_IIS进程 2,中_共用的 3,高_独立的,默认设置为2):"
intChoice = objInStream.ReadLine
If Not IsNumeric(intChoice) Then
Wscript.Echo "错误,你输入的不是数字!"
Wscript.Quit
End If
intSiteIndex = 1 ' 站点ID的索引
Wscript.Echo vbCrLf & " 开始修改…… " & vbCrLf
' *********************************************
Set objW3svc = GetObject("IIS://localhost/w3svc") ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断取出的objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer" , objChildObject.Name)
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
strServerComment = objIIs.ServerComment
set objIIsWeb = objIIs.GetObject("IIsWebVirtualDir","Root")
objIIsWeb.AppIsolated = int(intChoice)
objIIsWeb.SetInfo
Wscript.Echo "设置站点 " & strServerComment & " 完成!"
End If
Next
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Wscript.Echo vbCrLf & "设置完成!"
End Function
Function Search() ' 搜索模块
Wscript.Echo " 请选择搜索方式: " & vbCrLf
Wscript.Echo " 1.根据IP查询站点信息 "
Wscript.Echo " 2.根据域名查询站点信息 "
Wscript.Echo " 3.根据站点绝对路径查询站点信息 " & vbCrLf
objOutStream.Write " 请选择你需要的查询方式(1 2 3): "
strSearchMode = objInStream.ReadLine
Select Case strSearchMode
Case " 1 "
Use_IP_Search()
Case " 2 "
Use_Domain_Search()
Case " 3 "
Use_Path_Search()
Case Else
Wscript.Echo String( 30 , " " ) & " 输入错误,请重新输入 " & vbCrLf
Search()
End Select
End Function
Function Use_IP_Search() ' 根据IP搜索站点信息
objOutStream.Write "请输入你要搜索的IP(支持模糊搜索):"
strIpString = objInStream.ReadLine
Wscript.Echo "开始搜索……" & vbCrLf
intSiteIndex = 1
' *********************************************
Set objW3svc = GetObject( " IIS://localhost/w3svc " ) ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched=0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1) , strIpString) Then
intSearched=1
Exit For
End If
Next
If intSearched=1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Wscript.Echo " 站点描述: " & strServerComment
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & " 未查找到站点信息! "
Else
Wscript.Echo vbCrLf & " 共查找到 " & intSiteIndex - 1 & " 个站点! "
Wscript.Echo " 默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件! "
objOutStream.Write " 是否将站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Use_Domain_Search() ' 域名搜索模块
objOutStream.Write " 请输入你要搜索的域名支持模糊搜索: "
strDomainString = objInStream.ReadLine
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
Wscript.Echo " 开始搜索…… " & vbCrLf
intSiteIndex = 1
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer", objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1 ) , strDomainString) Then
intSearched = 1
Exit For
End If
Next
If intSearched = 1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Wscript.Echo "站点描述:" & strServerComment
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strPath=objIIsWeb.Path
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & "未查找到站点信息!"
Else
Wscript.Echo vbCrLf & "共查找到" & intSiteIndex - 1 & "个站点!"
Wscript.Echo "默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件!"
objOutStream.Write "是否将站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Use_Path_Search() ' 域名搜索模块
objOutStream.Write "请输入你要搜索的绝对路径(支持模糊搜索):"
strPathString = objInStream.ReadLine
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
Wscript.Echo "开始搜索……" & vbCrLf
intSiteIndex = 1
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If instr(objIIsWeb.Path , strPathString) Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strMaxConnections = objIIs.MaxConnections
strPath=objIIsWeb.Path
Wscript.Echo "站点描述:" & strServerComment
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & "未查找到站点信息!"
Else
Wscript.Echo vbCrLf & "共查找到" & intSiteIndex - 1 & "个站点!"
Wscript.Echo "默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件!"
objOutStream.Write "是否将站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function DeleteSite()
Wscript.Echo vbCrLf & " 请选择批量删除的方式: " & vbCrLf
Wscript.Echo " 1.根据IP删除站点 " & vbCrLf
Wscript.Echo " 2.根据域名删除站点 " & vbCrlf
Wscript.Echo " 3.根据站点描述删除站点 " & vbCrLf
Wscript.Echo " 4.删除所有站点信息 " & vbCrLf
objOutStream.Write " 请选择你需要的删除方式(1 2 3 4): "
strDeleteMode = objInStream.ReadLine
Select Case strDeleteMode
Case " 1 "
Delete_By_Ip()
Case " 2 "
Delete_By_Domain()
Case " 3 "
Delete_By_SiteComment()
Case " 4 "
Delete_All_Site()
Case Else
Wscript.Echo vbCrLf & String( 30 , " " ) & " 输入错误,请重新输入! "
DeleteSite()
End Select
End Function
Function Delete_By_Ip()
objOutStream.Write " 请输入你要删除的站点的IP(支持模糊查询): "
strIpString = objInStream.ReadLine
Wscript.Echo vbCrLf & " 开始搜索…… " & vbCrLf
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject( " IIsWebServer " , arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1) , strIpString) Then
intSearched=1
Exit For
End If
Next
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If intSearched=1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_By_Domain()
objOutStream.Write "请输入你要删除的站点的域名(支持模糊查询):"
strDomainString = objInStream.ReadLine
Wscript.Echo vbCrLf & "开始搜索……" & vbCrLf
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject("IIsWebServer", arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1 ) , strDomainString) Then
intSearched = 1
Exit For
End If
Next
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
If intSearched = 1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strPath=objIIsWeb.Path
objW3svc.Delete "IISWebServer" , arrSiteId(intDeleteId)
Wscript.Echo "删除站点: " & strServerComment & "完成!"
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & "未查找到要删除的站点信息!"
Else
Wscript.Echo vbCrLf & "共删除" & intCountDeleteSite & "个站点!"
objOutStream.Write "是否将已删除的站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_By_SiteComment
objOutStream.Write " 请输入你要删除的站点的描述(支持模糊查询): "
strCommentString = objInStream.ReadLine
Wscript.Echo vbCrLf & " 开始搜索…… " & vbCrLf
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject( " IIsWebServer " , arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
If Instr(Cstr(objIIs.ServerComment) , strCommentString) or Cstr(objIIs.ServerComment) = strCommentString Then
intSearched=1
End If
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If intSearched=1 Then
strServerComment = objIIs.ServerComment
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_All_Site()
Wscript.Echo vbCrLf & "开始删除……" & vbCrLf
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject("IIsWebServer", arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intCountDeleteSite = intCountDeleteSite + 1
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function SaveToFile(strResult) ' 保存文件
objOutStream.Write " 请输入保存的文件名: "
strSaveFileName = objInStream.ReadLine
Set objFso = CreateObject( " Scripting.FileSystemObject " )
If objFso.FileExists(strSaveFileName) Then
Wscript.Echo " 文件 " & strSaveFileName & " 已经存在! "
objOutStream.Write " 是否追加写入文件?(Yes,No) "
strOverWrite = objInStream.ReadLine
If UCase(strOverWrite) = " YES " Then
Set objResultFile = objFso.OpenTextFile(strSaveFileName , ForAppending , True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 写入文件 " & strSaveFileName & " 完成! "
End If
If UCase(strOverWrite) = " NO " Then
objOutStream.Write " 请重命名文件: "
strSaveFileName = objInStream.ReadLine
Set objResultFile = objFso.CreateTextFile(strSaveFileName,True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 保存文件 " & strSaveFileNmae & " 完成! "
End If
Else
Set objResultFile = objFso.CreateTextFile(strSaveFileName , True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 保存文件 " & strSaveFileName & " 完成! "
End If
Set objFso = Nothing
End Function
Function CreateWebServer(strServerComment,arrServerBindings,strMaxConnections,strPath) ' 建立站点
On Error Resume Next
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 1
Do While IsObject(objW3svc.GetObject("IIsWebServer",intSiteIndex))
If Err.Number <> 0 Then
' Wscript.Echo Err.Description
Err.Clear()
Exit Do
End If
intSiteIndex = intSiteIndex + 1
Loop
Set objIIs = objW3svc.Create( " IIsWebServer " ,intSiteIndex)
If Err.Number <> 0 Then
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
CreateWebServer = 0
Exit Function
End If
objIIs.ServerSize = 1
objIIs.ServerComment = strServerComment
objIIs.ServerBindings = arrServerBindings
objIIs.MaxConnections = strMaxConnections
objIIs.EnableDefaultDoc = True
objIIs.SetInfo
Set objIIsWeb = objIIs.Create( " IIsWebVirtualDir " , " Root " )
If Err.Number <> 0 Then
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
CreateWebServer = 0
Exit Function
End If
objIIsWeb.Path = strPath
objIIsWeb.AccessRead = True
objIIsWeb.AccessWrite = False
objIIsWeb.EnableDirBrowsing = False
objIIsWeb.EnableDefaultDoc = True
objIIsWeb.AccessScript = True
objIIsWeb.AppIsolated = 2
objIIsWeb.AppCreate2 2
objIIsWeb.AppFriendlyName = " 默认应用程序 "
objIIsWeb.SetInfo
Set objW3svc = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
CreateWebServer = 1
End Function
Function HELP()
Wscript.Echo vbCrLf & " IIS Manager By Tom "
Wscript.Echo " Made By Tom "
Wscript.Echo " http://www.zz.la/ " & vbCrLf
Wscript.Echo " Cscript iismanager.vbs [操作类型] [文件名] " & vbCrLf
Wscript.Echo " Backup (备份IIS站点信息到一个文本文件!) "
Wscript.Echo " Restore (从一个文本文件恢复IIS站点信息!) "
Wscript.Echo " ChangeIP (修改所有IIS站点IP!) "
Wscript.Echo " Change_App (修改所有IIS站点应用程序级别!) "
Wscript.Echo " Search (根据条件查找站点信息!) "
Wscript.Echo " DeleteSite (根据条件批量删除站点) " & vbCrLf
End Function
' 想到的新功能
' 备份功能增加一个备份站点数据的功能,通过RAR自动打包,默认打包到站点的上级目录,可选择打包的指定的目录
' 增加建立隐藏虚拟目录的功能
' 批量删除绑定的指定IP
' 程序运行时判断IIS是否启动
' 恢复站点绝对路径的ACL信息
' On Error Resume Next
Dim objShell,objArg,objInStream,objOutStream,intSiteIndex,objW3svc,ObjChildObject,strChildObjectName
Dim objIIs,objIIsWeb,objFso,objBackupFile,arrServerBindings,strServerComment,strMaxConnections
Dim strPath,strBackupFile,strFileLine,arrSiteInfo,intCreateWebStatus,strOldIP,strNewIP,intSiteCount
Dim intBindsIndex,intBindsArrID,intChoice,strSearchMode,strSearchedSite,strSaveToBackup,strResult
Dim strSaveFileName,strOverWrite,objResultFile,strIpString,intSearched,strDomainString,strPathString
Dim strDeleteMode,intDeleteId,arrSiteId(999),strCommentString,intCountDeleteSite
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
If (LCase(Right(Wscript.FullName , 11))="wscript.exe") Then
Set objShell=Wscript.CreateObject("Wscript.Shell")
objShell.Run("cmd.exe /k cscript //nologo "&chr(34)&Wscript.ScriptFullName&chr(34))
Wscript.Quit
End If
Set objOutStream = Wscript.StdOut
Set objInStream = Wscript.StdIn
Set objArg = Wscript.Arguments
If objArg.Count <= 0 Then
HELP()
Wscript.Quit
End If
Select Case UCase(objArg(0))
Case "BACKUP"
HELP()
BackupSite()
Case "RESTORE"
HELP()
RestoreSite()
Case "CHANGEIP"
HELP()
ChangeSiteIP()
Case "CHANGE_APP"
HELP()
Change_AppIsolated()
Case "SEARCH"
HELP()
Search()
Case "DELETESITE"
HELP()
DeleteSite()
End Select
Function BackupSite() ' 备份站点模块
if objArg.Count <= 1 then
objOutStream.Write " 请输入用来备份站点信息的文件名: "
strBackupFile = objInStream.ReadLine
end if
if objArg.Count = 2 then
strBackupFile = objArg( 1 )
end if
intSiteIndex = 1 ' 站点ID的索引
Wscript.Echo vbCrLf & "开始备份站点信息……" & vbCrLf
' *********************************************
Set objW3svc = GetObject( " IIS://localhost/w3svc " ) ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断ObjChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name)
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections ' 把IIS虚拟站点的最大连接数赋值给变量MaxConnections
Set objIIsWeb = objIIs.GetObject("IIsWebVirtualDir","Root")
strPath = objIIsWeb.Path
Set objFso = CreateObject("Scripting.FileSystemObject")
If (objFso.fileexists(strBackupFile)) Then
Set objBackupFile = objFso.OpenTextFile(strBackupFile,ForAppending,True)
objBackupFile.WriteLine(strServerComment &vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath)
objBackupFile.Close
Wscript.Echo "正在备份站点 " & strServerComment & "!"
Else
Set objBackupFile = objFso.CreateTextFile(strBackupFile,True)
objBackupFile.WriteLine(strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath)
objBackupFile.Close
Wscript.Echo "正在备份站点 " & strServerComment & "!"
End If
intSiteIndex = intSiteIndex + 1
End If
Next
Wscript.Echo vbCrLf & "一共备份了 " & intSiteIndex - 1 & "个站点信息!" & vbCrLf
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Set objFso = Nothing
Set objBackupFile = Nothing
End Function
Function RestoreSite() ' 恢复站点模块
if objArg.Count <= 1 then
objOutStream.Write " 请输入用来恢复站点信息的文件名: "
strBackupFile = objInStream.ReadLine
end if
if objArg.Count = 2 then
strBackupFile = objArg( 1 )
end if
Wscript.Echo vbCrLf & " 开始恢复站点信息…… " & vbCrLf
Set objFso = CreateObject( " Scripting.FileSystemObject " )
If Not (objFso.fileexists(strBackupFile)) Then
Wscrip.Echo " 没有找到文件 " & strBackupFile & " ! " & vbCrLf & " 请确定文件的位置! "
Wscript.Quit
End If
Set objBackupFile = objFso.OpenTextFile(strBackupFile, 1 )
intSiteCount = 1
Do While objBackupFile.AtEndOfStream <> True
strFileLine = objBackupFile.ReadLine
arrSiteInfo = split(strFileLine,vbTab)
intCreateWebStatus = CreateWebServer(arrSiteInfo( 0 ),split(arrSiteInfo( 1 ), " , " ),arrSiteInfo( 2 ),arrSiteInfo( 3 ))
If intCreateWebStatus = 1 Then
Wscript.Echo " 建立站点 " & arrSiteInfo( 0 ) & " 成功 "
intSiteCount = intSiteCount + 1
Else
Wscript.Echo " 建立站点 " & arrSiteInfo( 0 ) & " 失败 "
End If
Loop
objBackupFile.Close
Wscript.Echo vbCrLf & " 一共恢复了 " & intSiteCount - 1 & " 个站点信息! " & vbCrLf
Set objBackupFile = Nothing
Set objFso = Nothing
End Function
Function ChangeSiteIP() ' 修改站点IP模块
' *********************************************
' 获取两个IP,一个是原来的,是个是新的
' *********************************************
objOutStream.Write " 请输入站点原IP: "
strOldIP = objInStream.ReadLine
objOutStream.Write " 请输入站点新IP: "
strNewIP = objInStream.ReadLine
' *********************************************
Wscript.Echo vbCrLf & "开始修改……" & vbCrLf
Set objW3svc = GetObject("IIS://localhost/w3svc") ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer", objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
Wscript.Echo " 正在修改站点 " & strServerComment & " 的IP " ' 在命令行打印正在修改IP的站点名称
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
For intBindsArrID = 1 To intBindsIndex
If instr(arrServerBindings(intBindsArrID - 1 ) , strOldIP) Then
arrServerBindings(intBindsArrID - 1 ) = Replace(arrServerBindings(intBindsArrID - 1 ) , strOldIP , strNewIP) ' 把数组内包含oldip的字符串替换成newip的字符串
End If
Next
objIIs.ServerBindings = arrServerBindings ' 把iis对象的ServerBindings属性修改为替换过IP的数组
objIIs.setinfo ' 使替换过的设置生效
End If
Next
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Wscript.Echo vbCrLf & " 修改完成! "
End Function
Function Change_AppIsolated() ' 修改应用程序保护模块
objOutStream.Write "选择你需要设置的(0,低_IIS进程 2,中_共用的 3,高_独立的,默认设置为2):"
intChoice = objInStream.ReadLine
If Not IsNumeric(intChoice) Then
Wscript.Echo "错误,你输入的不是数字!"
Wscript.Quit
End If
intSiteIndex = 1 ' 站点ID的索引
Wscript.Echo vbCrLf & " 开始修改…… " & vbCrLf
' *********************************************
Set objW3svc = GetObject("IIS://localhost/w3svc") ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断取出的objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer" , objChildObject.Name)
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
strServerComment = objIIs.ServerComment
set objIIsWeb = objIIs.GetObject("IIsWebVirtualDir","Root")
objIIsWeb.AppIsolated = int(intChoice)
objIIsWeb.SetInfo
Wscript.Echo "设置站点 " & strServerComment & " 完成!"
End If
Next
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
Wscript.Echo vbCrLf & "设置完成!"
End Function
Function Search() ' 搜索模块
Wscript.Echo " 请选择搜索方式: " & vbCrLf
Wscript.Echo " 1.根据IP查询站点信息 "
Wscript.Echo " 2.根据域名查询站点信息 "
Wscript.Echo " 3.根据站点绝对路径查询站点信息 " & vbCrLf
objOutStream.Write " 请选择你需要的查询方式(1 2 3): "
strSearchMode = objInStream.ReadLine
Select Case strSearchMode
Case " 1 "
Use_IP_Search()
Case " 2 "
Use_Domain_Search()
Case " 3 "
Use_Path_Search()
Case Else
Wscript.Echo String( 30 , " " ) & " 输入错误,请重新输入 " & vbCrLf
Search()
End Select
End Function
Function Use_IP_Search() ' 根据IP搜索站点信息
objOutStream.Write "请输入你要搜索的IP(支持模糊搜索):"
strIpString = objInStream.ReadLine
Wscript.Echo "开始搜索……" & vbCrLf
intSiteIndex = 1
' *********************************************
Set objW3svc = GetObject( " IIS://localhost/w3svc " ) ' 建立IIS对象
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched=0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1) , strIpString) Then
intSearched=1
Exit For
End If
Next
If intSearched=1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Wscript.Echo " 站点描述: " & strServerComment
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & " 未查找到站点信息! "
Else
Wscript.Echo vbCrLf & " 共查找到 " & intSiteIndex - 1 & " 个站点! "
Wscript.Echo " 默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件! "
objOutStream.Write " 是否将站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Use_Domain_Search() ' 域名搜索模块
objOutStream.Write " 请输入你要搜索的域名支持模糊搜索: "
strDomainString = objInStream.ReadLine
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
Wscript.Echo " 开始搜索…… " & vbCrLf
intSiteIndex = 1
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject("IIsWebServer", objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1 ) , strDomainString) Then
intSearched = 1
Exit For
End If
Next
If intSearched = 1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Wscript.Echo "站点描述:" & strServerComment
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strPath=objIIsWeb.Path
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & "未查找到站点信息!"
Else
Wscript.Echo vbCrLf & "共查找到" & intSiteIndex - 1 & "个站点!"
Wscript.Echo "默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件!"
objOutStream.Write "是否将站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Use_Path_Search() ' 域名搜索模块
objOutStream.Write "请输入你要搜索的绝对路径(支持模糊搜索):"
strPathString = objInStream.ReadLine
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
Wscript.Echo "开始搜索……" & vbCrLf
intSiteIndex = 1
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then ' 判断objChildObject.Name是不是数字
Set objIIs = objW3svc.GetObject( " IIsWebServer " , objChildObject.Name) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If instr(objIIsWeb.Path , strPathString) Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strMaxConnections = objIIs.MaxConnections
strPath=objIIsWeb.Path
Wscript.Echo "站点描述:" & strServerComment
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSiteIndex = intSiteIndex + 1
End If
End If
Next
' Wscript.Echo strSearchedSite ' 打印出搜索到的站点信息
If intSiteIndex = 1 Then
Wscript.Echo vbCrLf & "未查找到站点信息!"
Else
Wscript.Echo vbCrLf & "共查找到" & intSiteIndex - 1 & "个站点!"
Wscript.Echo "默认只显示出站点描述,如果您需要详细信息,请把搜索结果存为文件!"
objOutStream.Write "是否将站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function DeleteSite()
Wscript.Echo vbCrLf & " 请选择批量删除的方式: " & vbCrLf
Wscript.Echo " 1.根据IP删除站点 " & vbCrLf
Wscript.Echo " 2.根据域名删除站点 " & vbCrlf
Wscript.Echo " 3.根据站点描述删除站点 " & vbCrLf
Wscript.Echo " 4.删除所有站点信息 " & vbCrLf
objOutStream.Write " 请选择你需要的删除方式(1 2 3 4): "
strDeleteMode = objInStream.ReadLine
Select Case strDeleteMode
Case " 1 "
Delete_By_Ip()
Case " 2 "
Delete_By_Domain()
Case " 3 "
Delete_By_SiteComment()
Case " 4 "
Delete_All_Site()
Case Else
Wscript.Echo vbCrLf & String( 30 , " " ) & " 输入错误,请重新输入! "
DeleteSite()
End Select
End Function
Function Delete_By_Ip()
objOutStream.Write " 请输入你要删除的站点的IP(支持模糊查询): "
strIpString = objInStream.ReadLine
Wscript.Echo vbCrLf & " 开始搜索…… " & vbCrLf
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject( " IIsWebServer " , arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1) , strIpString) Then
intSearched=1
Exit For
End If
Next
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If intSearched=1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_By_Domain()
objOutStream.Write "请输入你要删除的站点的域名(支持模糊查询):"
strDomainString = objInStream.ReadLine
Wscript.Echo vbCrLf & "开始搜索……" & vbCrLf
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject("IIsWebServer", arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
intBindsIndex = UBound(arrServerBindings) + 1 ' 由于站点可以绑定多个域名、端口和IP,所以需要判断一共绑定了多少IP
intSearched = 0
For intBindsArrID = 1 To intBindsIndex
If InStr(arrServerBindings(intBindsArrID - 1 ) , strDomainString) Then
intSearched = 1
Exit For
End If
Next
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
If intSearched = 1 Then
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strPath=objIIsWeb.Path
objW3svc.Delete "IISWebServer" , arrSiteId(intDeleteId)
Wscript.Echo "删除站点: " & strServerComment & "完成!"
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings,",") & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & "未查找到要删除的站点信息!"
Else
Wscript.Echo vbCrLf & "共删除" & intCountDeleteSite & "个站点!"
objOutStream.Write "是否将已删除的站点信息存为备份文件?(YES,NO):"
strSaveToBackup=objInStream.ReadLine
If UCase(strSaveToBackup)="YES" Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_By_SiteComment
objOutStream.Write " 请输入你要删除的站点的描述(支持模糊查询): "
strCommentString = objInStream.ReadLine
Wscript.Echo vbCrLf & " 开始搜索…… " & vbCrLf
Set objW3svc = GetObject( " IIS://LocalHost/W3svc " )
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0 ) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject( " IIsWebServer " , arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
If Instr(Cstr(objIIs.ServerComment) , strCommentString) or Cstr(objIIs.ServerComment) = strCommentString Then
intSearched=1
End If
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
If intSearched=1 Then
strServerComment = objIIs.ServerComment
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intSearched = 0
intCountDeleteSite = intCountDeleteSite + 1
End If
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function Delete_All_Site()
Wscript.Echo vbCrLf & "开始删除……" & vbCrLf
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 0
For Each objChildObject In objW3svc
If (Err.Number <> 0) Then Exit For
If IsNumeric(objChildObject.Name) = True Then
arrSiteId(intSiteIndex) = CLng(objChildObject.Name)
intSiteIndex = intSiteIndex + 1
End If
Next
intCountDeleteSite = 0
For intDeleteId = 0 To intSiteIndex - 1
Set objIIs = objW3svc.GetObject("IIsWebServer", arrSiteId(intDeleteId)) ' 建立IIS虚拟站点对像
If Err.Number <> 0 Then
Exit For
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
Wscript.Quit
End If
arrServerBindings = objIIs.ServerBindings ' 把IIS虚拟站点绑定的IP、端口、域名的值放入数组ServerBindings
Set objIIsWeb=objIIs.GetObject("IIsWebVirtualDir","Root")
strServerComment = objIIs.ServerComment ' 把IIS虚拟站点的名称赋值给变量ServerComment
strMaxConnections = objIIs.MaxConnections
Set objIIsWeb = objIIs.GetObject( " IIsWebVirtualDir " , " Root " )
strPath = objIIsWeb.Path
objW3svc.Delete " IISWebServer " , arrSiteId(intDeleteId)
Wscript.Echo " 删除站点: " & strServerComment & " 完成! "
strSearchedSite = strSearchedSite & strServerComment & vbTab & Join(arrServerBindings, " , " ) & vbTab & strMaxConnections & vbTab & strPath & vbCrLf
intCountDeleteSite = intCountDeleteSite + 1
Next
If intCountDeleteSite = 0 Then
Wscript.Echo vbCrLf & " 未查找到要删除的站点信息! "
Else
Wscript.Echo vbCrLf & " 共删除 " & intCountDeleteSite & " 个站点! "
objOutStream.Write " 是否将已删除的站点信息存为备份文件?(YES,NO): "
strSaveToBackup = objInStream.ReadLine
If UCase(strSaveToBackup) = " YES " Then
SaveToFile(strSearchedSite)
End If
End If
' *********************************************
Set objW3svc = Nothing
Set objChildObject = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
End Function
Function SaveToFile(strResult) ' 保存文件
objOutStream.Write " 请输入保存的文件名: "
strSaveFileName = objInStream.ReadLine
Set objFso = CreateObject( " Scripting.FileSystemObject " )
If objFso.FileExists(strSaveFileName) Then
Wscript.Echo " 文件 " & strSaveFileName & " 已经存在! "
objOutStream.Write " 是否追加写入文件?(Yes,No) "
strOverWrite = objInStream.ReadLine
If UCase(strOverWrite) = " YES " Then
Set objResultFile = objFso.OpenTextFile(strSaveFileName , ForAppending , True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 写入文件 " & strSaveFileName & " 完成! "
End If
If UCase(strOverWrite) = " NO " Then
objOutStream.Write " 请重命名文件: "
strSaveFileName = objInStream.ReadLine
Set objResultFile = objFso.CreateTextFile(strSaveFileName,True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 保存文件 " & strSaveFileNmae & " 完成! "
End If
Else
Set objResultFile = objFso.CreateTextFile(strSaveFileName , True)
objResultFile.Write strResult
objResultFile.Close
Wscript.Echo " 保存文件 " & strSaveFileName & " 完成! "
End If
Set objFso = Nothing
End Function
Function CreateWebServer(strServerComment,arrServerBindings,strMaxConnections,strPath) ' 建立站点
On Error Resume Next
Set objW3svc = GetObject("IIS://LocalHost/W3svc")
intSiteIndex = 1
Do While IsObject(objW3svc.GetObject("IIsWebServer",intSiteIndex))
If Err.Number <> 0 Then
' Wscript.Echo Err.Description
Err.Clear()
Exit Do
End If
intSiteIndex = intSiteIndex + 1
Loop
Set objIIs = objW3svc.Create( " IIsWebServer " ,intSiteIndex)
If Err.Number <> 0 Then
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
CreateWebServer = 0
Exit Function
End If
objIIs.ServerSize = 1
objIIs.ServerComment = strServerComment
objIIs.ServerBindings = arrServerBindings
objIIs.MaxConnections = strMaxConnections
objIIs.EnableDefaultDoc = True
objIIs.SetInfo
Set objIIsWeb = objIIs.Create( " IIsWebVirtualDir " , " Root " )
If Err.Number <> 0 Then
Wscript.Echo " Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear()
CreateWebServer = 0
Exit Function
End If
objIIsWeb.Path = strPath
objIIsWeb.AccessRead = True
objIIsWeb.AccessWrite = False
objIIsWeb.EnableDirBrowsing = False
objIIsWeb.EnableDefaultDoc = True
objIIsWeb.AccessScript = True
objIIsWeb.AppIsolated = 2
objIIsWeb.AppCreate2 2
objIIsWeb.AppFriendlyName = " 默认应用程序 "
objIIsWeb.SetInfo
Set objW3svc = Nothing
Set objIIs = Nothing
Set objIIsWeb = Nothing
CreateWebServer = 1
End Function
Function HELP()
Wscript.Echo vbCrLf & " IIS Manager By Tom "
Wscript.Echo " Made By Tom "
Wscript.Echo " http://www.zz.la/ " & vbCrLf
Wscript.Echo " Cscript iismanager.vbs [操作类型] [文件名] " & vbCrLf
Wscript.Echo " Backup (备份IIS站点信息到一个文本文件!) "
Wscript.Echo " Restore (从一个文本文件恢复IIS站点信息!) "
Wscript.Echo " ChangeIP (修改所有IIS站点IP!) "
Wscript.Echo " Change_App (修改所有IIS站点应用程序级别!) "
Wscript.Echo " Search (根据条件查找站点信息!) "
Wscript.Echo " DeleteSite (根据条件批量删除站点) " & vbCrLf
End Function
' 想到的新功能
' 备份功能增加一个备份站点数据的功能,通过RAR自动打包,默认打包到站点的上级目录,可选择打包的指定的目录
' 增加建立隐藏虚拟目录的功能
' 批量删除绑定的指定IP
' 程序运行时判断IIS是否启动
' 恢复站点绝对路径的ACL信息
//H:CScript 将默认的脚本宿主改为 CScript.exe
//H:WScript 将默认的脚本宿主改为 WScript.exe (默认)
//I 交互模式(默认,与 //B 相对)
//Job:xxxx 执行一个 WSF 工作
//Logo 显示徽标(默认)
//Nologo 不显示徽标:执行时不显示标志
//S 为该用户保存当前命令行选项
//T:nn 超时设定秒:允许脚本运行的最长时间
//X 在调试器中执行脚本
//U 用 Unicode 表示来自控制台的重定向 I/O