管理 IIS 应用程序池:PowerShell 教程

需要密切关注您的IIS Web服务器应用程序池吗?这里有一个使用PowerShell在iis中创建应用程序池的指南。

当您管理一个可能有几十个或几百个应用程序池的IIS Web服务器群时,您会去哪里?当然是使用PowerShell脚本!通过使用作为IIS的一部分预装的WebAdministrationPowerShell模块和一点点PowerShell远程管理,您可以轻松地随心所欲地创建、修改和删除应用程序池。

让我们通过一些示例来说明如何实现这一点。

如果您以前从未使用过PowerShell来管理您的IIS服务器,您的第一反应可能是在大多数cmdlet上查找ComputerName。不幸的是,情况并非如此。

要远程管理IIS服务器,我们被迫使用带有Invoke-Command cmdlet的PowerShell远程。虽然这并不是不可接受的,但它确实使代码比可能更冗长。这并不是要阻止您使用PowerShell管理远程IIS服务器,而是提供一点信息。

相关内容:Invoke-Command:运行远程代码的最佳方式

I know I was pretty frustrated the first time I tried this and didn’t see that familiar ComputerName parameter on many of the cmdlets.

注意:今后,我们将构建要输入到脚本块中的代码。然后,我们将使用Invoke-Command 在远程IIS服务器上执行此脚本块。

使用PowerShell列出IIS应用程序池

要管理 Web 应用程序池,我们首先需要导入 WebAdministration 模块。

PS> Import-Module WebAdministration

这将引入所有 IIS 命令,同时创建 IIS 驱动器。这是大多数应用程序池配置将进行的地方。让我们首先检查是否已存在任何应用程序池。

PS> Get-ChildItem -Path IIS:\AppPools
 
 Name  State. Applications
 ----- ------ -------------
 GHI  Started

使用 PowerShell 创建新的 IIS 应用程序池

看起来我已经有一个叫做GHI的应用程序池。也许我想创建另一个。使用 IIS 驱动器使这变得非常容易。只需使用 New-Item 并指定路径。

PS> New-Item -Path IIS:\AppPools\MyAppPool
 
 Name      State.  Applications
 -----     ------  -------------
 MyAppPool Started

检查和修改应用程序池属性

I’ve now created a new app pool. We can then check all of the properties on that app pool using Get-ItemProperty and select all of the properties it returns with Select-Object. This will return all of the property names and values so you can get figure out which ones you need to modify with Set-ItemProperty.

Get-ItemProperty IIS:\AppPools\MyAppPool | select *

现在,您已经有一个应用程序池并且可以查看属性,让我们修改一个属性。也许我想在应用程序池中使用特定的 .NET 运行时版本。再次使用 IIS 驱动器,我可以使用 Set-ItemProperty 来管理应用程序池,就像我可以管理文件系统、注册表、证书和所有具有 PowerShell 驱动器的其他东西一样。

PS> Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name managedRuntimeVersion -Value 'v4.0'

通过使用 Set-ItemProperty,您可以修改几乎所有应用程序池的属性。

使用 PowerShell 删除应用程序池

最后,我们完成了我们的应用程序池,现在需要将其删除。这时我们有一个内置的 PowerShell 命令,叫做 Remove-WebAppPool。只需指定名称,它就会消失!

Remove-WebAppPool -Name MyAppPool

所有这些代码我们一直在本地执行,但是如果你需要在远程IIS服务器上运行呢?这就是PowerShell远程派上用场的地方。要做到这一点,我们只需要将所有这些代码打包到一个脚本块中,然后使用Invoke-Command在远程服务器上执行它。

$appPoolName = 'MyAppPool'
 $scriptBlock = {
    Import-Module WebAdministration
    New-Item -Path IIS:\AppPools\$using:appPoolName
    Set-ItemProperty -Path IIS:\AppPools\$using:appPoolName -Name managedRuntimeVersion -Value 'v4.0'
    Remove-WebAppPool -Name $using:appPoolName
 }
 
 Invoke-Command -ComputerName SOMEIISSERVER -ScriptBlock $scriptBlock

虽然功能不是很强大,这段代码会创建一个名为MyAppPool的新应用程序池,设置一个属性,然后将其删除。你会注意到我在使用$using变量。由于脚本块中的代码将在远程计算机上执行,这对于PowerShell来说是必要的,以扩展该变量并使用在客户端计算机上本地声明的$appPoolName的实际值。

如果你想了解更多关于管理IIS的一般信息,请查看Technet IIS管理页面。在那里,你会找到WebAdministration模块中包含的所有cmdlet以及如何使用它们。

Source:
https://adamtheautomator.com/powershell-iis-2/