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

Ken*_*n J 7 powershell iis-7

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

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

我想在框中设置每个应用程序池的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"'}
Run Code Online (Sandbox Code Playgroud)

这给了我一个"找不到指定路径"的错误.任何想法我怎么能这个工作?

Jam*_*phy 6

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

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

这对我有用:

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools |
    Select-Object -ExpandProperty PSPath |
    ForEach-Object { Set-ItemProperty $_ ManagedPipelineMode 1 }
Run Code Online (Sandbox Code Playgroud)


Kei*_*ill 1

如果您使用的是 Powershell V2,我将使用 WebAdministration 模块,例如通过提升的提示符:

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Foreach {$_.ManagedPipelineMode = 'Classic'}
Run Code Online (Sandbox Code Playgroud)