2010-02-11 16 views
6

Estoy tratando de crear un script de PowerShell que crea un nuevo sitio web de IIS 6 y pone las cosas como grupo de aplicaciones, mapas de aplicación de comodines, versión de ASP.NET, etc.Cómo actualizar sitio web existente de IIS 6 utilizando PowerShell

Después de una extensa búsqueda en Internet, encontré un script que me permite crear un nuevo sitio web pero no modificar todas las propiedades que necesito.

$newWebsiteName = "WebSiteName" 
$newWebsiteIpAddress = "192.168.1.100" 
$newWebSiteDirPath = "c:\inetpub\wwwroot\WebSiteName" 
$iisWebService = Get-WmiObject -namespace "root\MicrosoftIISv2" 
           -class "IIsWebService" 
$bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding' 
$bindings = $bindingClass.CreateInstance() 
$bindings.IP = $newWebsiteIpAddress 
$bindings.Port = "80" 
$bindings.Hostname = "" 
$result = $iisWebService.CreateNewSite 
       ($newWebsiteName, $bindings, $newWebSiteDirPath) 

Cualquier ayuda sobre cómo ampliar el ejemplo anterior es muy apreciada.

+0

Lo sentimos, ¿qué propiedades necesita modificar específicamente? –

Respuesta

1

El objeto $ result contiene la ruta al objeto IIsWebServer recién creado. Usted puede obtener acceso al directorio virtual, donde puede configurar más propiedades, haciendo lo siguiente:

$w3svcID = $result.ReturnValue -replace "IIsWebServer=", "" 
$w3svcID = $w3svcID -replace "'", "" 
$vdirName = $w3svcID + "/ROOT"; 

$vdir = gwmi -namespace "root\MicrosoftIISv2" 
      -class "IISWebVirtualDir" 
      -filter "Name = '$vdirName'"; 
# do stuff with $vdir 
$vdir.Put(); 
9

En primer lugar, muchas gracias a jrista para mí apuntando en la dirección correcta.

También encontré esto article muy útil.

Lo que sigue es una secuencia de comandos PowerShell para crear grupo de aplicaciones, sitio web y un certificado SelfSSL:

 

function CreateAppPool ([string]$name, [string]$user, [string]$password) 
{ 
    # check if pool exists and delete it - for testing purposes 
    $tempPool = gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPoolSetting" -filter "Name like '%$name%'" 
    if (!($tempPool -eq $NULL)) {$tempPool.delete()} 

    # create Application Pool 
    $appPoolSettings = [wmiclass] "root\MicrosoftIISv2:IISApplicationPoolSetting" 
    $newPool = $appPoolSettings.CreateInstance() 

    $newPool.Name = "W3SVC/AppPools/" + $name 
    $newPool.WAMUsername = $user 
    $newPool.WAMUserPass = $password 

    $newPool.PeriodicRestartTime = 1740 
    $newPool.IdleTimeout = 20 
    $newPool.MaxProcesses = 1 
    $newPool.AppPoolIdentityType = 3 

    $newPool.Put() 
} 

function CreateWebSite ([string]$name, [string]$ipAddress, [string]$localPath, [string] $appPoolName, [string] $applicationName) 
{ 
    # check if web site exists and delete it - for testing purposes 
    $tempWebsite = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '%$name%'" 
    if (!($tempWebsite -eq $NULL)) {$tempWebsite.delete()} 

    # Switch the Website to .NET 2.0 
    C:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/ 

    $iisWebService = gwmi -namespace "root\MicrosoftIISv2" -class "IIsWebService" 

    $bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding' 
    $bindings = $bindingClass.CreateInstance() 
    $bindings.IP = $ipAddress 
    $bindings.Port = "80" 
    $bindings.Hostname = "" 

    $iisWebService.CreateNewSite($name, $bindings, $localPath) 

    # Assign App Pool 
    $webServerSettings = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '%$name%'" 
    $webServerSettings.AppPoolId = $appPoolName 
    $webServerSettings.put() 

    # Add wildcard map 
    $wildcardMap = "*, c:\somewildcardfile.dll, 0, All" 
    $iis = [ADSI]"IIS://localhost/W3SVC" 
    $webServer = $iis.psbase.children | where { $_.keyType -eq "IIsWebServer" -AND $_.ServerComment -eq $name } 
    $webVirtualDir = $webServer.children | where { $_.keyType -eq "IIsWebVirtualDir" } 
    $webVirtualDir.ScriptMaps.Add($wildcardMap) 

    # Set Application name 
    $webVirtualDir.AppFriendlyName = $applicationName 

    # Save changes 
    $webVirtualDir.CommitChanges() 

    # Start the newly create web site 
    if (!($webServer -eq $NULL)) {$webServer.start()} 
} 

function AddSslCertificate ([string] $websiteName, [string] $certificateCommonName) 
{ 
    # This method requires for you to have selfssl on your machine 
    $selfSslPath = "\program files\iis resources\selfssl" 

    $certificateCommonName = "/N:cn=" + $certificateCommonName 

    $certificateValidityDays = "/V:3650" 
    $websitePort = "/P:443" 
    $addToTrusted = "/T" 
    $quietMode = "/Q" 


    $webServerSetting = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '$websiteName'" 
    $websiteId ="/S:" + $webServerSetting.name.substring($webServerSetting.name.lastindexof('/')+1) 

    cd -path $selfSslPath 
    .\selfssl.exe $addToTrusted $certificateCommonName $certificateValidityDays $websitePort $websiteId $quietMode 
} 

$myNewWebsiteName = "TestWebsite" 
$myNewWebsiteIp = "192.168.0.1" 
$myNewWebsiteLocalPath = "c:\inetpub\wwwroot\"+$myNewWebsiteName 
$appPoolName = $myNewWebsiteName + "AppPool" 
$myNewWebsiteApplicationName = "/" 
$myNewWebsiteCertificateCommonName = "mynewwebsite.dev" 

CreateAppPool $appPoolName "Administrator" "password" 
CreateWebSite $myNewWebsiteName $myNewWebsiteIp $myNewWebsiteLocalPath $appPoolName $myNewWebsiteApplicationName 
AddSslCertificate $myNewWebsiteName $myNewWebsiteCertificateCommonName 
+0

impresionante. Resumiría 10x si pudiera ... – mwjackson

+0

solo cambiar para hacer es eliminar el sitio web antes de eliminar el grupo de aplicaciones, de lo contrario se errores (separar las eliminaciones en sus propias funciones) – mwjackson

1

Este es un fragmento de PowerShell útil.

Intenté ejecutar esto y tengo problemas con las pruebas de eliminación. Eliminar no funciona en el grupo de aplicaciones cuando el sitio aún existe. Seguramente deberías ejecutar primero la prueba de eliminación de sitios web.

# check if web site exists and delete it - for testing purposes 
$tempWebsite = gwmi -namespace "root\MicrosoftIISv2" 
        -class "IISWebServerSetting" 
        -filter "ServerComment like '%$name%'" 
if (!($tempWebsite -eq $NULL)) {$tempWebsite.delete()} 

Ejecute esto primero, luego ejecute la prueba de borrado del grupo de aplicaciones.
Me doy cuenta de que los ha marcado como pruebas, pero seguramente es útil salir o eliminar si existe sitio web.

Cuestiones relacionadas