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

时间:2012-10-05 16:06:44

标签: powershell iis-7

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

 Get-WmiObject -namespace "root/MicrosoftIISv2" -class IIsApplicationPool |Select-Object -property @{N="Name";E={$name = $_.Name; $name.Split("/")[2] }} | Format-Table

我想在框中设置每个应用程序池的managedpipeline。我试过这个:

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

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

3 个答案:

答案 0 :(得分:5)

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

  1. Set-ItemProperty将Path作为输入。 Get-ChildItem会 返回一组ConfigurationElement个对象,而不是Path 字符串。
  2. ManagedPipelineMode内部存储为整数,所以 你必须知道正确的"魔法"传入的号码。 幸运的是,在#34;备注"中记录了here。部分。
  3. 这对我有用:

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

答案 1 :(得分:0)

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

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Foreach {$_.ManagedPipelineMode = 'Classic'}

答案 2 :(得分:0)

关注documentation

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

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