PowerShell에서 IIS 웹 사이트의 활성화된 사전 로드(preloadEnabled) 값 가져오기

5710 단어 IISPowerShell

소개



이전에 "【ASP.NET】IIS Application Initialization에 의한 최초 액세스의 고속화"의 기사를 썼습니다.
이 경우 IIS 대상 웹 사이트의 고급 설정 대화 상자를 활성화 된 사전로드를 True로 변경합니다.


도입 설정했을 때에 IIS 설정이 올바르게 행해졌는지 체크하는 프로그램을 짜고 있었습니다만, 「유효화된 프리로드」의 값이 아무래도 취득할 수 없는, 넷으로 조사해도 프리로드를 설정 하는 방법을 찾는데 얻는 방법을 찾을 수 없습니다.
휴일이 되었으므로 집에서 조사해 보았습니다.

조사



Get-Item에서는 활성화된 프리로드(preloadEnabled)를 찾을 수 없습니다.
PS>Get-Item IIS:\Sites\test
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
test             2    Stopped    C:\Inetpub\wwwroot\Test        http *:80:

그물을 살펴보면 값을 설정하는 방법을 찾을 수 있습니다. 그렇다면 값을 세트 할 수 있다면 취득도 할 수 있지 않을까 생각하네요.
IIS7.5 PowerShell preloadEnabled - stackoverflow
PS>import-module webadministration
PS>set-itemproperty IIS:\Sites\SiteName -name applicationDefaults.preloadEnabled -value True

확실히 값은 취득할 수 있었습니다만, 결과는 False 그러니까 다릅니다. applicationDefaults 가 되어 있으므로, 상속원의 값을 취득하고 있는 것 같다.
PS>import-module webadministration
PS>get-itemproperty IIS:\Sites\test -name applicationDefaults.preloadEnabled | Select Value
Value
-----
False

다른 답변을 시도했습니다. 이것도 설정이므로, 취득하는 방법으로 변경합니다.
"YOUR_SITE_NAME"은 대상 사이트명으로 변경한다.
PS>[System.Reflection.Assembly]::LoadFrom("C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll")
PS>$serverManager = (New-Object Microsoft.Web.Administration.ServerManager)
PS>$serverManager.Sites["YOUR_SITE_NAME"].Applications["/"].SetAttributeValue("preloadEnabled", $true)
PS>$serverManager.CommitChanges()

이 방법이라면 값을 얻을 수있었습니다. 또한 위의 방법으로 대상 사이트의 활성화된 프리로드(preloadEnabled)를 설정할 수도 있습니다.
PS>[System.Reflection.Assembly]::LoadFrom("C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll")
PS>$serverManager = (New-Object Microsoft.Web.Administration.ServerManager)
PS>$serverManager.Sites["test"].Applications["/"].GetAttributeValue("preloadEnabled")
True

이제 위의 방법을 찾기 전에 값을 얻을 수있는 방법이있었습니다.
IIS 설정은 "applicationHost.config"파일에 출력됩니다. XML 형식이므로 Get-Content를 사용하면 추적할 수 있습니다.
이 방법이라면 관리자 모드의 Powershell로 하지 않아도 얻을 수 있습니다.
PS>$xml = [XML](Get-Content C:\Windows\System32\inetsrv\config\applicationHost.config) 
PS>$xml.SelectNodes("//sites/site[`test`]/application").preloadEnabled
true

조사 검토



회사에서 의기양양하게 시험했더니 취득할 수 없었다(^-^;
대상의 웹 사이트는, Default Web Site의 부하의 어플리케이션 「test」이었기 때문에.

따라서, 어플리케이션 「test」까지 대상으로 하면 취득할 수 있었습니다.
PS>[System.Reflection.Assembly]::LoadFrom("C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll")
PS>$serverManager = (New-Object Microsoft.Web.Administration.ServerManager)
PS>$serverManager.Sites["Default Web Site"].Applications["/test"].GetAttributeValue("preloadEnabled")
True

Get-Content에서도, 어플리케이션 「test」까지 대상으로 하면 취득할 수 있었습니다.
PS>$xml = [XML](Get-Content C:\Windows\System32\inetsrv\config\applicationHost.config) 
PS>$xml.SelectNodes($xml.SelectNodes("//sites/site['Default Web Site']/application[@path='/test']").preloadEnabled
true

Get-WebConfiguration에서도 얻을 수있었습니다.
PS>Get-WebConfiguration "//sites/site['Default Web Site']/application[@path='/test']" | foreach { $_.attributes | select name, value }

Name                     Value
----                     -----
path                     /test
applicationPool          DefaultAppPool
enabledProtocols         http
serviceAutoStartEnabled  False
serviceAutoStartProvider
preloadEnabled           True

preloadEnabled만을 대상으로 한다.
PS>(Get-WebConfiguration "//sites/site['Default Web Site']/application[@path='/test']").GetAttributeValue("preloadEnabled")
True

마지막으로



설정 화면에 「유효화된 프리로드」가 있으니까, Get-Item으로 처음부터 취득할 수 있게 되어 있으면, 고생하지 않아도 되지만.

PowerShell을 아직 잘 사용하지 않았습니다.

좋은 웹페이지 즐겨찾기