8

我有一个可以列出机器上所有应用程序池的命令:

 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"'}

这给了我一个“找不到指定的路径”错误。有什么想法我可以如何工作吗?

4

3 回答 3

7

为了设置 Managed Pipeline 模式(或 AppPool 的任何属性),您需要使用 Set-ItemProperty。但它比这更有趣:

  1. Set-ItemProperty 将 Path 作为其输入。Get-ChildItem 将返回一个ConfigurationElement对象集合,而不是路径字符串。
  2. ManagedPipelineMode 在内部存储为整数,因此您必须知道要传入的正确“魔术”数字。幸运的是,这在此处的“备注”部分中有记录。

这对我有用:

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools |
    Select-Object -ExpandProperty PSPath |
    ForEach-Object { Set-ItemProperty $_ ManagedPipelineMode 1 }
于 2014-06-06T20:56:31.787 回答
2

遵循文档

$iisAppPoolName = "MyPool"
$appPool = New-WebAppPool -Name $iisAppPoolName  
$appPool.managedPipelineMode = "Classic"
$appPool |Set-Item

我测试过,IIS 8.0,Windows server 2012,它可以工作。

于 2017-10-25T19:49:29.297 回答
1

如果您使用的是 Powershell V2,我会使用 WebAdministration 模块,例如从提升的提示符中:

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Foreach {$_.ManagedPipelineMode = 'Classic'}
于 2012-10-05T16:20:49.090 回答