PowerShell 管理单元:对网站和应用池进行配置更改

作者:Thomas Deml

在本演练中,你将了解如何使用内置的 PowerShell cmdlet 更改 IIS 命名空间容器(如网站、Web 应用程序、虚拟目录和应用程序池)的简单属性。 下一个演练将介绍如何更改 system.webServer 部分和自定义部分上的配置属性。

介绍

PowerShell 管理单元的任务是提供可以使用常用内置 PowerShell cmdlet(如 New-Item、Get-Item、Get-ChildItems、Set-Item、Set-Item、Set-ItemProperty 等)管理的命名空间。 内置 cmdlet 适用于所有 PowerShell 提供的命名空间。 例如,New-Item c:\testdir 允许创建新的文件系统目录,但你也可以创建网站或应用程序池(例如 New-Item IIS:\AppPools\NewAppPool)等新的 IIS 对象。

在上一演练中,我们开始使用 New-item 和 Get-Item cmdlet。 本演练将探索更多内置 cmdlet。

通常,在创建这些项目后,可能需要更改这些项目上的设置。 为此,我们将使用内置 cmdlet New-ItemProperty 和 Set-ItemProperty。 我们还将了解如何使用 Get-Item 和 Set-Item。

本演练依赖于我们在上一演练中创建的网站“Demosite”及其 Web 应用程序和虚拟目录。

查看配置设置

在开始更改设置之前,我们需要先查看一下这些设置。 下面是一个用于查看“DemoSite”的配置设置的命令。

PS IIS:\> get-item IIS:\Sites\DemoSite
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
DemoSite         2    Started    c:\demosite                    http :8080:

这将为你提供显示该网站最重要的属性的视图。 不过,你可能对更多设置感兴趣。

下面是一个可提供更多详细信息的命令:

(Get-ItemProperty IIS:\Sites\DemoSite -Name bindings).Collection

在上面的示例中,我们使用了括号,因为必须先计算 Get-ItemProperty 调用,然后才能打印集合项。 这里的情况与数学计算中相似:(5 + 4) * 3 将首先计算 5 + 4,然后再乘以 3。 在本例中,将计算 Get-ItemProperty 命令的结果,得到的 IIS 配置对象将包含我们输出到屏幕的集合。

你可以将相同的策略用于其他属性或集合,如 AppPools processModel 部分。 例如,以下命令将返回 DemoAppPool 的 startupTimeLimit 的一个很好的 DateTime 对象:

PS IIS:\> (Get-ItemProperty IIS:\AppPools\DemoAppPool -name processModel).startupTimeLimit

Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 30
Milliseconds      : 0
Ticks             : 900000000
TotalDays         : 0.00104166666666667
TotalHours        : 0.025
TotalMinutes      : 1.5
TotalSeconds      : 90
TotalMilliseconds : 90000

更改网站和应用池设置

有两种基本的更改方法。

  1. 如果要更改简单属性,请使用 Set-ItemProperty。
  2. 如果要处理集合,并且想要添加新的集合项,请使用 New-ItemProperty。 在 IIS 默认安装中,绑定集合是 IIS 命名空间中使用的唯一集合。

Set-ItemProperty 和 New-ItemProperty

首先,让我们将附加绑定添加到 DemoSite:

PS IIS:\> New-ItemProperty IIS:\sites\DemoSite -name bindings -value @{protocol="http";bindingInform
ation=":8081:"}

PS IIS:\> dir IIS:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
DemoSite         2    Started    c:\demosite                    http :8080:
                                                                http :8081:

正如你所看到的,DemoSite 现在也在侦听端口 8081。

如果要修改现有属性,请使用 Set-ItemProperty。 例如,更改网站的名称:

PS IIS:\> Set-ItemProperty IIS:\Sites\DemoSite -name name -value NewDemoSite
PS IIS:\> dir iis:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
NewDemoSite      2    Started    c:\demosite                    http :8080:
                                                                http :8081:

让我们将其更改回旧名称:

PS IIS:\> Set-ItemProperty IIS:\Sites\NewDemoSite -name name -value DemoSite

我们还希望更改应用程序池在运行中所用的标识。 但是,我们必须先创建用户。 让我们使用 ADSI 来执行此操作

$computer = [ADSI]"WinNT://."
$user = $computer.Create("user", "DemoAppPoolUser")
$user.SetPassword("Secret!!Pw3009")
$user.SetInfo()

现在,我们已准备好将 DemoAppPool 配置为以此用户身份运行:

Set-ItemProperty iis:\apppools\DemoAppPool -name processModel -value @{userName="DemoAppPoolUser";password="Secret!!Pw3009";identitytype=3}

为了便于扩展,我们为属性名称及其值使用了一个优质的旧哈希表。 如果你忘记了如何使用改变,请参阅下面的链接

Set-Item 和 Get-Item

让我们执行相同的操作,即使用 set-item/get-item 组合将用户分配到应用程序池。 你可能更喜欢此变体,因为它允许你利用命令行完成功能。 若要查看其运作方式,请不要复制并粘贴以下命令。 请输入几个字符并使用 TAB 键来享受命令行完成功能的优势:

PS IIS:\AppPools> $demoPool = Get-Item IIS:\AppPools\DemoAppPool
PS IIS:\AppPools> $demoPool.processModel.userName = "DemoAppPoolUser"
PS IIS:\AppPools> $demoPool.processModel.password = "Secret!!Pw3009"
PS IIS:\AppPools> $demoPool.processModel.identityType = 3
PS IIS:\AppPools> $demoPool | Set-Item

总结

在本演练中,你学习了如何使用 PowerShell 提供的 cmdlet 来管理 IIS 命名空间容器,如网站和应用程序池。 学习了如何使用哈希表以及如何利用命令行完成功能。 在下一个演练中,你将了解如何使用 IIS 管理单元 cmdlet 来对未通过 IIS 管理单元命名空间公开的 IIS 配置设置进行配置更改。