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
更改网站和应用池设置
有两种基本的更改方法。
- 如果要更改简单属性,请使用 Set-ItemProperty。
- 如果要处理集合,并且想要添加新的集合项,请使用 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 配置设置进行配置更改。