Crie um site do IIS a partir de uma linha de comando (ou cscript)?

2

Existe uma maneira de criar scripts para a criação de um site do IIS 6? Eu não tenho acesso ao powershell, então teria que usar comandos regulares ou scripts cscript.

    
por Jim 20.05.2009 / 17:42

3 respostas

4

Este método funciona no Windows Server 2003 IIS 6.0:

strComputer = "."
Set objWMIService = GetObject _
    ("winmgmts:{authenticationLevel=pktPrivacy}\" _
        & strComputer & "\root\microsoftiisv2")

Set objWebService = objWMIService.ExecQuery _
    ("Select * From IISWebService")

arrBindings = Array(0)
Set arrBindings(0) = _
    objWMIService.Get("ServerBinding").SpawnInstance_()
arrBindings(0).IP = "192.168.1.1"
arrBindings(0).Port = "80"
arrBindings(0).Hostname = "www.example.com"

For Each objItem in objWebService
    objItem.CreateNewSite "Test Site", arrBindings, _
        "c:\inetpub\wwwroot\testsite"
Next

Este é o link para o Repositório de scripts do Microsoft TechNet relacionado a ou Gerenciando sites da Web no Internet Information Server 6.0 .

Outro artigo do TechNet útil explica como criar um AppPool programaticamente.

Aqui está um método alternativo, que também funciona no Windows Server 2000 (IIS 5.0). Escreva um arquivo .vbs:

IISWebName = "Name of the Web"
IISWebPath = "D:\Websites\MyWeb"
IISWebHeader = "http://www.example.com"
IISIPAddress = "10.0.0.10"

Set wsShell = CreateObject("WScript.Shell") 
wsShell.Run "iisweb.vbs /create """ & IISWebPath & """ """ & IISWebName & """ /b 80 /i """ & IISIPAddress & """" /d """ & IISWebHeader & """"

Se você quiser adicionar diretórios virtuais, poderá fazê-lo desta maneira:

oShell2.Run "iisvdir.vbs /create """ & IISWebName & """ pfengine ""D:\Common\engine"""
    
por 20.05.2009 / 19:06
1

Você provavelmente desejará personalizar o website também, em vez de deixá-lo com as configurações padrão. Depois de muito scrabbling ao redor, isso é o que eu vim com:

Sub CreateWebsite(name, hostName, physicalPath)
    ' Make connections to WMI, to the IIS namespace on the local machine. Then grab a reference to the WWW service 
    Dim locatorObj : set locatorObj = CreateObject("Wbemscripting.SWbemLocator") 
    Dim providerObj : set providerObj = locatorObj.ConnectServer(".", "root/MicrosoftIISv2") 
    Dim serviceObj : set serviceObj = providerObj.Get("IIsWebService='W3SVC'") 

    'Create a new instance as per splattne's answer
    Dim Bindings : Bindings = Array(0) 
    Set Bindings(0) = providerObj.get("ServerBinding").SpawnInstance_() 
    Bindings(0).IP = "" 
    Bindings(0).Port = "80" 
    Bindings(0).Hostname = hostName

    ' Create the new Web site using the CreateNewSite method of the IIsWebService object. 
    Dim newSitePath : newSitePath = serviceObj.CreateNewSite(name, Bindings, physicalPath) 

    ' CreateNewSite returns a string reference to the created web service. To alter the settings we need to create a string which references the root virtual directory settings.
    Dim settingsPath : settingsPath = Replace(Left(newSitePath, Len(newSitePath) - 1) & "/ROOT'", "IIsWebServer","IIsWebVirtualDirSetting")

    ' Grab a reference to the settings
    Dim settings : set settings = providerObj.get(settingsPath)

    ' By comparing the settings of an existing, manually set up site, and one created with Splattne's method I realised I needed to change the following
    settings.AspEnableParentPaths = True
    settings.AccessFlags = 512
    settings.AccessRead = True
    settings.AuthAnonymous = True
    settings.AuthFlags = 5
    settings.AuthNTLM = True
    settings.AccessScript = True
    settings.AppFriendlyName = name
    settings.Put_()

    ' Set a custom handler for 500 errors. In this case a url called 500.asp. This is a bit hacky but it works.
    settings.HttpErrors(41).Properties_("HttpErrorCode") = 500
    settings.HttpErrors(41).Properties_("HttpErrorSubcode") = "*"
    settings.HttpErrors(41).Properties_("HandlerType") = "URL"
    settings.HttpErrors(41).Properties_("HandlerLocation") = "/500.asp"
    settings.Put_()

    ' Start the service
    Dim newSite: set newSite = providerObj.Get(newSitePath)
    newSite.Start
End Sub
    
por 26.10.2009 / 11:27
0

Acho que o PowerShell é realmente para o IIS 7. Tem certeza de que deseja o IIS 6 e não o IIS 7? O IIS 7 tem o comando appcmd, que é um pouco difícil de usar, mas funciona.

    
por 20.05.2009 / 17:45

Tags