PowerShellコマンド(New-WebSiteなど)を使用してWebサイトを作成し、サイトのpreloadEnabled = "true"を設定することはできますか?
7 に答える
これでうまくいくはずです。を使用して、get-itemproperty
機能したことを確認できます。PowerShell内のどこにpreloadEnabled
あるかを理解するのに少し時間がかかりましたが、サイトパスをにパイプするとget-member
、そこから作業を進めることができます。
import-module webadministration
set-itemproperty IIS:\Sites\SiteName -name applicationDefaults.preloadEnabled -value True
これは少し遅いですが、これは他の人を助けるでしょう...これは私にとってはうまくいき、少し冗長ではありませんでした。主な違いは、ここでデフォルトではなく、アプリケーションを設定しているため、ApplicationDefaultsを削除したことです。
Set-ItemProperty IIS:\Sites\<siteName>\<applicationName> -name preloadEnabled -value True
ここで、「SiteName」はデフォルトのWebサイトと同じである可能性があります「ApplicationName」はMyApplicationと同じである可能性があります
実際、これを行う方法があります(/に単一のアプリケーションがあり、それを設定し、サイトの名前を知っていると仮定します)。
[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()
次のように、Webサイトのルートアプリケーションのプリロードを有効にできます。
$w = New-Item "IIS:\Sites\AAA" -type site –physicalPath "C:\W" -bindings $binding
$w.Collection[0].preloadEnabled = $true
$w | Set-Item
よりきめ細かく決定論的なアプローチを提供できます。
# Creating the website:
$website = New-WebSite -Name $WebSiteName -PhysicalPath $WebSiteFolder -ApplicationPool $PoolName
# Setting preload enabled:
Set-WebConfigurationProperty `
-PSPath "IIS:\" `
-Filter "/system.applicationHost/sites/site[@name='$WebSiteName']/application[@path='/']" `
-Name "preloadEnabled" `
-Value $True # or $False to turn that off
私もこれを探していましたが、WebAdministrationでこのオプションを設定するものが見つかりませんでした。おそらく、アプローチは正しいWebApplicationでNew-ItemPropertyを呼び出すことです。残念ながら、特定のWebサイトの「デフォルト」アプリケーションを取得することも、このプロパティを設定することもできませんでした。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
古い質問ですが、私は自分の洞察を共有したいと思いました。
これは、アプリがサイトルートにあるOctopusのデプロイ後のスクリプトから行う必要がありました。私はここで提案されたすべての解決策を試しましたが、RobertMooreからのものだけが私のために働いていました。
しかし、私はこれを使用することになり、これも仕事をしました:
$Site = Get-Item IIS:\Sites\<site name>
$Site.applicationDefaults.preloadEnabled = $true
$Site | Set-Item -Verbose
警告:サイトにアプリがある場合は、これを行わないでください(@Sergey Nudnovからのコメントを参照)