PowerShell 管理单元:使用 IIS PowerShell 管理单元的基于任务的 cmdlet
作者:Thomas Deml
介绍
IIS PowerShell 管理单元 cmdlet 可分为三个类别:
- 提供程序层次结构所需的 cmdlet
- 低级配置 cmdlet
- 基于任务的 cmdlet
本演练介绍了基于任务的 IIS cmdlet,并提供了一些如何使用它的示例。
提供程序层次结构所需的 cmdlet
IIS 很早就决定将 IIS 配置作为一个含站点、应用程序、虚拟目录和应用程序池的层次结构提供。 好处是,客户可导航到层次结构中的站点或应用程序等位置,并设置此上下文中的设置。 若要支持导航层次结构,必须实现某些预定义的 PowerShell cmdlet,例如 New-Item、Set-ItemProperty 等。 该层次结构和这些内置 cmdlet 于 2008 年 4 月在 Tech Preview 1 中发布。
低级配置 cmdlet
IIS 配置系统在版本 7 中进行了全面修改。 新的配置系统完全基于 XML、架构驱动且完全可扩展。 新的 IIS FTP 服务器 (FTP7) 和其他许多 IIS 模块(如 URL 重写器、WebDAV 等)利用此扩展性插入 IIS 配置系统。
此扩展性使得很难发布带有静态参数的 cmdlet。 假设有人扩展了一个现有配置节(例如,有人向 virtualDirectory 配置节添加了 myFancyNewBehavior 属性)。 如果不修改 IIS cmdlet,则无法通过 PowerShell 管理单元 cmdlet 设置 fancyNewBehavior 设置。
IIS PowerShell 管理单元的 Technical Preview 1 仅包含考虑了总体配置扩展性的低级 cmdlet。 可使用这些 cmdlet 配置每个 IIS 配置设置(包含集合、枚举等的 100 多个配置节)。 这些低级 cmdlet 也可用于自定义配置(例如,如果使用自己的配置节扩展了 IIS 配置)。
以下是自 2008 年 4 月 Tech Preview 1 发布以来我们发布的低级 cmdlet 列表:
Add-WebConfiguration
Add-WebConfigurationProperty
Begin-WebCommitDelay
Clear-WebConfiguration
End-WebCommitDelay
Get-WebURL
Get-WebConfiguration
Get-WebConfigurationProperty
Get-WebItemState
Remove-WebConfigurationProperty
Restart-WebItem
Set-WebConfiguration
Set-WebConfigurationProperty
Select-WebConfiguration
Start-WebItem
Stop-WebItem
基于任务的 cmdlet
令人兴奋的消息来了。 对于日常 IIS 任务(例如,创建网站、启用请求跟踪、添加处理程序或模块),你可能希望使用 IIS PowerShell 管理单元附带的基于任务的 cmdlet。 下面是基于任务的 cmdlet 列表:
Add-WebConfigurationLock
Backup-WebConfiguration
Clear-WebRequestTracingSettings
ConvertTo-WebApplication
Disable-WebGlobalModule
Disable-WebRequestTracing
Enable-WebGlobalModule
Enable-WebRequestTracing
Get-WebAppDomain
Get-WebApplication
Get-WebAppPoolState
Get-WebBinding
Get-WebConfigFile
Get-WebConfigurationBackup
Get-WebConfigurationLocation
Get-WebConfigurationLock
Get-WebFilePath
Get-WebGlobalModule
Get-WebHandler
Get-WebItemState
Get-WebManagedModule
Get-WebRequest
Get-Website
Get-WebsiteState
Get-WebURL
Get-WebVirtualDirectory
New-WebApplication
New-WebAppPool
New-WebBinding
New-WebFtpSite
New-WebGlobalModule
New-WebHandler
New-WebManagedModule
New-Website
New-WebVirtualDirectory
Remove-WebApplication
Remove-WebAppPool
Remove-WebBinding
Remove-WebConfigurationBackup
Remove-WebConfigurationLocation
Remove-WebConfigurationLock
Remove-WebGlobalModule
Remove-WebHandler
Remove-WebManagedModule
Remove-Website
Remove-WebVirtualDirectory
Rename-WebConfigurationLocation
Restart-WebAppPool
Set-WebBinding
Set-WebGlobalModule
Set-WebHandler
Set-WebManagedModule
Start-WebAppPool
Start-Website
Stop-WebAppPool
Stop-Website
基于任务的 cmdlet 的帮助
使用内置的帮助系统是了解哪些 cmdlet 可用以及如何使用它们的最简单方法。 以下命令列出了所有 IIS cmdlet。
get-command -pssnapin WebAdministration
另一种方法是查找用于所有 IIS cmdlet 的 -Web 前缀。 尝试运行以下命令:
get-command *-Web*
内置的帮助系统提供了有关单个 cmdlet、它采用的参数和自变量的简单描述,并提供了如何使用该 cmdlet 的示例。 请尝试以下做法:
get-help New-WebSite
若要接收有关特定 cmdlet 的完整帮助,可输入以下内容:
get-help New-Website -full
如果只想查看如何使用它的示例,请尝试以下命令:
get-help New-Website -example
端到端示例
在你将基于任务的 cmdlet 用于端到端场景时,它的强大功能就会显现出来。 在以下示例中,我们将创建新的网站,将一些内容添加到该网站,进行一些配置更改,启用请求跟踪并请求新内容页。
步骤 1:创建新网站
输入以下命令:
PS IIS:\>mkdir "$env:systemdrive\inetpub\MyNewWebSite"
这将为新站点创建新的物理目录。
PS IIS:\>New-Website -name "MyNewWebSite" -PhysicalPath "$env:systemdrive\inetpub\MyNewWebSite" -port 81
上述行创建一个新网站,指向新创建的目录并侦听端口 81。
步骤 2:向站点添加内容
以下命令将导航 IIS 命名空间并创建新的内容文件。
PS IIS:\>cd IIS:\sites\MyNewWebsite
上述命令导航到 IIS 命名空间中的 MyNewWebSite 节点。
PS IIS:\Sites\MyNewWebSite> dir
上述命令列出了新网站的所有内容。 它不会显示任何内容,因为不存在任何内容。
PS IIS:\Sites\MyNewWebSite> notepad "$(Get-WebFilePath .)\test.htm"
上述命令将打开记事本,并允许你编辑 test.htm。 不必记住网站的物理路径位置。 输入一些文本,例如“Hello World”并将文件保存在记事本中。
PS IIS:\Sites\MyNewWebSite> dir
如果再次输入 dir 命令,它将显示新创建的文件 test.htm。
PS IIS:\Sites\MyNewWebSite> Get-WebURL -content ".\test.htm"
上述命令将向新创建的网站发出 HTTP 请求,并返回在记事本中输入的内容。
步骤 3:启用请求跟踪
重要说明:要使此示例正常工作,需要启用 IIS 跟踪功能。 在 Windows Vista 上打开控制面板,单击“程序”,选择“启用或禁用 Windows 功能”。 在“Internet Information Services”、“万维网服务”、“运行状况和诊断”下找到并选择“跟踪”,然后单击“确定”。
最后一步是启用请求跟踪。 Web 请求跟踪是一项 IIS 功能,可用于获取执行请求期间所发生情况的详细日志。 此功能对于许多故障排除场景非常有价值。 若要启用 Web 请求跟踪,只需运行另一个名为 Enable-WebRequestTracing 的位置感知 cmldet。
PS IIS:\Sites\MyNewWebSite> Enable-WebRequestTracing
现在,查看 Enable-WebRequestTracing cmdlet 在 web.config 文件中写入了什么配置。 我们通过使用 Get-WebConfigFile cmdlet 执行此操作,该 cmdlet 也具有位置感知功能:
PS IIS:\Sites\MyNewWebSite> notepad (Get-WebConfigFile)
此配置如下所示:
web.config 文件的内容
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
</traceAreas>
<failureDefinitions timeTaken="00:00:30" statusCodes="200-500" verbosity="Warning" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>
重要的配置是 failureDefinitions 规则。 默认情况下,当错误代码介于 200 到 500 之间或请求花费的时间超过 30 秒时,生成跟踪文件。 让我们通过执行以下命令,发出一个生成 200-500 错误范围内的响应的请求:
PS IIS:\Sites\MyNewWebSite>Get-WebURL -url http://localhost:81/URL_DOES_NOT_EXIST
对非现有资源的请求生成 404 错误。 若要查看跟踪文件,必须导航到以下位置:
PS IIS:\Sites\MyNewWebSite>cd "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\"
现在,可通过在 Internet Explorer 中打开 xml 文件来查看跟踪文件:
PS C:\inetpub\logs\FailedReqLogFiles\W3SVC2>&"$env:programfiles\Internet Explorer\iexplore.exe" "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\fr000001.xml"
总结
新的基于任务的 cmdlet 将为管理员提供一种使用 PowerShell 完成日常 IIS 任务的简单方法。 这些 cmdlet 提供位置感知和直观的语法和帮助。
自 Tech Preview 1 以来发布的低级 IIS cmdlet 仍将允许更高级的 IIS 管理任务。