490 likes | 975 Views
IT 人員高效率的 Windows 管理解決方案 ─ Windows PowerShell V2. 蘇建榮 資深講師 精誠公司 ‧ 恆逸教育訓練中心. 大綱. 認識 Microsoft Windows PowerShell V2 PowerShell 的安全性 整合指令碼環境 (ISE) 與指令碼除錯 PowerShell 應用案例 存取 登錄表 (Registry) Windows 管理與盤點 使用 ADSI 管理網域使用者及群組帳戶. Windows PowerShell. 新的命令列層殼與指令碼 語言 更 強大的互動式命令提示字元
E N D
IT人員高效率的 Windows 管理解決方案 ─ Windows PowerShell V2 蘇建榮 資深講師 精誠公司‧恆逸教育訓練中心
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
Windows PowerShell • 新的命令列層殼與指令碼語言 • 更強大的互動式命令提示字元 • 簡單、易學、易用的指令碼語言 • 存取登錄表(registry)就像存取檔案一樣容易 • 豐富的命令列操作體驗 • 自動完成、萬用字元、以物件而非字串進行處理的 pipeline
安裝 PowerShell • Windows Server 2008 R2 Full Installation • 內建 V2 且預設安裝命令列介面的 PowerShell • 可由新增功能加裝 PowerShell ISE • Windows Server 2008 R2 Server Core • 內建 V2 但並未預設安裝, 可使用 OCSetup 進行安裝 • 沒有 ServerManager 整合、也沒有 ISE • Windows 7 內建 V2 且預設安裝(含 ISE) • Windows Server 2008 Full Installation • 內建 V1 但未預設安裝 • Windows XP、2003 與 2008(Full Installation) • 可下載安裝 V2(支援 x86 與 x64 平台)
什麼是 Cmdlet • PowerShell 中特有的命令 • Cmdlet 的命名 • 名稱是由兩個部分所組成 • 並以橫線連結這兩個部分 • 前為動詞(動作),後為名詞(動作的標的) • 例如 Get-Help、Get-Command • PowerShell V2 已內建 236 個 Cmdlet (不含額外匯入的模組) • 查看可用的 cmdlet • Get-command –CommandType cmdlet
Alias Refers to Cmdlet Alias • 簡短而容易記憶的別名 • 我們可將 cmdlet 或其他命令建立別名以方便使用 • 列出所有的 Alias • Get-Alias • 設定 Alias • 例: Set-Alias gcmd Get-Command • 使用 Alias • 例: gcmd
Process Object Get-Command Cmdlet Pipe Sort-Object Cmdlet Pipeline • | 符號 • 可用來將一個 cmdlet 輸出的物件交由另一個 cmdlet 處理 PS C:>Get-Command | Sort-Object
資料型別 • PowerShell 中的變數,需有 $為字首 • 例:[int] $a=100
( $db.Mounted ){ “online” } 條件判斷 if else { “offline” }
迴圈 do/while while do/until While do do ($looping) { code } { code } ($looping) { code } ($done) while Until
functionGet-Demo ($a) { return $a*2.2; } Get-Demo(100) 自訂函式
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
PowerShell 指令檔 • 副檔名: ps1 • PowerShell 預設不允許 .ps1 的指令檔執行 • 執行原則(Execution Policy) • 查看設定: Get-ExecutionPolicy • 變更設定: Set-ExecutionPolicy • Restricted (預設值,不允許執行) • RemoteSigned (有限的安全性) • AllSigned (較安全,建議使用) • Unrestricted (無限制,方便但較不安全)
PowerShell 指令檔簽章 • 向憑證授權中心, 登記程式碼簽署憑證 • 使用 Set-AuthenticodeSignature對 .ps1 進行簽署 • 變更 .ps1 的執行原則 Set-ExecutionPolicyAllSigned
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
整合指令碼環境 Integrated Scripting Environment • 在伺服器管理員的中新增功能(Add Feature) • Add-WindowsFeaturePowerShell-ISE • ServerManagerCmd -install PowerShell-ISE • 圖形介面的操作環境 • 指令碼編輯窗格、輸出窗格、命令窗格 • 可新增頁籤、可連接遠端電腦 • 方便對指令碼進行編輯與除錯
指令碼除錯 • 請先將指令碼存檔 (注意 Execution Policy) • 設置(或取消)中斷點:F9 • Run/Continue:F5 • Stop Debugger:Shift + F5 • Step Over:F10 • Remove All Breakpoints:Ctrl + Shift + F9
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
使用 Function 管理機碼(Registry Key) • 切換路徑 • CdHKLM:\Software • 建立機碼 • MkdirHKLM:\Software\U2488 • 複製機碼 • copyHKLM:\Software\U2488 HKLM:\Software\U2489 • 刪除機碼 • rmdir U2488 • 列舉子機碼 • dirHKLM:\Software
Data Stores • Item 是物件的抽象性的通稱 • 在 PowerShell 存取 Registry 就像在存取檔案 Item File System Certificate Store Registry Provider
名詞 動詞 ChildItem Item ItemProperty Clear Clear-Item Clear-ItemProperty Copy Copy-Item Copy-ItemProperty Get Get-ChildItem Get-Item Get-ItemProperty Invoke Invoke-Item Move Move-Item Move-ItemProperty New New-Item New-ItemProperty Remove Remove-Item Remove-ItemProperty Rename Rename-Item Rename-ItemProperty Set Set-Item Set-ItemProperty 管理 Item 的 Cmdlet
使用 Cmdlet 管理機碼(Registry Key) • 切換路徑 • Set-locationHKLM:\Software • 建立機碼 • New-Item -Type Directory -Path HKLM:\software\U2488 • 複製機碼 • Copy-Item HKLM:\SOFTWARE\U2488 HKLM:\SOFTWARE\U2489 • 刪除機碼 • Remove-Item -Path HKLM:\software\U2488 • 列舉子機碼 • Get-ChildItem HKLM:\SOFTWARE
使用 Cmdlet 管理機碼值(Registry Value) • 新增機碼值 • New-ItemProperty-path . -name email -PropertyType String -value alan_su@uuu.com.tw • 重設機碼值的資料(Data) • Set-ItemProperty -path . -name email -value alanj@tpnic.net • 列出機碼的所有機碼值 • Get-ItemProperty -Path HKLM:\Software\U2489 • 清除機碼值的資料 • clear-ItemProperty -path . -name email • 刪除機碼值 • remove-ItemProperty -path . -name email
讀取機碼值的資料 • 讀取機碼值的資料 • 使用 Cmdlet • $u2489=Get-ItemProperty -Path HKLM:\Software\U2489 • Write-Output $u2489.email • 使用 COM • $objShell=New-Object -ComObject "WScript.Shell" • $ValueData=$objShell.RegRead("HKLM\SoftWare\U2489\email" • Write-Output $ValueData • 此外,您也可使用 WMI • Root\Default Namespace 中的 StdRegProv Class
情境 • Allen 顧問將協助設備組對特定的多部電腦啟用遠端桌面, 設備組已建立這些電腦的清單檔 • 解決方案 • 查出啟用遠端桌面在登錄表中的機碼值 • 以 PowerShell 指令檔達成
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
使用 cmdlet 進行管理 • 新增移除角色 • 需匯入 Import-Module ServerManager 模組 • 伺服器管理員的 PowerShell Cmdlets: • Get-WindowsFeature • Add-WindowsFeature • Remove-WindowsFeature • 使用 cmdlet 管理服務 • Set-Service、Start-Service 、Get-Service 、Stop-Service • 遠端執行 • 使用 invoke-command
列舉 WMI 類別 Get-WMIObject –List Server/Workstation Server/Workstation Windows PowerShell Get-WMIObject –namespace <name> –List List of WMI Classes
列舉指定類別的屬性與方法 • 列出指定類別的屬性 • $objWMI= Get-WmiObject Win32_OperatingSystem • Get-Member -InputObject $objWMI -MemberType property • 列出指定類別的方法 • Get-Member -InputObject $objWMI -MemberType method
使用 WMI • 取得特定的 WMI Instance • [WMI] "\\dc1\root\cimv2:Win32_LogicalDisk.DeviceId='C:'" • 取得特定的WMI Class • Get-WmiObject Win32_LogicalDisk • 可配合 –ComputerName進行遠端操作 • 取得特定 Class 的所有 Instances • Get-WmiObject -Query "select * From Win32_LogicalDisk'"
使用 ForEach 取用集合中的物件 $colLogicalDisk = Get-WmiObjectWin32_LogicalDisk foreach ($objItemin $colLogicalDisk ) { Write-Host ($objItem.DeviceID,$objItem.FreeSpace,"Bytes"); }
情境 • Andy 顧問正在評估公司中現有電腦升級為 Windows 7 時,需先對哪些電腦進行硬體升級 • 解決方案 • 以 PowerShell 指令檔進行現有電腦的軟硬體盤點
大綱 • 認識 Microsoft Windows PowerShell V2 • PowerShell 的安全性 • 整合指令碼環境(ISE)與指令碼除錯 • PowerShell 應用案例 • 存取登錄表(Registry) • Windows 管理與盤點 • 使用 ADSI 管理網域使用者及群組帳戶
使用 [ADSI] 存取 AD 中的物件 • 連接到目標 • 網域、組織單位、群組、使用者等的 DN $objDomain=[ADSI]"LDAP://dc=uuu,dc=com,dc=tw" • 變更屬性值 • 使用 Put method, 加上屬性名稱與要設定的值 • 變更後要記得 SetInfo $objDomain.Put(" Description ", "恆逸資訊網域") $objDomain.SetInfo() • 讀取屬性值 • 使用 Get method, 加上屬性名稱 $objDomain.Get("Description")
在 AD 中建立物件 • 先連到目標物件的父層 • 接著使用 Create method • 指定 objectClass 及 RDN, 要記得執行 SetInfo $objChild=$objParent.Create(objectClass,RDN) • ObjectClass 為 OrganizationalUnit、Group、User 等 $objOU=$objDomain.Create("OrganizationalUnit","OU=Demo") $objOU.SetInfo()
在 AD 中刪除物件 • 先連到目標物件的父層 • 再使用 Delete method, 並指定要移除物件的 ObjectClass 及 RDN $objOU=[ADSI]"LDAP://OU=Demo,dc=uuu,dc=com,dc=tw" $objOU.Delete("group","CN=Demo Users")
使用者帳戶管理 • 使用者登入名稱 • SamAccountName與 userPrincipalName屬性 • 重設使用者帳戶的密碼 • 使用 SetPassword method • 帳戶停用與啟用 • 變更 AccountDisabled屬性 (v2) $objUser.put("SamAccountName","Alan") $objUser.SetPassword("Pa$$w0rd") $objUser.AccountDisabled="False"
設定 AD 中的群組類型 • 變更 Group 的 grouptype屬性值即可達成 • Security Type Global Scope 為 0x80000002 (default) • Security Type Domain Local Scope 為 0x80000004 • Security Type Universal Scope 為 0x80000008 • Distribution Type Global Scope 為 0x00000002 • Distribution Type Domain Local Scope 為 0x00000004 • Distribution Type Universal Scope 為 0x00000008 $objGroup.Put("GroupType",0x80000008) $objGroup.SetInfo()
群組成員管理 • 新增群組成員 • 使用 Add method, 加上新成員的 DN • 移除群組成員 • 使用 Remove method, 要移除的成員 DN • 列出群組成員 • 使用 Member 屬性 $objGroup.Add("LDAP://CN=Alan,DC=uuu,DC=com,DC=tw") $objGroup.Remove("LDAP://CN=Alan,DC=uuu, DC=com,DC=tw") $objGroup.Member
情境 • Vincent 顧問將協助資訊部門在兼顧安全的前提下,提昇 AD 管理效率. • 解決方案 • 使用PowerShell 指令檔進行 AD 管理 • 特別注意指令碼安全性與變更管理
相關資源 • TechNet 指令碼中心 • http://www.microsoft.com/taiwan/technet/scriptcenter/ • 使用 Windows PowerShell 撰寫指令碼 • http://www.microsoft.com/powershell • Windows PowerShell 線上說明 • http://technet.microsoft.com/en-us/library/bb978526.aspx • Windows PowerShell 部落格 • http://blogs.msdn.com/powershell
在何處取得TechNet相關資訊? • 訂閱 TechNet電子報 • http://www.microsoft.com/taiwan/technet/flash/ • 參加TechNet的活動 • http://www.microsoft.com/taiwan/technet/ • 下載 TechNet 研討會簡報與錄影檔 • http://www.microsoft.com/taiwan/technet/webcast/