Microsoft TechNet

Download Report

Transcript Microsoft TechNet

IT人員高效率的 Windows 管理解決方案 ─
Windows PowerShell V2
蘇建榮
資深講師
精誠公司‧恆逸教育訓練中心
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
2
Windows PowerShell
•
•
•
•
•
新的命令列層殼與指令碼語言
更強大的互動式命令提示字元
簡單、易學、易用的指令碼語言
存取登錄表(registry)就像存取檔案一樣容易
豐富的命令列操作體驗
– 自動完成、萬用字元、以物件而非字串進行處
理的 pipeline
3
安裝 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 平台)
4
PowerShell 的架構
使用者
體驗
引擎
受管理的
元素
Cmdlets
Shell
APIs
WMI
COM
Language
Execution Context
.NET
XML
ADO
Debugger
Object Mgr
ADSI
Native Commands
5
什麼是 Cmdlet
• PowerShell 中特有的命令
• Cmdlet 的命名
– 名稱是由兩個部分所組成
– 並以橫線連結這兩個部分
– 前為動詞(動作),後為名詞(動作的標的)
– 例如 Get-Help、Get-Command
• PowerShell V2 已內建 236 個 Cmdlet (不含額外匯入的模組)
• 查看可用的 cmdlet
– Get-command –CommandType cmdlet
6
Alias
• 簡短而容易記憶的別名
– 我們可將 cmdlet 或其他命令建立別名以方便使用
• 列出所有的 Alias
– Get-Alias
Alias
• 設定 Alias
– 例: Set-Alias gcmd Get-Command
• 使用 Alias
– 例: gcmd
Cmdlet
7
Pipeline
• | 符號
• 可用來將一個 cmdlet 輸出的物件交由另一個 cmdlet 處理
Process
Object
Get-Command
Cmdlet
Pipe
PS C:> Get-Command | Sort-Object
Sort-Object
Cmdlet
8
資料型別
• PowerShell 中的變數,需有 $ 為字首
– 例: [int] $a=100
Data Type
說明
實例
[int]
整數
-273, -1, 0, 10, 42
[byte]
8-bit 無正負號
0, 1, …, 254, 255
[boolean]
布林值
$false, $true
[char]
字元
a, b, c, 1, 2, 3, !, #
[string]
字串
“hello, world”
[datetime]
時間、日期
April 1, 2008
9
運算子
Operator
說明
實例
+
加法
$a + $b + 3
-
減
$x - 5
*
乘
1KB * $a
/
除
300 / 60
%
整除後取餘數
17 % 2
-eq
等於
$a –eq 100
-gt (-ge)
大於(大於等於)
$a –ge 10
-lt (-le)
小於(小於等於)
$a –le 10
10
條件判斷
if
}
( $db.Mounted ){
“online”
else {
}
“offline”
11
迴圈
do/while
while
While
($looping)
{
code
}
d
o
do/until
d
o
{
code
} while
($looping)
{
code
} Until ($done)
12
自訂函式
function Get-Demo ($a)
{
return $a*2.2;
}
Get-Demo(100)
13
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
14
PowerShell 指令檔
• 副檔名: ps1
• PowerShell 預設不允許 .ps1 的指令檔執行
• 執行原則(Execution Policy)
– 查看設定: Get-ExecutionPolicy
– 變更設定: Set-ExecutionPolicy
• Restricted (預設值,不允許執行)
• RemoteSigned (有限的安全性)
• AllSigned (較安全,建議使用)
• Unrestricted (無限制,方便但較不安全)
15
PowerShell 指令檔簽章
1. 向憑證授權中心, 登記程式碼
簽署憑證
2. 使用 Set-AuthenticodeSignature
對 .ps1 進行簽署
3. 變更 .ps1 的執行原則
Set-ExecutionPolicy AllSigned
16
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
17
整合指令碼環境
Integrated Scripting Environment
• 在伺服器管理員的中新增功能(Add Feature)
– Add-WindowsFeature PowerShell-ISE
– ServerManagerCmd -install PowerShell-ISE
• 圖形介面的操作環境
• 指令碼編輯窗格、輸出窗格、命令窗格
• 可新增頁籤、可連接遠端電腦
• 方便對指令碼進行編輯與除錯
18
指令碼除錯
•
•
•
•
•
•
請先將指令碼存檔 (注意 Execution Policy)
設置(或取消)中斷點:F9
Run/Continue:F5
Stop Debugger:Shift + F5
Step Over:F10
Remove All Breakpoints:Ctrl + Shift + F9
19
在 ISE 進行除錯
20
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
21
使用 Function 管理機碼(Registry Key)
• 切換路徑
– Cd HKLM:\Software
• 建立機碼
– Mkdir HKLM:\Software\U2488
• 複製機碼
– copy HKLM:\Software\U2488 HKLM:\Software\U2489
• 刪除機碼
– rmdir U2488
• 列舉子機碼
– dir HKLM:\Software
22
Data Stores
• Item 是物件的抽象性的通稱
• 在 PowerShell 存取 Registry 就像在存取檔案
Item
File System
Certificate Store
Provider
Registry
23
管理 Item 的 Cmdlet
名詞
Item
ItemProperty
Clear
Clear-Item
Clear-ItemProperty
Copy
Copy-Item
Copy-ItemProperty
Get-Item
Get-ItemProperty
動詞
Get
ChildItem
Get-ChildItem
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
24
使用 Cmdlet 管理機碼(Registry Key)
• 切換路徑
– Set-location HKLM:\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
25
使用 Cmdlet 管理機碼值(Registry Value)
• 新增機碼值
– New-ItemProperty -path . -name email -PropertyType String
-value [email protected]
• 重設機碼值的資料(Data)
– Set-ItemProperty -path . -name email -value
[email protected]
• 列出機碼的所有機碼值
– Get-ItemProperty -Path HKLM:\Software\U2489
• 清除機碼值的資料
– clear-ItemProperty -path . -name email
• 刪除機碼值
– remove-ItemProperty -path . -name email
26
讀取機碼值的資料
• 讀取機碼值的資料
• 使用 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\e
mail"
– Write-Output $ValueData
• 此外,您也可使用 WMI
– Root\Default Namespace 中的 StdRegProv Class
27
• 情境
– Allen 顧問將協助設備組對特定的多部電腦
啟用遠端桌面, 設備組已建立這些電腦的清
單檔
• 解決方案
– 查出啟用遠端桌面在登錄表中的機碼值
– 以 PowerShell 指令檔達成
28
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
29
使用 cmdlet 進行管理
• 新增移除角色
– 需匯入 Import-Module ServerManager 模組
– 伺服器管理員的 PowerShell Cmdlets:
• Get-WindowsFeature
• Add-WindowsFeature
• Remove-WindowsFeature
• 使用 cmdlet 管理服務
• Set-Service、Start-Service 、Get-Service 、Stop-Service
• 遠端執行
• 使用 invoke-command
30
WMI 中常見的名詞
WMI
Namespace
(名稱空間)
Class (類別)
Instance (例項)
Property (屬性)
Method (方法)
說明
實例
相關類別的集合
Root\cimv2
物件的藍圖
可進行管理的種類
物件的實體
同一類別可能同時有多個
物件的特性
在 WMI 中多數是唯讀的
Win32_
LogicalDisk
物件能執行的動作
C:
FileSystem
chkdsk
31
列舉 WMI 類別
Windows
PowerShell
Get-WMIObject –List
Get-WMIObject –namespace
<name> –List
Server/
Workstation
List of WMI Classes
32
列舉指定類別的屬性與方法
• 列出指定類別的屬性
– $objWMI= Get-WmiObject Win32_OperatingSystem
– Get-Member -InputObject $objWMI -MemberType property
• 列出指定類別的方法
– Get-Member -InputObject $objWMI -MemberType method
33
使用 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'"
34
使用 ForEach 取用集合中的物件
$colLogicalDisk = Get-WmiObject Win32_LogicalDisk
foreach ($objItem in $colLogicalDisk ) {
Write-Host ($objItem.DeviceID,$objItem.FreeSpace,"Bytes");
}
35
• 情境
– Andy 顧問正在評估公司中現有電腦升級
為 Windows 7 時,需先對哪些電腦進行硬
體升級
• 解決方案
– 以 PowerShell 指令檔進行現有電腦的軟
硬體盤點
36
大綱
•
•
•
•
認識 Microsoft Windows PowerShell V2
PowerShell 的安全性
整合指令碼環境(ISE)與指令碼除錯
PowerShell 應用案例
– 存取登錄表(Registry)
– Windows 管理與盤點
– 使用 ADSI 管理網域使用者及群組帳戶
37
使用 [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")
38
在 AD 中建立物件
• 先連到目標物件的父層
• 接著使用 Create method
– 指定 objectClass 及 RDN, 要記得執行 SetInfo
$objChild=$objParent.Create(objectClass,RDN)
– ObjectClass 為 OrganizationalUnit、Group、User 等
$objOU=$objDomain.Create("OrganizationalUnit","OU=Demo")
$objOU.SetInfo()
39
在 AD 中刪除物件
• 先連到目標物件的父層
• 再使用 Delete method, 並指定要移除物件的 ObjectClass 及
RDN
$objOU=[ADSI]"LDAP://OU=Demo,dc=uuu,dc=com,dc=tw"
$objOU.Delete("group","CN=Demo Users")
40
使用者帳戶管理
• 使用者登入名稱
– SamAccountName 與 userPrincipalName 屬性
• 重設使用者帳戶的密碼
– 使用 SetPassword method
• 帳戶停用與啟用
– 變更 AccountDisabled 屬性 (v2)
$objUser.put("SamAccountName","Alan")
$objUser.SetPassword("Pa$$w0rd")
$objUser.AccountDisabled="False"
41
設定 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()
42
群組成員管理
• 新增群組成員
– 使用 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
43
• 情境
– Vincent 顧問將協助資訊部門在兼顧安全的
前提下,提昇 AD 管理效率.
• 解決方案
– 使用 PowerShell 指令檔進行 AD 管理
– 特別注意指令碼安全性與變更管理
44
相關資源
• 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
45
在何處取得 TechNet 相關資訊?
• 訂閱 TechNet 電子報
– http://www.microsoft.com/taiwan/technet/flash/
• 參加 TechNet 的活動
– http://www.microsoft.com/taiwan/technet/
• 下載 TechNet 研討會簡報與錄影檔
– http://www.microsoft.com/taiwan/technet/webcast/
46
周邊用餐指引
47
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
48