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

需要时刻关注您的IIS Web服务器应用程序池吗?这是关于如何使用PowerShell在iis中创建应用程序池的指南。

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

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

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

为了远程管理IIS服务器,我们被迫使用PowerShell远程管理和Invoke-Command cmdlet。虽然这不是一项绝对要求,但它确实使代码比可能需要更冗长。这并不是要阻止您使用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应用程序池

要管理網絡應用程序池,我們首先需要導入WebAdministration模塊。

PS> Import-Module WebAdministration

這將引入所有的IIS cmdlet,並創建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驅動器,我可以像管理文件系統、註冊表、證書和所有其他具有PowerShell驅動器的東西一樣使用Set-ItemProperty來管理應用程序池。

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

通過使用Set-ItemProperty,您可以修改幾乎所有的應用程序池屬性。

使用PowerShell刪除應用程序池

最後,我們完成了應用程序池並需要將其刪除。這次我們有一個內置的PowerShell cmdlet叫做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/