CScript

用法: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信息


 //H:CScript 将默认的脚本宿主改为 CScript.exe
 //H:WScript 将默认的脚本宿主改为 WScript.exe (默认)
 //I         交互模式(默认,与 //B 相对)
 //Job:xxxx  执行一个 WSF 工作
 //Logo      显示徽标(默认)
 //Nologo    不显示徽标:执行时不显示标志
 //S         为该用户保存当前命令行选项
 //T:nn      超时设定秒:允许脚本运行的最长时间
 //X         在调试器中执行脚本
 //U         用 Unicode 表示来自控制台的重定向 I/O

 

 

 

posted @ 2009-03-24 14:16  ahuo  阅读(1376)  评论(0编辑  收藏  举报