Cmdlet 和增益集

發佈日期: 2008 年 2 月 19 日

Cmdlet 和增益集

這是眾人為生命裡的特別人物尋覓禮物的年度時刻;嗯,不必多說,選擇新的 cmdlet 和新的 PowerShell 增益集並不用說「我愛你」。

好啦,但是新的 cmdlet 和新的 PowerShell 增益集仍不失為送禮的最佳選擇。

本页内容

Cmdlet 和增益集
Quest Cmdlets for Active Directory
NetCmdlets
GPMC PowerShell Cmdlets
PowerGadgets
PowerShell Community Extensions
Extensions for Windows PowerShell
PowerTab

Quest Cmdlets for Active Directory

為什麼 cmdlet 是送禮的最佳選擇?嗯,至少 cmdlet「不只是」cmdlet。例如 Quest Software 公司創造的 Active Directory cmdlet (免費下載),是任何與 Active Directory 為伍的管理者都應該試試的好東西。

相關連結

為什麼?利用 Windows PowerShell 管理 Active Directory 並非快樂的事,因為 PowerShell 並未提供 AD 提供者或任何 AD 相關的 cmdlet。因此,為了管理 AD,你不得不使用 ADSI 程式和 .NET Framework 類別的古怪混合體。這種日子結束了嗎?當然。

利用 Active Directory cmdlet 管理 AD 能有多容易?嗯,如果我們願意,可以待上一整天,然後不斷的以範例展示 Active Directory cmdlet 管理 AD 的簡易程度。可惜的是我們的篇幅有限。

如果處理過 AD,就知道繫結使用者帳號有多困難,因為 AD 需要你指定使用者的 ADsPath,才能連結到使用者的帳號:

LDAP://CN=Ken Myer,OU=Finance,dc=fabrikam,dc=com

除非你記得所有使用者的 ADsPath,否則這實際上是困難重重。

那麼,Active Directory cmdlet 可以提供何等協助呢?這是其中一種方式:它只需要利用使用者的登入名稱,就能讓你繫結使用者帳號:

Get-QADUser kmyer

或者你也可以利用使用者的網域和使用者名稱來繫結使用者帳號;

Get-QADUser "fabrikam\kmyer"

需要關閉 Ken Myer 的使用者帳號嗎?利用以下簡單的命令即可:

Disable-QADUser "fabrikam\kmyer"

需要網域控制器清單嗎?當然要:

Get-QADComputer -computerRole "DomainController"

或者,需要財物部門員工的使用者清單嗎?

Get-QADuser -searchroot 'fabrikam.com/UserAccounts' -ldapfilter '(department=Finance)'

是的,只要一行指令就可以搜尋 AD,所以現在你明白我們為何因為這些 cmdlet 而如此振奮了吧。

此外,Active Directory cmdlet 不只免費,這組好東西也伴隨了一份詳述每個 cmdlet 細節的 136 頁手冊 (並且提供大量的範例)。

也就是說,為何要花費時間閱讀這篇文章?你不是應該從 Quest 網站下載 Active Directory cmdlet 嗎?

NetCmdlets

且慢,如果不繼續閱讀這篇文章,你可能無法知道 /n Software 公司的網路 cmdlet:NetCmdlets (45天免費試用,價格有各種選擇,包括單機授權 $99美元)。NetCmdlets 提供了各種網路協定的存取,包括 SNMP、LDAP、DNS、HTTP、FTP、SMTP、POP、IMAP、Telnet 等等。想要以 Windows PowerShell 傳送 SMTP 或 POP 郵件?NetCmdlets 可以輕鬆辦到;想要以 Windows PowerShell 監控、管理 DNS 伺服器?NetCmdlets 可以輕鬆辦到;需要以 Windows PowerShell ping 電腦?有了 NetCmdlets,就能輕鬆以下列命令完成:

Send-Ping -server atl-dc-001

這裡還有一份新年小禮物,請笑納:你也可以利用 NetCmdlets 建立 .ZIP 檔案,例如以下的命令會將 C:\Scripts 資料夾裡的所有檔案壓縮成 C:\Test\Scripts.zip:

Write-Zip -Input C:\Scripts\* -Output C:\Test\Scripts.zip

哈哈哈,真的是超酷!

GPMC PowerShell Cmdlets

有人提過群組原則 cmdlet 嗎?SDM Software 公司的 GPMC PowerShell Cmdlets 1.0 (免費下載) 包含了一組很酷的 cmdlet,能讓你執行群組原則的管理工作,例如建立、刪除 GPO,連結 GPO 到站台、網域、OU,修改 GPO 安全設定,備份、還原 GPO (請注意,電腦必須安裝了 GPMC [Group Management Policy Console] 才能使用這些 cmdlet)。這些 cmdlet 真的有用嗎?當然,以下這行就能關閉 GPO 的 Computers 部分:

$x = Get-SDMGPO "Test GPO"; $x.SetComputerEnabled(0)
或者,若需要備份 GPO,就使用以下這兩行:
$x = Get-SDMGPO "Test GPO"
$x.Backup("C:\Test","Test GPO Backup - December 2007")
                

真的很有用。

PowerGadgets

PowerShell 禮物必定少不了 PowerGadgets (60 天免費試用,價格有各種選擇,包括單機授權 $299美元)。用過 Windows PowerShell 應該會熟悉能傳回電腦可用磁碟空間的 WMI 效能計數器:

get-wmiobject win32_perfformatteddata_perfdisk_logicaldisk |
select-object name,percentfreespace |
where-object {$_.Name -eq "_Total"}
你也一定熟悉上述命令所產生的結果:
name        percentfreespace
--------        -----------------------
_Total      57
                

但話說回來,這是 Windows PowerShell 命令,無法產生類似這樣的結果:

Ff730920.guide14(zh-tw,TechNet.10).jpg

或是這樣的結果:

Ff730920.guide15(zh-tw,TechNet.10).jpg

PowerGadgets 提供了意想不到的簡單作法,可以圖形格式顯示PowerShell的結果,包括指針刻度、計量器、圖表、甚至地圖。要多簡單才算是「意想不到的簡單」?嗯,看看以下這些傳回電腦可用磁碟空間 Windows PowerShell 指令碼:

Get-WMIObject Win32_PerfFormattedData_PerfDisk_LogicalDisk |
Select-Object Name, PercentFreeSpace |
Where-Object {$_.Name -eq "_Total"}
                

要怎麼以計量器圖形顯示傳回的資料?嘿,只要以管線的方式將資料導給 Out-Gauge cmdlet 即可:

Get-WMIObject Win32_PerfFormattedData_PerfDisk_LogicalDisk |
Select-Object Name, PercentFreeSpace |
Where-Object {$_.Name -eq "_Total"} |
Out-Gauge
                

酷!

附註:關於使用 PowerGadgets 的細節,可參考網路廣播 Amazing But True (英文)。

PowerShell Community Extensions

實用的 Windows PowerShell 禮物實在不少,我們都還沒介紹 PowerShell Community Extensions 呢!

PowerShell Community Extensions(免費下載)是一套包含了cmdlet、函式、過濾器、提供者的PowerShell百寶袋,全數皆由 PowerShell 社群成員所開發。這裡面有能傳回檔案版本資訊的 cmdlet,能修改檔案或資料夾建立或最後存取日期及時間的 cmdlet,能傳回 DHCP 伺服器和 AD 網域控制器資訊的 cmdlet,能建立檔案系統硬連結的 cmdlet。Scripting Guys 最愛的是一組能處理剪貼簿的 cmdlet。想要將剪貼簿的內容指定給變數嗎?使用如下的命令即可:

$x = Get-Clipboard

想將資料寫回剪貼簿嗎?這是方法之一:

Write-Clipboard $x

Ff730920.guide16(zh-tw,TechNet.10).jpg

現在只要以右鈕按下檔案總管左上角的圖示,選取 Open PowerShell Here 項目,就會開啟 PowerShell,並且設定在特定的資料夾。只要試一試你就能瞭解這項功能的實用性。

此外當然不能忘了介紹這個百寶袋裡的 DirectoryService 提供者。之前曾提及,以 PowerShell 管理 AD 是件苦差事,除非能藉由協力廠商或社群提供的增益集。當你安裝了 PowerShell Community Extensions,其實也安裝了能讓你如同存取檔案就能存取 AD 的 DirectoryService 提供者。例如,若您隸屬 Fabrikam 網域,想要一覽存放在網域根目錄的物件嗎?只要以下的命令即可:

Get-ChildItem fabrikam:

執行之後會傳回如下的結果:

LastWriteTime           Type                    Name
-------------------         ------                  --------
10/4/2007 11:41 AM  builtinDomain           Builtin
10/4/2007 11:58 AM  container               Computers
10/4/2007 11:42 AM  organizationalUnit      Domain Controllers
10/4/2007 11:41 AM  container               ForeignSecurityPrincipals
10/4/2007 11:54 AM  organizationalUnit      Groups
10/9/2007 3:27 PM       infrastructureUpdate    Infrastructure
10/4/2007 12:05 PM      organizationalUnit      InterForest Replicas
10/4/2007 11:41 AM  lostAndFound            LostAndFound
10/4/2007 11:42 AM  organizationalUnit      Machines
                

想要知道 Computers 容器的內容?只要以下的命令即可:

Get-Childitem fabrikam:\computers
                

不錯、不錯,真不錯。

Extensions for Windows PowerShell

Extensions for Windows PowerShell 也是值得納入新年福袋的實用上品,雖然仍在測試階段,但測試版本包含了一些有趣的小 cmdlet,例如能傳回可用的實體和虛擬成員的資訊、能輸出資料到 Windows Text-to-Speech 子系統、能傳回登入使用者、本機電腦、本地網域的名稱。這些 cmdlet 很容易使用,例如以下這個例子可以知道電腦是否已經連上網路:

Test-NetConnection

真的覺得好像小孩吃糖一樣簡單。

PowerTab

或許你知道 Windows PowerShell 包含了一些基本的Tab擴充功能,例如在 PowerShell 主控台輸入 get-c,然後按下 Tab 按鍵,PowerShell 會以 Get-ChildItem 取代 get-c,再按一次 Tab 按鍵,PowerShell 會以 Get-Command 取代 Get-ChildItem。這項功能會根據你所輸入的簡短命令,循環出現相關的名稱,讓你不需輸入完整的命令名稱,很酷吧。PowerShell 內建的 Tab 擴充功能也能用在檔案系統路徑,假設 C:\Scripts 是 C 磁碟唯一以 S 字母開頭的資料夾,因此若輸入 C:\S 並按下 Tab 按鍵,PowerShell 就會顯示 C:\Scripts。

這項功能已經很酷、很棒了,但依然比不上 PowerTab。這是一支由 /\/\o\/\/ 所開發的超酷小程式,酷之所在是它不只顯示一個可能的值 (例如 Get-ChildItem) 再要求你按 Tab 鍵顯示下一個可能的值 (例如 Get-Command),而是出現 IntelliSense 下拉式清單讓你從中選取:

Ff730920.guide8(zh-tw,TechNet.10).jpg

而且 PowerTab 的用途也不侷限於 PowerShell cmdlet 和檔案系統,也能處理 WNI 類別和 .NET Framework 類別。例如在載入了 PowerTab 的 PowerShell 主控台輸入以下命令並按下 Tab 鍵,你可能會對所見感到驚喜:

Win32_S

是的,下圖就是 PowerTab 所展現的驚喜:

Ff730920.guide9(zh-tw,TechNet.10).jpg

是的,這篇文章所介紹的 Windows PowerShell 小工具一定能讓你感到既驚又喜。繼續看下一篇文章吧!

下一篇:書籍