2012-05-23 19 views

Respuesta

-1

He estado buscando esto también, pero no pude encontrar nada en WebAdministration para establecer esta opción. Presumiblemente, el enfoque sería llamar a New-ItemProperty en la aplicación web correcta. Lamentablemente, no pude obtener la aplicación "predeterminada" para un sitio web determinado ni establecer esta propiedad en él. Parece que el módulo de Administración web (que habilita cmdlets como New-WebSite) se escribió teniendo en cuenta versiones anteriores de IIS, y ciertamente antes del módulo de inicialización de la aplicación.

Esto es una solución, que obliga a configurar estas propiedades editando el archivo subyacente applicationHost.config. Esta es una versión ligeramente simplificada de un script que estamos usando ahora. Tendrá que ejecutar esta secuencia de comandos como administrador.

# Copy applicationHost.config to the temp directory, 
# Edit the file using xml parsing, 
# copy the file back, updating the original 

$file = "applicationhost.config" 
$source = Join-Path "$env:windir" "\system32\inetsrv\config\$file" 
$temp = Join-Path "$env:temp" "$([Guid]::NewGuid().ToString())" 
$tempFile = Join-Path "$temp" "$file" 

#update all applications in websites whose name matches this search term 
$search = "website name to search for" 

#copy applicationHost.config to temp directory for edits 
#assignments to $null simply silence output 
$null = New-Item -itemType Directory -path $temp 
$null = Copy-Item "$source" "$temp" 

# Load the config file for edits 
[Xml]$xml = Get-Content $tempFile 

# find sites matching the $search string, enable preload on all applications therein 
$applications = $xml.SelectNodes("//sites/site[contains(@name, `"$search`")]/application") 
$applications | % { 
    $_.SetAttribute("preloadEnabled", "true") 
} 

#save the updated xml 
$xml.Save("$tempFile.warmed") 

#overwrite the source with updated xml 
Copy-Item "$tempfile.warmed" "$source" 

#cleanup temp directory 
Remove-Item -recurse $temp 
4

De hecho, hay una manera de hacer esto (suponiendo que tiene una sola aplicación en/que desea establecer para y que conoce el nombre de su sitio):

[System.Reflection.Assembly]::LoadFrom("C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll") 
$serverManager = (New-Object Microsoft.Web.Administration.ServerManager) 
$serverManager.Sites["YOUR_SITE_NAME"].Applications["/"].SetAttributeValue("preloadEnabled", $true) 
$serverManager.CommitChanges() 
+1

Este es el único enfoque eso funcionó para mí al configurar el atributo preloadEnabled de la aplicación "predeterminada" de un sitio web específico (path = "/"). Set-ItemProperty no parece poder establecer el atributo preloadEnabled para la aplicación raíz. Lo he probado con éxito en dos plataformas: Windows 7 SP1 de 64 bits con IIS 7.5 y el módulo de inicialización de aplicaciones instalado, así como Windows Server 2012 R2 de 64 bits con IIS 8.5. Ambos entornos tienen Windows Management Framework 5.0 RTM (es decir, Powershell 5.0) instalado para sus respectivas plataformas. – Wade

23

Este debería hacer el truco. Puede usar el get-itemproperty para verificar que funcionó. Me tomó un tiempo averiguar dónde encontrar preloadEnabled dentro de Powershell pero si canalizas la ruta del sitio a get-member, puedes seguir trabajando desde allí.

import-module webadministration 
set-itemproperty IIS:\Sites\SiteName -name applicationDefaults.preloadEnabled -value True 
+0

Funciona a la perfección, importante recordar aquí es: preloadEnabled distingue entre mayúsculas y minúsculas. Además, utilicé ([System.Convert] :: ToBoolean ("True")) en lugar de $ true. – sebastiaan

+0

También necesitaba escribir "applicationDefaults" con la carcasa correcta para que funcione. De lo contrario funciona bien. –

+0

Esta es la respuesta. El truco es agregar "applicationDefaults". antes de "preloadEnabled" –

5

Esto es un poco tarde, pero esto ayudará a otros ... Esto funcionó para mí y fue un poco menos detallado. La diferencia clave es que me quita ApplicationDefaults porque yo soy la creación de la aplicación, no los valores predeterminados aquí:

Set-ItemProperty IIS:\Sites\<siteName>\<applicationName> -name preloadEnabled -value True 

DONDE: poder Sitio Web iguales defecto fuerzas iguales MyApplication

1
$w = New-Item "IIS:\Sites\AAA" -type site –physicalPath "C:\W" -bindings $binding 
$w.**Collection[0].preloadEnabled = $true** 
$w | Set-Item 
Cuestiones relacionadas