Назад | Перейти на главную страницу

iis vbscript удаляет все привязки сайтов и заменяет их списком новых привязок

У меня есть один хост с более чем 500 привязками, и я хотел бы сначала очистить этот хост от всех его привязок и заменить их из списка привязок в файле. Формат заполнения будет представлять собой список привязок, разделенных запятыми, например site.com, site1.com и т. Д.

до сих пор я смотрел вниз, чтобы сначала найти хост, на котором я хочу выполнить эту задачу, который пытается удалить все привязки .... в основном я пытаюсь: 1: удалить все привязки, назначенные в настоящее время, 2: добавить привязки из файлы.

Обновление 1: теперь у меня есть каждая привязка, которую я хочу удалить, записывая в файл .... теперь, как я могу получить это, чтобы удалить фактическую привязку ...

Обновление 2: после того, как я слишком долго выдергивал волосы, я, наконец, очищаю привязки и добавляю новую привязку к выбранному домену. Все, что мне нужно сделать, это подключить чтение вставки в файл для получения списка привязок, которые нужно добавить ...

OPTION EXPLICIT
DIM CRLF, TAB, strServer, objWebService, domains, oIIS, oBindingNew, oSite
TAB  = CHR( 9 )
CRLF = CHR( 13 ) & CHR( 10 )
IF WScript.Arguments.Length = 1 THEN
    strServer = WScript.Arguments( 0 )
ELSE
    strServer = "localhost"
END IF
SET objWebService = GetObject( "IIS://" & strServer & "/W3SVC" )
EnumWebsites objWebService
SUB EnumWebsites( objWebService )
    DIM objWebServer, objWebServerRoot, strBindings

    FOR EACH objWebServer IN objWebService

            IF objWebserver.Class = "IIsWebServer" THEN
            IF objWebserver.ServerComment = "MobileCC" THEN
            SET objWebServerRoot = GetObject(objWebServer.adspath & "/root")
                    WScript.Echo _
                            "Site ID = " & objWebserver.Name & CRLF & _
                            "Comment = """ & objWebServer.ServerComment & """ " & CRLF & _
                            "State   = " & State2Desc( objWebserver.ServerState ) & CRLF & _
                            "Path   = " & objWebServerRoot.path & CRLF & _
                            "LogDir  = " & objWebServer.LogFileDirectory & _
                            ""
                    ' Enumerate the HTTP bindings (ServerBindings) and
                    ' SSL bindings (SecureBindings)
                    strBindings = EnumBindings( objWebServer.ServerBindings ) & _
                                                EnumBindings( objWebServer.SecureBindings )
                    IF NOT strBindings = "" THEN
                            ' Output current bindings
                            WScript.Echo "IP Address" & TAB & _
                                                     "Port" & TAB & _
                                                     "Host" & CRLF & _
                                                     strBindings
                    END IF

                    ' Reset Bindings for this domain
                    objWebserver.Put "ServerBindings", ""
            objWebserver.SetInfo

                    ' add a new binding
                    domains="www.NEWBINDING.com"
                    Set oIIS = GetObject("winmgmts:root\WebAdministration")
                    Set oBindingNew = oIIS.Get("BindingElement").SpawnInstance_            
                    oBindingNew.BindingInformation = "*:80:" & domains            
                    oBindingNew.Protocol = "http"  
                    Set oSite = oIIS.Get("Site.Name='MobileCC'")
                    oSite.Bindings= array(oBindingNew)
                    oSite.put_


            END IF
            END IF                  
    NEXT
        FOR EACH objWebServer IN objWebService
            IF objWebserver.Class = "IIsWebServer" THEN
            IF objWebserver.ServerComment = "MobileCC" THEN
                    ' Enumerate the HTTP bindings (ServerBindings) and
                    ' SSL bindings (SecureBindings)
                    strBindings = EnumBindings( objWebServer.ServerBindings ) & _
                                                EnumBindings( objWebServer.SecureBindings )
                    IF NOT strBindings = "" THEN
                            ' Output current bindings
                            WScript.Echo "IP Address" & TAB & _
                                                     "Port" & TAB & _
                                                     "Host" & CRLF & _
                                                     strBindings
                    END IF
            END IF
            END IF
        NEXT    
END SUB

FUNCTION EnumBindings( objBindingList )
    DIM i, strIP, strPort, strHost
    DIM reBinding, reMatch, reMatches
    SET reBinding = NEW RegExp
    reBinding.Pattern = "([^:]*):([^:]*):(.*)"

    FOR i = LBOUND( objBindingList ) TO UBOUND( objBindingList )
        ' objBindingList( i ) is a string looking like IP:Port:Host
        SET reMatches = reBinding.Execute( objBindingList( i ) )
        FOR EACH reMatch IN reMatches
            strIP = reMatch.SubMatches( 0 )
            strPort = reMatch.SubMatches( 1 )
            strHost = reMatch.SubMatches( 2 )

            ' Do some pretty processing
            IF strIP = "" THEN strIP = "All Unassigned"
            IF strHost = "" THEN strHost = "*"
            IF LEN( strIP ) < 8 THEN strIP = strIP & TAB

            EnumBindings = EnumBindings & _
                           strIP & TAB & _
                           strPort & TAB & _
                           strHost & TAB & _
                           ""
        NEXT

        EnumBindings = EnumBindings & CRLF
    NEXT

END FUNCTION

FUNCTION State2Desc( nState )
    SELECT CASE nState
    CASE 1
        State2Desc = "Starting (MD_SERVER_STATE_STARTING)"
    CASE 2
        State2Desc = "Started (MD_SERVER_STATE_STARTED)"
    CASE 3
        State2Desc = "Stopping (MD_SERVER_STATE_STOPPING)"
    CASE 4
        State2Desc = "Stopped (MD_SERVER_STATE_STOPPED)"
    CASE 5
        State2Desc = "Pausing (MD_SERVER_STATE_PAUSING)"
    CASE 6
        State2Desc = "Paused (MD_SERVER_STATE_PAUSED)"
    CASE 7
        State2Desc = "Continuing (MD_SERVER_STATE_CONTINUING)"
    CASE ELSE
        State2Desc = "Unknown state"
    END SELECT

END FUNCTION

IIS8: цикл, который обновляет привязки, будет каждый раз отменять и добавлять только последний в списке предоставленных доменов. Еще одна мысль, которую следует учитывать, IIS требует, чтобы каждая привязка была уникальной. Итак, вместо цикла вы можете просто

objWebserver.Put "ServerBindings", ArrayOfValues

objWebserver.SetInfo

Он добавит все предоставленные заголовки хоста

После тонны одиноких исследований я надеюсь, что этот ответ действительно поможет другим сэкономить время.

не стесняйтесь комментировать, если у вас есть какие-либо вопросы, это некрасиво, и я уверен, что его можно было бы написать лучше, но для одной из задач он работает.

OPTION EXPLICIT
DIM CRLF, TAB, strServer, objWebService, objWebServerTMP, objWebServer, objWebServerRoot, strBindings, domain, domains, domainsMobile, domainsMobileCC, oIIS, oBindingNew, oSite, ArrayOfValues, MobileSiteName
TAB  = CHR( 9 )
CRLF = CHR( 13 ) & CHR( 10 )
IF WScript.Arguments.Length = 1 THEN
    strServer = WScript.Arguments( 0 )
ELSE
    strServer = "localhost"
END IF
SET objWebService = GetObject( "IIS://" & strServer & "/W3SVC" )
EnumWebsites objWebService

SUB EnumWebsites( objWebService )

    FOR EACH objWebServer IN objWebService

            IF objWebserver.Class = "IIsWebServer" THEN
            '**************************************************
            IF objWebserver.ServerComment = "SiteName" THEN
            '**************************************************
            SET objWebServerRoot = GetObject(objWebServer.adspath & "/root")
                    WScript.Echo _
                            "Site ID = " & objWebserver.Name & CRLF & _
                            "Comment = """ & objWebServer.ServerComment & """ " & CRLF & _
                            "State   = " & State2Desc( objWebserver.ServerState ) & CRLF & _
                            "Path   = " & objWebServerRoot.path & CRLF & _
                            "LogDir  = " & objWebServer.LogFileDirectory & _
                            ""
                    ' Enumerate the HTTP bindings (ServerBindings) and
                    ' SSL bindings (SecureBindings)
                    strBindings = EnumBindings( objWebServer.ServerBindings ) & _
                                                EnumBindings( objWebServer.SecureBindings )
                    IF NOT strBindings = "" THEN
                            ' Output current bindings
                            WScript.Echo "IP Address" & TAB & _
                                                     "Port" & TAB & _
                                                     "Host" & CRLF & _
                                                     strBindings
                    END IF

                    ' Reset Bindings for this domain
                    objWebserver.Put "ServerBindings", ""
            objWebserver.SetInfo
                    '**************************************************
                    domainsM="www.test1.com,www.test2.com"
                    ArrayOfValues = Split(domainsM,",")
                    '**************************************************
                    'For i = 0 To Ubound(ArrayOfValues)
                    '       WScript.Echo ArrayOfValues(i)
                    'NEXT

                    Dim x
                    For x = 0 To Ubound(ArrayOfValues)

                        domain=ArrayOfValues(x)
                        Set oIIS = GetObject("winmgmts:root\WebAdministration")
                        Set oBindingNew = oIIS.Get("BindingElement").SpawnInstance_            
                        oBindingNew.BindingInformation = "*:80:" & domain            
                        oBindingNew.Protocol = "http"  
                        '**************************************************
                        Set oSite = oIIS.Get("Site.Name='SiteName'")
                        '**************************************************
                        oSite.Bindings= array(oBindingNew)
                        oSite.put_

                    NEXT

            END IF
            END IF                  
    NEXT
        FOR EACH objWebServerTMP IN objWebService
            IF objWebServerTMP.Class = "IIsWebServer" THEN
            '**************************************************
            IF objWebServerTMP.ServerComment = "SiteName" THEN
            '**************************************************
                    ' Enumerate the HTTP bindings (ServerBindings) and
                    ' SSL bindings (SecureBindings)
                    strBindings = EnumBindings( objWebServerTMP.ServerBindings ) & _
                                                EnumBindings( objWebServerTMP.SecureBindings )
                    IF NOT strBindings = "" THEN
                            ' Output current bindings
                            WScript.Echo "IP Address" & TAB & _
                                                     "Port" & TAB & _
                                                     "Host" & CRLF & _
                                                     strBindings
                    END IF
            END IF
            END IF
        NEXT    
END SUB

FUNCTION EnumBindings( objBindingList )
    DIM i, strIP, strPort, strHost
    DIM reBinding, reMatch, reMatches
    SET reBinding = NEW RegExp
    reBinding.Pattern = "([^:]*):([^:]*):(.*)"

    FOR i = LBOUND( objBindingList ) TO UBOUND( objBindingList )
        ' objBindingList( i ) is a string looking like IP:Port:Host
        SET reMatches = reBinding.Execute( objBindingList( i ) )
        FOR EACH reMatch IN reMatches
            strIP = reMatch.SubMatches( 0 )
            strPort = reMatch.SubMatches( 1 )
            strHost = reMatch.SubMatches( 2 )

            ' Do some pretty processing
            IF strIP = "" THEN strIP = "All Unassigned"
            IF strHost = "" THEN strHost = "*"
            IF LEN( strIP ) < 8 THEN strIP = strIP & TAB

            EnumBindings = EnumBindings & _
                           strIP & TAB & _
                           strPort & TAB & _
                           strHost & TAB & _
                           ""
        NEXT

        EnumBindings = EnumBindings & CRLF
    NEXT

END FUNCTION

FUNCTION State2Desc( nState )
    SELECT CASE nState
    CASE 1
        State2Desc = "Starting (MD_SERVER_STATE_STARTING)"
    CASE 2
        State2Desc = "Started (MD_SERVER_STATE_STARTED)"
    CASE 3
        State2Desc = "Stopping (MD_SERVER_STATE_STOPPING)"
    CASE 4
        State2Desc = "Stopped (MD_SERVER_STATE_STOPPED)"
    CASE 5
        State2Desc = "Pausing (MD_SERVER_STATE_PAUSING)"
    CASE 6
        State2Desc = "Paused (MD_SERVER_STATE_PAUSED)"
    CASE 7
        State2Desc = "Continuing (MD_SERVER_STATE_CONTINUING)"
    CASE ELSE
        State2Desc = "Unknown state"
    END SELECT

END FUNCTION