PowerShell IIS 掌握:创建和管理网站

如果您管理Windows服务器,您可能已经使用过Internet Information Services (IIS)。网站是IIS的主要功能之一,使用PowerShell,您可以轻松地使用PowerShell IIS脚本来管理和自动化IIS!

在本文中,您将介绍一种使用PowerShell管理IIS的新方法。使用本文中的技术,您可以轻松构建PowerShell IIS脚本来创建和管理IIS网站。

要使用PowerShell管理IIS,需要使用两个PowerShell模块之一 – WebAdminstration或IISAdminstration。本文介绍了更现代的IISAdministration模块。本文的附带视频展示了较旧的WebAdministration模块,如果您希望看到另一种方法。

了解如何管理您公司或全球范围内的一个简单网站将使您与其他同行区别开来。本文的以下部分将帮助您了解如何在IIS中创建和管理网站。您还将学习如何使用一些PowerShell cmdlet来管理Web应用程序池。

IISAdministration与WebAdministration模块

您有两个选项来管理IIS。您可以使用WebAdministration或IISAdministration。但是哪个应该使用呢?

如果您使用的是IIS 10.0或更高版本,则较新的IISAdministration模块相比较旧的WebAdministration模块提供了许多改进。

以下是一些要点:

  • IISAdministration 命令提供了更好的管道支持,并且更好地进行了扩展。
  • 与较旧的、传统的 IIS WebAdministration 命令相比,IISAdministration 包含了更高效的代码。
  • IISAdministration 命令更简单,并且直接提供了对服务器管理器的访问。

本文将重点介绍这个较新的 IISAdministration 模块。

先决条件

本文将是实战性的。如果您打算跟着做,请确保您已具备以下先决条件。

The Windows 10 “Turn Windows features on or off” dialogue

建议您熟悉 HTML 的基础知识。在接下来的示例中,HTML 使用会发挥作用。但是不用担心,您将能够复制粘贴代码!

本文中的所有示例都是在 Windows 10 上使用 IIS 10.0 和 PowerShell 7 预览版 6 创建的。IISAdministration 命令对于 Windows Server 2016 和 2019 是相同的,并且可以与 Windows PowerShell 5.1 兼容。

就工具使用而言就是这些了,现在需要的是跟进所需的资源。

安装 IISAdministration 模块

一旦您满足了先决条件,就是时候进行一些设置工作了。幸运的是,由于您需要的 PowerShell 模块(IISAdministration)在 PowerShell Gallery 中是免费提供的,因此没有太多设置要做。

请打开您的 Web 服务器上的提升权限的 PowerShell 控制台,并使用以下命令安装该模块。

PS> Install-Module -Name 'IISAdministration'

如果您没有互联网访问权限,您可以将该模块下载到另一台主机上,并将该模块复制到您的模块目录中。查看 Save-Module 命令的文档。

发现可用的 Cmdlet

与您可能不熟悉的任何 PowerShell 模块一样,您应该使用的第一个 Cmdlet 之一是 Get-Command,使用如下命令Get-Command -Module 'IISAdministration'可以让您了解此模块的所有 Cmdlet 清单。

即使您将学习一些常见的对网站执行的操作,这些命令也会让您了解其他所有可以执行的操作。

Get-Command -Module ‘IISAdministration’ results

现在您已经有了可用 Cmdlet 的清单,是时候开始组建网站了。

创建您的第一个网站

为了拥有一个可以使用的网站,让我们首先创建一个网站。为此,第一步是创建一个目录来保存网页内容。此外,您还需要在该目录中创建一个HTML文件,以便IIS进行显示。该目录将充当稍后示例中使用的网站目录。

创建网页目录和页面

首先,创建一个目录。为此,您可以使用New-Item cmdlet。下面的代码将在C:\MyWebsite处创建一个目录。

PS> New-Item -ItemType Directory -Name 'MyWebsite' -Path 'C:\'

您可以根据需要选择上述代码的任何路径。为简单起见,将使用通用路径。

创建目录后,现在是时候创建一个HTML文件,该文件将成为新网站的登录页面。

现在,在C:\Mywebsite目录中创建一个名为index.html的文件,如下所示。

PS> New-Item -ItemType File -Name 'index.html' -Path 'C:\MyWebsite\'

文件创建后,打开您喜欢的编辑器,并将以下代码复制并粘贴到该文档中。此HTML是一个简单的页面,将在完成时用于确保IIS配置正确。

<!DOCTYPE html>
<html>
    <head>
         <title>IIS Administration With PowerShell Demo</title>
    </head>
    <body>
        <h1>IIS Administration with PowerShell Demo</h1>
        <p>Thank you for reading this post on how to administer IIS with PowerShell!</p>

        <p>This page was created using the newer IISAdministration PowerShell module.</p>
        <h2>First Steps</h2>
        <p>Keep calm and learn PowerShell.</p>
    </body>
</html>

创建IIS网站

现在是时候让刚刚创建的网页向全世界公开。为此,您需要创建一个虚拟目录虚拟目录包含用于提供页面的所有资产和资源。

默认情况下,IIS在C:\inetpub\wwwroot下创建虚拟目录。该目录包含IIS的所有默认网页资产和资源。您也可以使用默认的C:\inetpub\wwwroot目录来存储您的文件,但为了使路径尽可能短,这些示例将不使用它。这就是为什么您使用C:\MyWebsite的原因。

要创建一个新的虚拟目录(站点),请使用New-IISSite cmdlet。此cmdlet允许您创建IIS网站。

在本文中,创建一个名为Mywebsite的网站,指向C:\MyWebsite目录,监听端口为8088。在下面的代码片段中,您可以看到如何使用New-IISSite cmdlet执行此操作。

可能会让人困惑的唯一部分是BindingInformation参数。此参数仅允许绑定语法。在此片段中,New-IISSite将创建一个绑定到IP地址的网站(*相当于127.0.0.1),监听的TCP端口,然后是任何HTTP标头。

绑定语法可以解释为协议,后跟源:端口:目标。在此示例中,您已配置IIS以在端口8088上从任何()IP地址接收HTTP请求,并且目标是本地主机。*

PS> New-IISSite -Name 'MyWebsite' -PhysicalPath 'C:\MyWebsite\' -BindingInformation "*:8088:"

一旦网站创建完成,您可以运行Get-IISSite来检查其外观,如下所示。

Creating a New Website in IIS

默认情况下,网站配置已启动,并且您的 Web 主机开始提供这些 HTTP 请求的服务。打开您选择的浏览器,并导航到指向端口 8088 的本地机器。现在您应该能够看到您之前创建的网页显示出来。

MyWebSite IIS site in a web browser

恭喜!您刚刚使用 PowerShell 在 IIS 上建立了您的第一个网站!

现在您已经有一个正在运行的网站,是时候学习如何管理您的网站以及托管它的 IIS 服务器了。

管理 IIS 网站

一旦网站开始运行,您无疑需要执行常见操作,如停止和启动网站。例如,如果网站需要更新,有时您需要重新启动网站。

要在 PowerShell 中管理网站,您有两个 cmdlet 可以使用 – Start-IISSiteStop-IISSite。这两个 cmdlet 的工作方式与 Stop-ServiceStart-Service cmdlet 的操作方式类似。

停止网站类似于停止 Windows 服务。您正在阻止或允许通过 IIS 在唯一端口上提供的协议访问站点。但是,您没有停止 IIS 主机。 网站可以根据单个的基础停止和启动。

停止单个站点

要停止IIS网站,您将使用Stop-IISSite cmdlet。默认情况下,您之前创建的站点应处于Started状态。如果您停止站点,从而阻止访问MyWebsite,请运行Stop-IISSite,提供如下所示的名称。此代码将停止由IIS提供的MyWebsite站点。停止站点后,您将无法再访问它。

PS> Stop-IISSite -Name "MyWebsite"

检查网站状态为Started,停止并再次检查状态的示例如下所示。在此示例中,您正在执行以下操作:

  1. 使用Get-IISSite获取MyWebsite站点的状态。
  2. 针对MyWebsite站点执行Stop-IISSite cmdlet。此cmdlet会关闭对网站的访问。由于此操作正在进行操作更改,因此您将收到确认提示。
  3. 再次运行Get-IISSite以验证MyWebsite站点是否已停止,注意Stopped状态。
Getting, stopping, and confirming MyWebsite state

停止所有站点

上面您停止了单个站点,但您也可以轻松停止所有站点。通过使用管道并将Get-IISSite的输出导向Stop-IISSite,PowerShell将枚举所有站点并停止它们。在下面的代码示例中,可选的Verbose开关参数用于显示更多信息。

Get-IISSite | Stop-IISSite -Verbose
Stopping all IIS sites with PowerShell

您还可以通过停止W3SVC或World Wide Web Publishing Service来停止IIS中的所有站点。停止Windows服务将关闭IIS并阻止所有站点提供服务。但是,请注意,这样做可能导致站点仍然显示为已启动状态。

启动单个站点

假设您对MyWebsite站点进行了一些更改并需要重新启动它。现在是使用Start-IISSite命令的时候了。为此,只需像使用Stop-IISSite cmdlet一样指定名称。

PS> Start-IISSite -Name 'MyWebsite'

执行后,您可以使用Get-IISSite再次检查状态。这时,您应该能够看到类似于下面截图的输出。

Checking the status of MyWebsite using Get-IISSite and starting the site with Start-IISSite

现在,如果刷新浏览器,您的站点应该在http://localhost:8088可用。

启动所有站点

与停止所有站点发布的方式类似,您可以使用管道来启动IIS主机上的所有网站。

PS> Get-IISSite | Start-IISSite

再次获取正在提供服务的所有IIS站点,并使用管道启动每个站点。您的输出应该类似于下面的截图。

Using the pipeline to start all sites on host

管理Web绑定

现在是执行一些常见的对MyWebsite站点进行管理的时间了。其中一个最常见的任务是更改Web绑定。

当您创建了MyWebsite网站时,您使用了*:8088:的绑定语法。该语法表示在IP地址127.0.0.1上监听端口80,没有HTTP头。假设现在您决定要将网站改为在端口9000上监听。要做到这一点,您需要修改网站的绑定。

检查现有绑定

在更改网站的绑定之前,您应该首先检查当前的配置。一种方法是检查由Get-IISSite返回的Binding属性。请注意下面的代码片段中如何执行此操作。在代码片段中,Get-IISSite正在查询MyWebSite网站,并且仅返回Bindings属性。

PS> (Get-IISSite -Name 'MyWebsite').Bindings

当您仅检查Bindings属性时,PowerShell将返回一个带有几个不同信息的对象,如下所示。

Example 1: Finding binding information

如果您只想看到绑定信息,可以像下面这样明确引用bindingInformation属性。

Example 2: Finding binding information

移除绑定

如果您想要更改站点监听的端口,则必须首先删除将其绑定到该端口的现有绑定。要删除绑定,您首先必须停止该站点。

PS> Stop-IISSite -Name 'MyWebsite'

一旦站点停止,您现在可以删除将MyWebsite站点绑定到端口8088的现有绑定。要做到这一点,您可以使用Remove-IISSiteBinding cmdlet

要删除之前定义的 MyWebsite 的绑定,您可以看到下面的示例使用 Remove-IISSiteBinding 来完成此操作。在下面,您提供站点的名称,并指定之前发现的绑定语法。

PS> Remove-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:8088:"

执行代码时,系统会提示您确认决定,因为您正在执行破坏性操作,如下所示。

Removing site binding using Verbose parameter

绑定的数量没有限制。您可以轻松地保留原始绑定并添加 TCP 端口 9000 作为新的绑定。

现在,您可以再次运行 Get-IISSite -Name 'MyWebsite'。您会发现绑定信息已被移除,如在 Bindings 下的空值所示。

Confirming the old bindings were removed

即使站点已发布,IIS 无法知道如何将流量路由到您的站点。

为您的站点分配至少一个绑定是重要的。为了向您展示其重要性,请尝试再次访问 http://localhost:8088/index.html。如果您使用的是 Mozilla Firefox 浏览器,您可能会看到下面的消息。

Can’t establish a connection

创建新的绑定

在上一节中,您删除了 MyWebsite 唯一的站点绑定。虽然这破坏了站点,但这只是一个暂时的问题。现在是通过创建新的绑定来解决此问题的时候。

要创建新的绑定,请使用 New-IISSiteBinding 命令。由于您现在需要将端口 9000 绑定到 MyWebsite 站点,因此请按照下面显示的正确绑定语法进行指定。

PS> New-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:9000:"

一旦创建了新的绑定,使用Start-IISSite重新启动站点。请记住,要创建这个新的绑定,IIS需要将站点关闭。

站点重新启动后,现在应该可以通过9000端口访问它。要验证这一点,请打开您选择的网络浏览器,然后导航到http://localhost:9000。现在您应该可以在9000端口下再次看到网页正在运行。

Same page, different TCP port

移除网站

如果您只是按照教程进行操作,不打算永久保留MyWebsite网站,那么现在是清理它的时候了。要移除一个站点,请使用Remove-IISSite命令。

移除IIS站点可能是一个危险的任务,特别是如果您要移除托管其他生产网站的IIS站点。为了确保您正在移除正确的站点,建议使用常见的WhatIf PowerShell参数。该参数允许您检查如果命令实际运行会发生什么。会发生什么。这个参数允许您检查如果命令实际运行会发生什么。

您可以看到下面使用WhatIf参数移除MyWebsite站点的示例。

Remove-IISSite -Name 'MyWebSite' -WhatIf
Being careful with destructive cmdlets by using -WhatIf !

如果一切看起来都很好,松开安全栏,并重新运行代码,这次不带-WhatIf参数。

使用Remove-IISSite命令时,站点不会被删除。它会从IIS配置中移除。网站的文件保持不变。

摘要

在本文中,您已经学会使用IISAdministration模块创建网站。您已经了解了如何执行维护网站所需的管理操作。您现在已经掌握了足够的基础知识,可以使用PowerShell与任何现代IIS主机一起工作了!

进一步阅读

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