我有一个命令可以列出计算机上的所有应用程序池:
Get-WmiObject -namespace "root/MicrosoftIISv2" -class IIsApplicationPool |Select-Object -property @{N="Name";E={$name = $_.Name; $name.Split("/")[2] }} | Format-Table
我想设置盒子上每个应用程序池的托管管道。我试过这个:
Get-WmiObject -namespace "root/MicrosoftIISv2" -class IIsApplicationPool |Select-Object -property @{N="Name";E={$name = $_.Name; $name.Split("/")[2] }} | ForEach-Object {cmd /c "c:\windows\system32\inetsvr\appcmd.exe set apppool $name /managedPipleineMode:"Classic"'}
这给了我一个“找不到指定的路径”错误。我有什么想法可以让它发挥作用吗?
为了设置托管管道模式(或AppPool的任何属性),您需要使用Set-ItemProperty。但它比这更有趣:
ConfigurationElement
对象的集合,而不是 Path
字符串。这对我有用:
Import-Module WebAdministration
Get-ChildItem IIS:\AppPools |
Select-Object -ExpandProperty PSPath |
ForEach-Object { Set-ItemProperty $_ ManagedPipelineMode 1 }
编辑:对于后代,这里是从该链接定义的“神奇”数字。默认值为 0 (
Integrated
)。
价值 | 关键字 | 描述 |
---|---|---|
0 | 集成 | 托管管道以集成模式运行。 |
1 | 经典 | 托管管道以 ISAPI 模式运行。 |
遵循文档:
$iisAppPoolName = "MyPool"
$appPool = New-WebAppPool -Name $iisAppPoolName
$appPool.managedPipelineMode = "Classic"
$appPool |Set-Item
我测试过,IIS 8.0,Windows server 2012,它可以工作。
如果您使用的是 Powershell V2,我会使用 WebAdministration 模块,例如来自提升的提示:
Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Foreach {$_.ManagedPipelineMode = 'Classic'}