У меня есть один хост с более чем 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