PowerShell 嵌入式管理單元:對網站和應用程式集區進行設定變更
作者 :Thomas Deml
在本逐步解說中,您將瞭解如何使用內建 PowerShell Cmdlet 來變更 IIS 命名空間容器的簡單屬性,例如網站、Web 應用程式、虛擬目錄和應用程式集區。 下一個逐步解說將說明如何在 system.webServer 區段和自訂區段上變更組態屬性。
簡介
PowerShell 嵌入式管理單元的工作是提供可使用一般、內建的 PowerShell Cmdlet 來管理的命名空間,例如 New-Item、Get-Item、Get-ChildItems、Set-Item、Set-ItemProperty等。 內建 Cmdlet 會針對所有 PowerShell 提供的命名空間運作。 New-Item c:\testdir
例如,可讓您建立新的檔案系統目錄,但您也可以建立新的 IIS 物件,例如Web-Site或應用程式集區。 New-Item IIS:\AppPools\NewAppPool
在上一個逐步解說中,我們開始使用 New-item 和 Get-Item Cmdlet。 本逐步解說將探索更多內建 Cmdlet。
建立這些專案之後,通常您可能必須變更這些專案的設定。 若要這樣做,我們會使用內建 Cmdlet New-ItemProperty 和 Set-ItemProperty。 我們也會看到如何使用 Get-Item 和 Set-Item。
本逐步解說依賴我們在上一個逐步解說中建立的Web-Site「示範網站」及其 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
變更網站和 AppPool 設定
有兩種進行變更的基本方式。
- 如果您要變更簡單屬性,請使用 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 組態設定進行設定變更。