Powershell 为所有应用程序池设置 ManagedPipeline

问题描述 投票:0回答:3

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

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

这给了我一个“找不到指定的路径”错误。我有什么想法可以让它发挥作用吗?

powershell iis-7
3个回答
8
投票

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

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

这对我有用:

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools |
    Select-Object -ExpandProperty PSPath |
    ForEach-Object { Set-ItemProperty $_ ManagedPipelineMode 1 }

编辑:对于后代,这里是从该链接定义的“神奇”数字。默认值为 0 (

Integrated
)。

价值 关键字 描述
0 集成 托管管道以集成模式运行。
1 经典 托管管道以 ISAPI 模式运行。

2
投票

遵循文档

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

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


1
投票

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

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Foreach {$_.ManagedPipelineMode = 'Classic'}
© www.soinside.com 2019 - 2024. All rights reserved.