Возможно ли, что я могу использовать команду PowerShell (e, g, New-WebSite) для создания веб-сайта и установки сайта preloadEnabled = "true"?
IIS7.5 PowerShell preloadEnabled
Ответ 1
Я тоже искал это, но ничего не смог найти в WebAdministration, чтобы установить этот параметр. Предположительно, подход будет заключаться в вызове New-ItemProperty на правильном WebApplication. К сожалению, мне не удалось получить приложение "по умолчанию" для данного веб-сайта или установить на нем это свойство. Это своего рода походит на модуль WebAdministration (который позволяет командлеты, как Нью-WebSite) была написана с более ранними версиями IIS в виду, и, конечно, перед модулем инициализации приложения.
Это обходной путь, который заставляет устанавливать эти свойства, редактируя основной файл applicationHost.config. Это немного упрощенная версия script, которую мы сейчас используем. Вам нужно запустить этот script в качестве администратора.
# 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
Ответ 2
Это должно сделать трюк. Вы можете использовать get-itemproperty
, чтобы убедиться, что он сработал. Мне потребовалось некоторое время, чтобы выяснить, где найти preloadEnabled
внутри powershell, но если вы проложите путь сайта к get-member
, тогда вы сможете оттуда оттуда.
import-module webadministration
set-itemproperty IIS:\Sites\SiteName -name applicationDefaults.preloadEnabled -value True
Ответ 3
Фактически есть способ сделать это (если у вас есть одно приложение в /, для которого вы хотите установить его, и вы знаете имя своего сайта):
[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()
Ответ 4
Это немного поздно, но это поможет другим... Это сработало для меня и было немного менее многословно. Основное отличие состоит в том, что я удалил ApplicationDefaults, потому что я устанавливаю приложение, а не настройки по умолчанию:
Set-ItemProperty IIS:\Sites\<siteName>\<applicationName> -name preloadEnabled -value True
ГДЕ: "SiteName" может быть равно веб-сайту по умолчанию "ApplicationName" может быть равно MyApplication
Ответ 5
$w = New-Item "IIS:\Sites\AAA" -type site –physicalPath "C:\W" -bindings $binding
$w.**Collection[0].preloadEnabled = $true**
$w | Set-Item
Ответ 6
Старый вопрос, но я хотел поделиться своими мыслями.
Мне нужно было сделать это из сценария Octopus после развертывания, где мое приложение находилось в корне сайта. Я перепробовал все предложенные решения, и только Роберт Мур работал на меня.
Тем не менее, я закончил тем, что использовал это, которое также сделало работу:
$Site = Get-Item IIS:\Sites\<site name>
$Site.applicationDefaults.preloadEnabled = $true
$Site | Set-Item -Verbose