2012-05-23 5 views

risposta

-1

Ho cercato anche questo, ma non ho trovato nulla in WebAdministration per impostare questa opzione. Presumibilmente l'approccio sarebbe quello di chiamare New-ItemProperty sulla WebApplication corretta. Sfortunatamente, non sono riuscito a ottenere l'applicazione "predefinita" per un determinato sito Web o a impostare questa proprietà su di esso. Sembra che il modulo WebAdministration (che abilita i cmdlet come New-WebSite) sia stato scritto pensando alle versioni precedenti di IIS e sicuramente prima del modulo di inizializzazione dell'applicazione.

Questa è una soluzione alternativa che impone l'impostazione di queste proprietà modificando il file application.host.config sottostante. Questa è una versione leggermente semplificata di uno script che stiamo usando ora. Avrai bisogno di eseguire questo script come amministratore.

# 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

V'è infatti un modo per fare questo (ammesso che abbiate una singola applicazione a/che si desidera impostare per e si conosce il nome del sito):

[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

Questo è l'unico approccio che ha funzionato per me quando si imposta l'attributo preloadEnabled dell'applicazione "predefinita" di un sito Web specifico (percorso = "/"). Set-ItemProperty non sembra in grado di impostare l'attributo preloadEnabled per l'applicazione root. L'ho testato con successo su due piattaforme: Windows 7 SP1 64-bit con IIS 7.5 e il modulo di inizializzazione dell'applicazione installato e Windows Server 2012 R2 64-bit con IIS 8.5. In entrambi gli ambienti è installato Windows Management Framework 5.0 RTM (ovvero Powershell 5.0) per le rispettive piattaforme. – Wade

23

Questo dovrebbe fare il trucco È possibile utilizzare get-itemproperty per verificare che funzioni. Mi ci è voluto un po 'per capire dove trovare preloadEnabled all'interno di PowerShell ma se instradi il percorso del sito a get-member, puoi procedere da lì.

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

Funziona perfettamente, importante qui da ricordare è: preloadEnabled è case-sensitive. Inoltre, ho usato ([System.Convert] :: ToBoolean ("True")) invece di $ true. – sebastiaan

+0

Avevo anche bisogno di scrivere "applicationDefaults" con il caso corretto per farlo funzionare. Altrimenti funziona bene. –

+0

Questa è la risposta. Il trucco sta aggiungendo "applicationDefaults." prima di "preloadEnabled" –

5

Questo è un po 'tardi, ma questo aiuterà gli altri ... Questo ha funzionato per me ed è stato un po' meno prolisso. La differenza chiave è che ho tolto ApplicationDefaults perché io pongo la domanda, escludono i valori predefiniti qui:

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

DOVE: forze Sito Web uguale predefinito potenza pari MyApplication

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