Подтвердить что ты не робот

IIS7.5 PowerShell preloadEnabled

Возможно ли, что я могу использовать команду PowerShell (e, g, New-WebSite) для создания веб-сайта и установки сайта preloadEnabled = "true"?

4b9b3361

Ответ 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