2012-05-23 2 views

ответ

-1

Я тоже искал это, но ничего не смог найти в WebAdministration, чтобы установить этот параметр. Предположительно, подход будет заключаться в вызове New-ItemProperty на правильном WebApplication. К сожалению, мне не удалось получить приложение «по умолчанию» для данного веб-сайта или установить на нем это свойство. Кажется, что модуль WebAdministration (который позволяет командлеты, такие как New-WebSite), был написан с более ранними версиями IIS и, безусловно, перед модулем инициализации приложения.

Это обходное решение, которое заставляет настроить эти свойства, редактируя основной файл applicationHost.config. Это немного упрощенная версия скрипта, который мы сейчас используем. Вам нужно будет запустить этот скрипт в качестве администратора.

# 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

Существует на самом деле способ сделать это (если у вас есть одно приложение на /, что вы хотите, чтобы установить его, и вы знаете имя вашего сайта):

[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

Это единственный подход который работал для меня при настройке атрибута preloadEnabled для приложения «по умолчанию» конкретного веб-сайта (path = «/»). Set-ItemProperty, похоже, не может установить атрибут preloadEnabled для корневого приложения. Я успешно протестировал это на двух платформах: Windows 7 SP1 64-bit w/IIS 7.5 и установленном модуле инициализации приложений, а также 64-битном Windows Server 2012 R2 с IIS 8.5. В обеих средах установлена ​​RTM для Windows Management Framework 5.0 (то есть Powershell 5.0) для соответствующих платформ. – Wade

23

Этот должен сделать трюк. Вы можете использовать get-itemproperty, чтобы убедиться, что он сработал. Мне потребовалось некоторое время, чтобы выяснить, где найти preloadEnabled в powershell, но если вы проложите путь к сайту до get-member, тогда вы сможете работать оттуда.

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

Работает отлично, важно здесь запомнить: preloadEnabled чувствителен к регистру. Кроме того, я использовал ([System.Convert] :: ToBoolean («True»)) вместо $ true. – sebastiaan

+0

Мне также нужно было написать «applicationDefaults» с правильным случаем, чтобы заставить его работать. В противном случае отлично работает. –

+0

Это ответ. Трюк добавляет «applicationDefaults». до «preloadEnabled» –

5

Это немного поздно, но это поможет другим ... Это сработало для меня и было немного менее подробным. Основное различие заключается в том, что я удалил ApplicationDefaults, потому что я устанавливаю приложения, а не по умолчанию здесь:

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

ГДЕ: мощь равна Default Web Site мощь равна MyApplication

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