[TechDays]課程心得分享 : Windows PowerShell 與 Windows Server 2008 R2 管理
一、簡介
2009 TechDays 第三天,蘇建榮 老師的課程 Windows PowerShell 與 Windows Server 2008 R2 管理,關於課程的心得與紀錄
二、心得與紀錄
1. IT管理的挑戰
1.1 資訊系統管理的挑戰
- 商業運作需求增加 : 商業運作需要更多的技術與功能支援,而且能讓使用者隨時隨地都可以使用。
- 複雜度增加 : 增加了技術與功能,也會加重管理負擔,在企業中,大概80%的 IT 成本是用來管理現有系統。
- 未來趨勢挑戰更大 : 系統朝資料中心 ( Data Centers ) 發展,資訊中心的特色包含巨大規模、虛擬化、遠端管理;此外,對於一些派遣人力 ( 委外 ),這些人有一定專業度,但可能對於系統熟悉度不深,如何提供這些使用者方便使用系統,除了要有良好的操作系統與文件,當然也必須有良好的管理工具才行。
對於 Windows Server 2008 R2 有興趣的,可以參考微軟網站上的說明,尤其網站上,右邊的 [ 為何需要 Windows Server 2008 R2 ] 以及 [ 最新的資源 ],有詳細的簡報可以下載),這些資源可以幫助我們認識 Windows Server 2008 R2,下圖為 Windows Server 2008 R2 的技術投入領域圖。
在 Windows Server 2008 R2 的高效率管理方案中,包含
(1) Data Center 自動化管理,在此我們可以透過一些工具軟體進行管理
- PowerShell : 提供使用者透過命令或程式碼,大量做管理執行動作。
- WMI : 提供軟硬體管理。
- Windows Server Management : 簡化了伺服器角色的管理工作,是各種伺服器管理工作的單一窗口。
(2) 伺服器遷移
- Windows Server 移轉工具 : 升級 Windows Server 時,幫助遷移伺服器到新作業系統的工具。
(3) 伺服器管理
- 伺服器管理員與 PowerShell 整合,可透過 PowerShell 下命令或程式碼操作伺服器管理員
2. PowerShell V2
2.1 Windows PowerShell
Windows PowerShell 具有新的命令列層殼與指令碼語言,特色為
- 更強大的互動式命令提示字元
- 簡單、易學、易用的指令碼語言
- 存取登錄表就像存取檔案一樣容易
- 豐富的命令列操作 ( 自動萬成、萬用字元、以物件而非字串進行處理的 Pipeline 等 )。
2.2 作業系統與 PowerShell
- Windows Server 2008 R2 Full Installation : 內建 V2 且預設安裝命令列介面為 PowerShell,可藉由新增功能加裝 PowerShell ISE。
- Windows Server 2008 R2 ServerCore : 內建 V2 但沒有預設安裝,可使用 OCSetup 進行安裝,因為 ServerCore 沒有 ServerManger,所以無法提供 ServerManager 整合,也沒有 ISE。
- Windows 7 : 內建 V2 且預設安裝 (含 ISE )。
- Windows Server 2008 Full Installation : 內建 V1 但沒有預設安裝。
關於 Windows Server 2008 R2 版本比較可以參考這兩篇
關於 OCSetup 可以參考
2.3 PowerShell 腳本檔
PowerShell 腳本檔副檔名為 ps1 (數字1,不是英文 L 喔),在作業系統中,執行原則 ( Excution Policy ) 預設狀態中設定是 Restricted,也就是不允許執行。
可透過一些指令進行執行原則變更 :
(1) 查看設定 : Get-ExecutionPolicy 查看目前執行原則為何。
(2) 變更設定 : Set-ExecutionPolicy 變更執行原則,可以變更的執行原則有
- Restricted:預設值,不允許執行 ( 安全性最高 )。
- RemoteSigned :在本機電腦所撰寫的腳本檔,不需要簽署就可執行;但是從網際網路下載的腳本檔就必須經過受信任發行者的簽署才能執行 ( 有限的安全性 )。
- AllSigned :只允許受信任發行者簽署過的指令檔 ( 較安全,建議使用 )。
- Unrestricted :任何腳本檔皆可被執行,但是於執行網際網路下載的腳本檔時,會先出現警告的提示視窗 ( 不安全,僅應用於練習或測試 )。
(3) 設定簽署 : Set-AuthenticodeSignature 將數位簽章新增至指令碼檔案。
接著進行實做
在 Windows Server 2008 R2 版本中,可直接在工具列上點選 PowerShell 圖示,執行 PowerShell。
出現 PowerShell 視窗,使用記事本來撰寫 PowerShell 指令檔,輸入
notepad.exe .\demo1.ps1
在檔案 demo.ps1 中,輸入
write-output Demo1!
執行檔案 demo.ps1,出現以下的訊息,為什麼不能執行? 因為預設是 Restricted 不允許執行。
我們可以透過 Get-ExecutionPolicy 查看目前執行原則。如下圖所示,執行規則為 Restricted。
所以我們透過 Set-ExecutionPolicy RemoteSigned 將執行原則設定為 RemoteSigned。
再次執行 demo1.ps1,由於 demo1.ps1 是在本機電腦所撰寫的腳本檔,因此可以執行。
2.4 PowerShell V2 的目標
- 減少成本與勞力;
- 使用 PowerShell 可以容易取得、容易學習、分享指令碼;
- 多層面的應用程式,例如像對話框的圖形介面,網頁等;
- 管理一切事務,例如伺服器、用戶端、分散的系統、應用程式等,以及可使用任何與所有的機制,例如 WMI,.NET,native code 等。
2.5 PowerShell V2 的新特色
- 圖形化的整合介面 ( ISE )
- 指令碼除錯工具 ( Script Debugger )
- 遠端執行 ( Remoting )
- 背景工具 ( Background Jobs )
- 新的 ( 與改進的 ) Cmdlets
- 以 Script 製作 Cmdlets
2.6 什麼是 Cmdlet
Cmdlet 是 PowerShell 特有的命令,命名方式是由兩個部份組成,分別式動詞與名詞,並且以橫線連結這兩個部份
動詞-名詞
例如 Get-Help、Get-Command
PowerShell V2 內建 236 個Cmdlet(不包含額外匯入的模組)、PowerShell V1 內建 129 個 Cmdlet
接著進行實作
使用 Get-Command 列出所有 cmdlet,並將結果輸出到 1.txt 中。
2.4 伺服器管理員與 PowerShell 整合
(1) 使用前,必須要將 伺服器管理員模組 PowerShell 載入工作階段
Import-Module ServerManager : 將伺服器管理員模組載入 Windows PowerShell 工作階段。
(2) 伺服器管理員的 PowerShell Cmdlets
- Get-WindowsFeature : 了解哪些角色、角色服務和功能可安裝於電腦上,以及目前已安裝的項目。
- Add-WindowsFeature : 在電腦上安裝指定的角色、角色服務和功能。
- Remove-WindowsFeature : 從電腦上移除指定的角色、角色服務和功能。
(3) 使用PowerShell 時,隨手可及
- 本機、遠端、自動完成
- 遠端執行,使用 invoke-command
接著進行實做
首先將伺服器管理員模組載入 Windows PowerShell 工作階段。
接著,透過 Get-WindowsFeature 查詢。
我們看到 Windows PowerShell ISE 還沒有安裝,我們透過 Add-WindowsFeature 來新增。
輸入後,就開始安裝。
安裝成功
到 [ 程式集 ] 看看是否安裝成功
2.5 PowerShell V2 四大議題
(1) 圖形化介面的整合環境
- 命令列介面與圖形化介面
- 有彈性的安裝圖形介面,需要的時候裝,不需要就不用裝
- 確保安全的自動操作
- 統一存取受管理的元素
(2) 產品品質的指令碼
- 使用容易
- 安全的進行操作
- 分享容易
- 支援容易
(3) 萬用程式碼執行,很有彈性的在任何地方執行命令與指令碼
- 一部電腦或多部電腦,將PowerShell 指令碼放在一台電腦,其他電腦可透過遠端操做
- 受限制的環境或未受限制的環境
- 由使用者輸入或由事件觸發
(4) 社群回饋的回應
- 語言的強化
- 改進的物件介面
- 新增與強化的 Cmdlets
接著進行實作,下圖為 Windows PowerShell ISE 視窗畫面
接著,使用 regedit.exe 執行登錄編輯程式,在這邊可以看到在 HKLM\SOFTWARE 底下沒有 TechDay 與 UUU 這兩個機碼,我們來建立這兩筆機碼。
一開始,先建立腳本檔,內容如下,建立這兩個機碼是一筆 Transaction,不成功的話就要復原。
我們使用 Start-Transaction 指令開始交易,並使用 New-Item 建立新的機碼值,由於我們使用交易機制,當執行 Complete-Transaction 後,才會確認完成交易,資料才會寫入
cd hklm:\software
Start-Transaction
New-Item TechDay -UseTransaction
New-Item UUU -UseTransaction
Complete-Transaction
執行腳本檔,參考下圖點選 [執行] 按鈕,或者可透過快速鍵 F5 執行。
執行結果如下圖所示
增加了兩筆機碼,分別為 TechDay 與 UUU
3. 整合指令碼環境 (ISE)
3.1 整合指令碼環境 Integrated Scripting Environment
Windows PowerShell V2 最大的改變是開始提供圖形介面的操作環境,這個新的環境稱為 PowerShell Integrated Scripting Environment ( ISE )。新的 ISE 具備了程式偵錯的功能以及互動式的主控台畫面,讓管理人員在建立指令碼腳本檔時可以透過直覺的方式來建立,而且操作使用 ISE 時也會自動協助以不同顏色來區別 Cmdlet 與後續參數的使用。
ISE 窗格分三個部份 : 指令碼編輯窗格、輸出窗格、命令窗格,如下圖所示
在 ISE 中,可以新增索引標籤、直接連接遠端電腦。
3.2 指令碼除錯
要執行指令碼除錯,有兩點需注意,指令碼需要先存檔,以及注意 Execution Policy 的設定允許 ps1 檔執行。
設定中斷點可以這樣做 :
(1) 滑鼠右鍵點一下左邊的行號,選擇 [切換中斷點] ,就能在此行號設定中斷點。
在 Debug 的過程中,可以透過功能表上的 [偵錯] 內的選項,進行程式碼偵錯。
(3) 偵錯快速鍵
- 設置(或取消)中斷點 : F9
- Run/Continue 執行或繼續執行 : F5
- Stop Debugger 不使用 Debugger 執行 : Shift + F5
- Step Over 逐步執行 : F10
- Remove All Breakpoints 移除所有中斷點 : Ctrl + Shift + F9
當執行到中斷點時,如下圖所示,程式會中斷。可在命令窗格輸入變數名稱,按下 [Enter] 後查詢目前變數值為何。
4. 存取登錄表(registy)
4.1 Data Stores
PowerShell 提供 File System、Provider、Registy、Cerificate Store 相同的存取方式,Item 是物件的抽象性通稱。
下圖為 PowerShell 的 Data Stores 圖,擷取自 TechDay 2009 的簡報
在 Windows 中,內建 regedit 登入編輯程式,用來編輯機瑪,主要分成機碼(Registy Key) 與機碼值(Registy Value)
4.2 管理機碼,使用 Function
使用類似DOS指令方式做管理 :
- 切換路徑 : cd HKLM:\Software
- 建立機碼 : mkdir HKLM:\Software\Alan1
- 複製機碼 : copy HKLM:\Software\Alan1 HKLM:\Software\Alan2
- 刪除機碼 : rmdir Alan1
- 列舉子機瑪 : dir HKLM:\Software
接著進行實做
cd 切換路徑、mkdir 建立機碼
copy 複製機碼、dir 列舉子機瑪
4.3 管理機碼,使用 Cmdlet
-
切換路徑 : set-location HKLM:\Software
cd HKLM:\Software -
建立機碼 : New-Item -Type Directory -Path HKLM:\software\Alan1
mkdir HKLM:\Software\Alan1 -
複製機碼 : Copy-Item HKLM:\SOFTWARE\Alan1 HKLM:\SOFTWARE\Alan2
copy HKLM:\Software\Alan1 HKLM:\Software\Alan2 -
刪除機碼 : Remove-Item -Path HKLM:\SOFTWARE\Alan1
rmdir Alan1 -
列舉子機瑪 : Get-ChildItem HKLM:\SOFTWARE
dir HKLM:\Software
4.4 管理機碼值,使用 Cmdlet
- 新增機碼值 : New-ItemProperty -path . -name age -PropertyTypeDWORD -value 40
- 重設機碼值的資料 : Set-ItemProperty -path . -name email -value alanj@tpnic.net
- 列出機碼的所有機碼值 : Get-ItemProperty -Path HKLM:\Software\AlanDemo
- 清除機碼值的資料 : clear-ItemProperty -path . -name age
- 刪除機碼值 : remove-ItemProperty -path . -name age
4.5 讀取機碼值的資料
-
使用 Cmdlet
$a=Get-ItemProperty-Path HKLM:\Software\AlanDemo
-
使用 COM
$objShell=New-Object -ComObject"WScript.Shell" $ValueData=$objShell.RegRead("HKLM\SoftWare\AlanDemo\age" Write-Output $ValueData
接著進行實作登錄機碼及機碼值管理
Set-Location HKLM:\SOFTWARE 切換路徑至 HKLM:\SOFTWARE
New-Item -type Directory -Path Alan 建立機碼 Alan
Set-Location .\Alan 切換路徑至 .\Alan
New-ItemProperty –Path . –Name Age –PropertyType DWORD –Value 40 新增機碼值,名稱 Age、類型 DWORD、 資料 40
Set-ItemProperty Path . –Name Age –Value 40 重設機碼值,名稱 Age、資料 41
$Alan=Get-ItemProperty –Path . 讀取路徑 . 的機碼到變數 Alan
$Alan.Age 取得機碼值 Age