我尝试在Azure中部署的网站的根目录中配置Web应用程序的serviceAutoStartEnabled和serviceAutoStartProvider属性。如果我了解自动启动过程,可以在单个网站下为特定Web应用程序设置这些属性。
我正在web角色启动期间(在启动任务中获得提升的权限之后)执行powershell脚本,以执行此处所示的Web管理任务:
write-host "Begin RoleStart.ps1"
import-module WebAdministration
Add-WindowsFeature NET-WCF-HTTP-Activation45,NET-WCF-TCP-Activation45,NET-WCF-Pipe-Activation45
$listenerService = Get-WmiObject win32_service -filter "name='NetPipeActivator'"
$listenerService.ChangeStartMode("Automatic")
$listenerService.StartService()
$WebRoleSite = (Get-WebSite "*web*")
$WebRoleSiteName = $WebRoleSite.Name
$WebRoleAppPool = $WebRoleSite.ApplicationPool
New-ItemProperty "IIS:/Sites/$WebRoleSiteName" -name bindings -value @{protocol="net.pipe";bindingInformation="*"}
Set-ItemProperty "IIS:/Sites/$WebRoleSiteName" -Name EnabledProtocols 'http,net.pipe'
Set-ItemProperty -Path "IIS:\AppPools\$WebRoleAppPool" -Name startMode -Value AlwaysRunning
write-host "End RoleStart.ps1"
这会根据需要使用AlwaysRunning属性设置应用程序池,但我仍需要为特定于应用程序的serviceAutoStartEnabled和serviceAutoStartProvider属性提供新值。
我知道我可以使用Get-WebApplication获取应用程序并设置这两个属性但是当我运行以下powershell命令时,我没有看到根(" /")应用程序的应用程序:
(Get-WebApplication "*") | format-list *
那么如何使用webadministration cmdlet为根应用程序设置这两个属性?
答案 0 :(得分:0)
您可以使用通用Set-ItemProperty
cmdlet设置它们。例如:
Set-ItemProperty "IIS:\Sites\Default Web Site\Test\" -name serviceAutoStartEnabled -Value $true
Set-ItemProperty "IIS:\Sites\Default Web Site\Test\" -name serviceAutoStartProvider -Value ???
其中"测试"是一个Web应用程序。抱歉,我不知道serviceAutoStartProvider
的有效值是多少。有时它们是整数,即使Get-ItemProperty
将它们显示为字符串。
您可以使用以下方式查看值:
Get-ItemProperty "IIS:\Sites\Default Web Site\Test\" -name serviceAutoStartEnabled
您也可以在对象上查看它,例如:
Get-WebApplication "*" | % { Write-Output "Path: $($_.Path), AutoStartEnabled: `
$($_.Attributes["serviceAutoStartEnabled"].Value) AutoStartProvider: `
$($_.Attributes["serviceAutoStartProvider"].Value)" }
但是,如果您尝试设置Value
,则会出现错误,因为它是只读的。
最后,您可以使用Get-WebConfigurationProperty
和Set-WebConfigurationProperty
以及一些非常丑陋的xpath来获取和设置值。例如:
Get-WebConfigurationProperty "/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/application[@path='/Test']" -Name serviceAutoStartEnabled
Set-WebConfigurationProperty "/system.applicationHost/sites/site[@name='Default Web Site' and @id='1']/application[@path='/Test']" -Name serviceAutoStartEnabled -Value $true
请注意,这两个cmdlet比Get/Set-ItemProperty
更灵活,因为它们支持配置的所有部分,而Get/Set-ItemProperty
仅支持IIS:提供程序公开的内容。
答案 1 :(得分:0)
我知道现在已经相当老了,但是,对于那些在搜索过程中遇到这种情况的人来说,这就是我最终做到的方式:
Import-Module WebAdministration;
$WebSiteName = "My Web Site";
$WebAppName = "MyWebApp";
$ProviderName = "PreWarmMyWebApp";
$ProviderType = "MyNamespace.MyClass, MyAssembly";
Add-WebConfiguration -PSPath 'IIS:\' -Filter '/system.applicationHost/serviceAutoStartProviders' -Value @{ name=$ProviderName; type=$ProviderType };
Set-WebConfigurationProperty -PSPath 'IIS:\' -Filter "/system.applicationHost/sites/site[@name='$WebSiteName']/application[@path='/$WebAppName']" -Name "serviceAutoStartEnabled" -Value "true";
Set-WebConfigurationProperty -PSPath 'IIS:\' -Filter "/system.applicationHost/sites/site[@name='$WebSiteName']/application[@path='/$WebAppName']" -Name "ServiceAutoStartProvider" -Value $ProviderName;
我从Swoogan的帖子中获得了Set-WebConfigurationProperty位,但是,当我自己想出serviceAutoStartProviders部分时,我认为我发布了一个完整的解决方案:)