PowerShell IIS大師:創建和管理網站

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

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

要使用PowerShell来管理IIS,需要使用WebAdministration或者IISAdministration这两个PowerShell模块之一。本文章介绍的是更现代化的IISAdministration模块。如果你想了解另一种方法,可以观看本文章的附带视频,演示了较旧的WebAdministration模块。

掌握为公司或者全球管理一个简单网站的能力,会让你与其他同行有所区别。本文章的以下部分将帮助你学习如何在IIS中创建和管理网站。你还将学习如何使用一些PowerShell命令来管理Web应用程序池。

IISAdministration模块与WebAdministration模块

对于管理IIS,你有两个选择。你可以使用WebAdministration或者IISAdministration。但是哪一个应该选择?

如果你使用的是IIS 10.0或更高版本,较新的IISAdministration模块在较旧的WebAdministration模块上有很多改进

以下是幾個亮點:

  • IISAdministration cmdlets 在管道方面提供更好的支援並具有更好的擴展性。
  • 與舊版的 IIS WebAdministration cmdlets 相比,IISAdministration 包含更高效的程式碼。
  • IISAdministration cmdlets 更簡單,並直接提供對伺服器管理員的存取。

本文將專注於這個更新的 IISAdministration 模組。

先決條件

本文將進行實作。如果你想跟著操作,請確保你已擁有以下先決條件。

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

建議你對 HTML 基礎知識有一定了解。在即將介紹的範例中,HTML 將扮演重要角色。但不用擔心,你將能夠複製並貼上程式碼!

本文中的所有範例均是在 Windows 10 上的 IIS 10.0 和 PowerShell 7 Preview 6 中建立的。IISAdministration cmdlets 在 Windows Server 2016 和 2019 中是相同的,並與 Windows PowerShell 5.1 兼容。

工具使用的部分就到此為止,現在是跟隨操作所需的資源。

安裝 IISAdministration 模組

一旦您滿足了先決條件,就可以進行一些設置工作了。幸運的是,您所需的 PowerShell 模組(IISAdministration)在 PowerShell 庫中是免費提供的。

請打開您的 Web 伺服器上的提升權限的 PowerShell 控制台,並使用以下命令安裝該模組。

PS> Install-Module -Name 'IISAdministration'

如果您沒有網路連接,您可以在其他主機上下載該模組並將其複製到模組目錄中。請參閱有關 Save-Module 命令的文件

查找可用的 Cmdlet

對於您可能不熟悉的任何 PowerShell 模組,您應該使用的第一個 Cmdlet 是 Get-Command,它可以用於查找模組的 Cmdlet 清單。使用下面顯示的命令 Get-Command -Module 'IISAdministration',您可以看到使用這個模組可以做什麼。

即使您將學習一些在網站上執行的常見操作,這些命令也可以讓您了解其他所有可能的操作。

Get-Command -Module ‘IISAdministration’ results

現在您有了可用的 Cmdlet 清單,是時候開始建立一個網站了。

建立您的第一個網站

要建立一个可以使用的网站,首先我们需要创建一个网站。为此,第一步是创建一个目录来保存网页内容。此外,您还需要在该目录中创建一个HTML文件,以供IIS显示。这个目录将作为以后示例中使用的Web目录。

创建Web文件夹和页面

首先,创建一个目录。为此,您可以使用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命令。該命令允許您創建IIS網站。

在本文中,創建一個名為Mywebsite的網站,指向C:\MyWebsite目錄,並在8088端口上進行監聽。在下面的代碼片段中,您可以看到如何使用New-IISSite命令來實現這一點。

唯一可能令人困惑的部分是BindingInformation參數。該參數僅允許綁定語法。在此代碼片段中,New-IISSite將創建一個綁定到IP地址(*表示127.0.0.1),監聽的TCP端口,後跟任何HTTP標頭的網站。

綁定語法可以解釋為協議,接著是源:端口:目的地。在此示例中,您已配置IIS以從任何()IP地址的8088端口接收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 主機

停止單個網站

要停止IIS網站,您將使用Stop-IISSite cmdlet。默認情況下,您之前創建的網站應該處於Started狀態。如果停止該網站並阻止訪問MyWebsite,請運行以下代碼提供名稱。此代碼將停止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發布服務來停止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 cmdlet。由於您現在需要將端口 9000 綁定到 MyWebsite 站點,請按照下面顯示的正確綁定語法指定。

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

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

站点再次启动后,您现在应该能够通过9000端口访问它。要验证这一点,打开您选择的web浏览器,导航到http://localhost:9000。现在您应该能够在9000端口下看到网页再次工作。

Same page, different TCP port

删除网站

如果您只是按照教程操作,并且不打算保留MyWebsite网站,那么现在是清理的时候了。要删除一个站点,请使用Remove-IISSite cmdlet。

删除IIS站点是一项危险的任务,特别是如果您要删除托管其他生产网站的IIS站点。为了验证您是否删除了正确的站点,建议使用常见的WhatIf PowerShell参数。此参数允许您查看如果该命令实际运行会发生什么。

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

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

如果一切正常,请松开安全杆并重新运行代码,这次不带-WhatIf参数。

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

摘要

在本文中,您已經學會使用IISAdministration模塊創建網站。您已經了解到如何執行維護網站所需的管理操作。您現在已經掌握了足夠的基礎知識,可以使用PowerShell與任何現代的IIS主機一起工作!

進一步閱讀

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