自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用PowerShell簡(jiǎn)化組策略的管理?

運(yùn)維 系統(tǒng)運(yùn)維
在本文中,筆者將為您介紹在WindowsPowerShell中,如何直接使用為VBScript(以及通?;贑OM的腳本語言)之類的WindowsScriptingHost語言編寫的Microsoft®組策略管理控制臺(tái)(GPMC)API在自己特有的環(huán)境中簡(jiǎn)化組策略的管理。

windows系統(tǒng)中的組策略相信經(jīng)常使用電腦的用戶應(yīng)該已經(jīng)不陌生了吧,但是如何簡(jiǎn)化對(duì)組策略的管理?使用什么技術(shù)呢?下文給出了詳細(xì)的描述。

Microsoft組策略技術(shù)不是在一夜間就流行起來的,這一技術(shù)在某種程度上比較難以理解,而且需要采用ActiveDirectory,在當(dāng)時(shí),ActiveDirectory服務(wù)才剛剛出現(xiàn),與當(dāng)時(shí)被奉為標(biāo)準(zhǔn)的Account/Resource域毫無相似之處,人們對(duì)此都很陌生。而時(shí)至今日,組策略幾乎成為每個(gè)組織管理Windows®基礎(chǔ)結(jié)構(gòu)的主要手段。我有種感覺,WindowsPowerShell™作為Microsoft***的管理技術(shù),將完全肩負(fù)起同樣的使命,成為主要的管理手段。實(shí)際上,WindowsPowerShell很可能會(huì)使身為組策略管理員的您工作起來更加輕松。

在本文中,我將為您介紹在WindowsPowerShell中,如何直接使用為VBScript(以及通?;贑OM的腳本語言)之類的WindowsScriptingHost語言編寫的Microsoft®組策略管理控制臺(tái)(GPMC)API在自己特有的環(huán)境中簡(jiǎn)化組策略的管理。

為組策略任務(wù)編寫腳本

幾年前Microsoft發(fā)布了GPMC,組策略管理員突然發(fā)現(xiàn)有許多簡(jiǎn)便易用的功能可供自己使用。具體地說,以組策略為中心的MMC管理單元體現(xiàn)了組策略管理向前邁進(jìn)了一大步,特別是相對(duì)于使用ActiveDirectory®的用戶和計(jì)算機(jī)而言尤其如此。不僅如此,管理員還可以借助一個(gè)全新的API,使用基于COM的語言(如VBScript)來執(zhí)行組策略管理任務(wù),例如備份和還原組策略對(duì)象(GPO)、在域之間遷移GPO、配置有關(guān)GPO和鏈接的安全設(shè)置以及編寫報(bào)告。

但遺憾的是,GPMC并沒有提供對(duì)組策略對(duì)象內(nèi)實(shí)際已配置設(shè)置進(jìn)行編輯的功能。換句話說,您可以對(duì)GPO容器執(zhí)行操作,例如,讀取GPO版本、讀取修改日期、創(chuàng)建全新的GPO、從不同的域中備份和還原/導(dǎo)入GPO,等等,但卻不能以編程的方式添加或更改GPO的內(nèi)容,例如添加新的重定向文件夾或新的軟件安裝。通常,您只能使用組策略對(duì)象編輯器手動(dòng)創(chuàng)建GPO并配置所有設(shè)置,然后備份該GPO,再將其導(dǎo)入測(cè)試環(huán)境中。只有當(dāng)各項(xiàng)功能經(jīng)過驗(yàn)證可以正常工作時(shí),您才能將其導(dǎo)入實(shí)際的應(yīng)用環(huán)境中。盡管缺少這一功能,但使用腳本而不是與GPMCAPI進(jìn)行人工交互也為日常的策略組管理節(jié)省了大量的時(shí)間、精力,同時(shí)也避免了不少錯(cuò)誤。

下一級(jí)別

WindowsPowerShell與VBScript之類的腳本語言有何不同?對(duì)于初學(xué)者而言,WindowsPowerShell是一種外殼程序,至少就目前來說,您可以將其視為一種命令行解釋器。盡管VBScript可以從命令行運(yùn)行,但VBScript文件卻不能逐行運(yùn)行。相比之下,WindowsPowerShell腳本則可以作為一系列單獨(dú)命令動(dòng)態(tài)地創(chuàng)建。此外,WindowsPowerShell還具有一些功能類似于VBScript中的子例程的函數(shù),它們可在WindowsPowerShell命令提示符下實(shí)時(shí)地進(jìn)行創(chuàng)建。

更值得一提的是,WindowsPowerShell基于Microsoft.NETFramework,而VBScript則依賴于早期的COM技術(shù)。這意味著,目前有大量的.NET代碼可直接在WindowsPowerShell內(nèi)使用。

總而言之,利用WindowsPowerShell,您可以獲得完全的腳本支持和交互模式,多種功能集于一身。本文提供的示例均為命令行輸入內(nèi)容,因此您可以一邊看示例一邊嘗試著輸入,不過,如果您將它們放入WindowsPowerShell腳本文件運(yùn)行,它們也同樣能正常工作。

使用WindowsPowerShell重新創(chuàng)建早期腳本

在開始采用一項(xiàng)新技術(shù)時(shí),您要做的***一件事就是拋棄以前的全部工作成果。您可以使用三種方法從GPMCAPI訪問COM對(duì)象,或者主要是重新利用任何早期VBScript。下面是可選的三種方法:

1.使用C#或托管C++等編程語言編寫一個(gè)WindowsPowerShellcmdlet。

2.使用WindowsPowerShell訪問MSScript.ocx中的ScriptControl,以封裝早期腳本。

3.將COM調(diào)用封裝在可重用的WindowsPowerShell函數(shù)中或直接調(diào)用COM對(duì)象。

我將重點(diǎn)介紹第三種方法,但首先讓我們簡(jiǎn)單了解一下所有方法。

創(chuàng)建WindowsPowerShellCmdlet

Microsoft在WindowsPowerShell中放入了大量的cmdlet,這些cmdlet允許您復(fù)制文件、將輸出內(nèi)容格式化、檢索日期和時(shí)間等,但您也可以自己創(chuàng)建cmdlet。有關(guān)整個(gè)過程的完整詳細(xì)記錄,請(qǐng)?jiān)L問msdn2.microsoft.com/ms714598.aspx。概括地講,主要步驟如下所示:

1.使用.NET編程語言(如C#)創(chuàng)建一個(gè)類庫(kù)DLL。

2.創(chuàng)建一個(gè)新類并從基類cmdlet繼承。

3.設(shè)置各種屬性,以確定名稱、用法、輸入?yún)?shù)等,并添加您的代碼。

由于WindowsPowerShell基于.NETFramework,任何作為參數(shù)返回或傳遞的類型(如字符串、對(duì)象等)在代碼中與在WindowsPowerShell中都是完全相同的,不需要進(jìn)行任何特殊類型的轉(zhuǎn)換。

這一解決方案真正強(qiáng)大之處在于您將擁有一種完全受自己支配的編程語言。

使用MSScript.ocx中的ScriptControl對(duì)象封裝早期腳本

顯然,您需要VBScript引擎來運(yùn)行VBScript文件。令人不太注意的是,該引擎是COM對(duì)象,而且由于您可以從WindowsPowerShell使用COM對(duì)象,因此可以調(diào)用VBScript引擎。過程如下所示:

 

  1. $scriptControl=New-Object-ComObjectScriptControl  
  2.  
  3. $scriptControl.Language=‘VBScript’  
  4.  
  5. $scriptControl.AddCode(  
  6.  
  7. ‘FunctionShowMessage(messageToDisplay)  
  8.  
  9. MsgBoxmessageToDisplay  
  10.  
  11. EndFunction’)  
  12.  
  13. $scriptControl.ExecuteStatement(‘ShowMessage  
  14.  
  15. “HelloWorld”’)  
  16.  

 

如果您在WindowsPowerShell命令行界面(CLI)中輸入此代碼,則會(huì)由某參數(shù)調(diào)用并執(zhí)行VBScript函數(shù),從而顯示一個(gè)帶有文本“HelloWorld”的消息框。

這時(shí)有些人可能會(huì)想:“太棒了!我已經(jīng)掌握了從WindowsPowerShell使用COM的技巧,不用再繼續(xù)讀這篇文章,馬上開始使用我的早期GPMC腳本填充ScriptControl對(duì)象吧。”很遺憾,事情沒有那么簡(jiǎn)單。隨著腳本的增大,這種方法很快就會(huì)變得非常復(fù)雜而繁瑣。

封裝COM對(duì)象

由此可見,第三種方法是***的:將COM調(diào)用封裝在可重用的WindowsPowerShell函數(shù)中,這樣您就能夠在GPMCAPI中使用COM對(duì)象。下列代碼將說明如何直接在WindowsPowerShell中創(chuàng)建.NET對(duì)象。在此示例中,可以使用FileInfo對(duì)象獲得文件的大?。?/p>

 

  1. $netObject=New-ObjectSystem.IO.FileInfo(  
  2.  
  3. “C:\boot.ini”)#CreateaninstanceofFileInfo  
  4.  
  5. #representingc:\boot.ini  
  6.  

 

請(qǐng)注意,“#”在WindowsPowerShell中用于表示行內(nèi)注釋。使用此新實(shí)例化的FileInfo對(duì)象,只要鍵入以下代碼即可輕松獲得boot.ini的大?。?/p>

 

  1. $netObject.Length#Displaythesizeinbytesofthe  
  2.  
  3. #fileinthecommandlineinterface  
  4.  

 

等等,我們不是說要談?wù)揅OM對(duì)象和VBScript轉(zhuǎn)換嗎?沒錯(cuò),但請(qǐng)看以下命令:

 

  1. $comFileSystemObject=New-ObjectCComObjectScripting.FileSystemObject  
  2.  

 

您會(huì)發(fā)現(xiàn),此處的語法與我之前從.NETFramework創(chuàng)建本地對(duì)象時(shí)所用的基本相同,差別只有兩點(diǎn):***,我添加了CComObject開關(guān),將WindowsPowerShell指向了COM環(huán)境,而不是.NET環(huán)境。第二,我使用的是COMProgID,而并非.NET構(gòu)造函數(shù),在本例中為Scripting.FileSystemObject。這里的ProgID是您經(jīng)常使用的名字。在VBScript中,等同的代碼應(yīng)為:

 

  1. SetcomFileSystemObject=CreateObject(  
  2.  
  3. “Scripting.FileSystemObject”)  
  4.  

 

若要使用VBScript獲得該文件的大小,請(qǐng)將上面的代碼行連同以下代碼一起添加到一個(gè)文件中:

 

  1. SetcomFileObject=comFileSystemObject.GetFile(  
  2.  
  3. “C:\Boot.ini”)  
  4.  
  5. WScript.EchocomFileObject.Size  
  6.  

 

然后,使用Cscript.exe等運(yùn)行它。在WindowsPowerShell中,您可以按如下所示獲得文件大小(如果您愿意,可以從WindowsPowerShell命令行直接輸入):

 

  1. $comFileObject=$comFileSystemObject.GetFile(  
  2.  
  3. “C:\boot.ini”)  
  4.  
  5. $comFileObject.Size  
  6.  

 

當(dāng)然,我本可以使用管理驅(qū)動(dòng)器內(nèi)對(duì)象的WindowsPowerShellcmdlet對(duì)讀取文件大小的VBScript進(jìn)行轉(zhuǎn)換,但我想向您展示從WindowsPowerShell訪問COM是多么容易。請(qǐng)注意,雖然我指示W(wǎng)indowsPowerShell創(chuàng)建的是一個(gè)COM對(duì)象,但實(shí)際創(chuàng)建的對(duì)象(此處為$comFileSystemObject)是一個(gè)封裝了該COM對(duì)象并公開了其接口的.NET對(duì)象。不過,就本文而言,這樣做沒有任何影響。

運(yùn)行狀態(tài)的WindowsPowerShell

現(xiàn)在,您已經(jīng)知道如何從WindowsPowerShell訪問COM,接下來,我們要專門介紹組策略。此處的示例將展示一些簡(jiǎn)短的代碼段,讓您對(duì)如何從WindowsPowerShell使用GPMCAPI有一個(gè)大致的概念;您可以從本文相關(guān)的代碼下載處,在線為technetmagazine.com/code07.aspx,下載到一整套WindowsPowerShell函數(shù)集來管理組策略。圖1所列為下載內(nèi)容中包含的各種函數(shù)。

在閱讀本節(jié)內(nèi)容時(shí),您可以隨意啟動(dòng)WindowsPowerShell命令行并鍵入命令。但是請(qǐng)記住,有些命令要依賴于前面的命令。也就是說,最初創(chuàng)建的一些對(duì)象在以后也會(huì)用到,因此,請(qǐng)?jiān)谕粋€(gè)WindowsPowerShell會(huì)話中執(zhí)行操作。如果您關(guān)閉該會(huì)話,則必須從頭開始,重新鍵入所有命令。

好,現(xiàn)在就讓我們先用WindowsPowerShell創(chuàng)建一個(gè)新的GPO。Microsoft的組策略團(tuán)隊(duì)隨GMPC提供了許多能夠運(yùn)行正常的VBScript示例,您可以利用它們加快工作速度。這些示例位于%ProgramFiles%\GPMC\Scripts目錄中,您還可以在該目錄下找到一個(gè)包含GPMCAPI文檔的gpmc.chm文件。接下來讓我們看看CreateGPO.wsf腳本,仔細(xì)研究一下它為何能夠正常運(yùn)行。

在腳本的開頭,您會(huì)發(fā)現(xiàn)這么一行:

 

  1. DimGPM  
  2.  
  3. SetGPM=CreateObject(“GPMgmt.GPM”)  
  4.  

 

這基本上是所有組策略管理會(huì)話或腳本的起點(diǎn),因?yàn)槭撬鼘?shí)例化了GPMgmt.GPM類,從而使大多數(shù)GPMC功能都能夠被訪問。接下來,我們轉(zhuǎn)而從WindowsPowerShell執(zhí)行這一操作:

 

  1. $gpm=New-Object-ComObjectGPMgmt.GPM  
  2.  

 

現(xiàn)在,您已獲得了組策略管理的起點(diǎn),接下來要了解使用它能夠做些什么。通常您需要閱讀相關(guān)文檔來獲得此類信息,但WindowsPowerShell提供了一個(gè)非??岬墓δ?。如果鍵入以下一行,您可以得到如圖2中所示的輸出:

圖2Get-Member輸出(單擊該圖像獲得較小視圖)

$gpm|gm

我覺得這個(gè)功能真的很棒。請(qǐng)注意觀察,看Get-Member(orgm)cmdlet是如何允許您直接從命令行查看該對(duì)象所支持的屬性和方法的。這當(dāng)然不能等同于閱讀文檔,但如果您不記得參數(shù)的確切個(gè)數(shù)或確切名稱等,該功能可以讓您輕松使用熟悉的對(duì)象。請(qǐng)牢記一點(diǎn),在您查看GPMC文檔節(jié)點(diǎn)列表時(shí),會(huì)發(fā)現(xiàn)它很象GPM對(duì)象,而且所有其他類均帶有前綴字母I;這是由于COM的內(nèi)部工作方式而造成的,我們不需要過分關(guān)注這一點(diǎn);這是專為C++程序員編寫本地COM代碼準(zhǔn)備的,用于表示界面和實(shí)現(xiàn)它的類之間的差異。另外還要注意,使用GPMCAPI時(shí),只有一個(gè)對(duì)象需要您采用此方法來創(chuàng)建,那就是GPMgmt.GPM;其他所有對(duì)象均使用該GPM對(duì)象開始的方法來創(chuàng)建。

現(xiàn)在,我們要繼續(xù)創(chuàng)建新的GPO。

圖3說明了創(chuàng)建一個(gè)GPO是如此的簡(jiǎn)單。請(qǐng)注意,在這里我省去了一些代碼,包括對(duì)錯(cuò)誤的處理(例如,如果您無權(quán)創(chuàng)建GPO會(huì)出現(xiàn)什么情況),并且我已對(duì)域名進(jìn)行硬編碼,這些都是您應(yīng)該了解的。

現(xiàn)在,您已經(jīng)學(xué)會(huì)如何創(chuàng)建GPO,讓我們打開一個(gè)現(xiàn)有的GPO。您仍具有對(duì)域$gpmDomain的引用,因此請(qǐng)鍵入以下內(nèi)容:

 

  1. $gpmExistingGpo=$gpmDomain.GetGPO(  
  2.  
  3. “{31B2F340-016D-11D2-945F-00C04FB984F9}”)  
  4.  
  5. #OpenanexistingGPObasedonitsGUID,  
  6.  
  7. #inthiscasetheDefaultDomainPolicy.  
  8.  
  9. $gpmExistingGpo.DisplayName  
  10.  
  11. #ShowthedisplaynameoftheGPO,it  
  12.  
  13. #shouldsayDefaultDomainPolicy  
  14.  
  15. $gpmExistingGpo.GenerateReportToFile($gpmConstants.ReportHTML,“.\DefaultDomainPolicyReport.html”  
  16.  

 

上述代碼以HTML的形式完整報(bào)告了DefaultDomainPolicy中的各項(xiàng)設(shè)置,但是很明顯,您可以使用任何一種方法和屬性(如ModificationTime,它說明該GPO***被修改的時(shí)間)來得知該GPO中所有設(shè)置的更改時(shí)間。

這是非常實(shí)用的。例如,您很可能遇到過這類情況:電話瘋狂地響個(gè)不停,用戶紛紛來電抱怨說他們的計(jì)算機(jī)運(yùn)轉(zhuǎn)異常。您懷疑這是更改、添加或刪除了GPO設(shè)置造成的,但沒有線索,不知該從哪個(gè)GPO著手。此時(shí),WindowsPowerShell可以救急!只要在WindowsPowerShell命令行中輸入圖4所示的腳本,就可以獲得過去24小時(shí)內(nèi)更改的所有GPO。

請(qǐng)注意Cge運(yùn)算符,它表示大于或等于。如果您習(xí)慣使用其他腳本或編程語言中的<和>運(yùn)算符,可能會(huì)有些不習(xí)慣。但由于這些運(yùn)算符主要用于重定向,例如,將輸出重定向到文件,因此在WindowsPowerShell中不可將其用作比較運(yùn)算符。

結(jié)束語

圖5所列為將一個(gè)GPO的設(shè)置復(fù)制到另一GPO中的完整腳本。現(xiàn)在,您應(yīng)該能清楚了解如何將這一新技術(shù)用于組策略,如何才能重新使用任何COM對(duì)象或利用COM對(duì)象的VBScript代碼。

正如組策略一樣,WindowsPowerShell必將成為任何Windows管理環(huán)境的組成部分。但面對(duì)數(shù)百萬行需要進(jìn)行遷移或維護(hù)的VBScript代碼,希望此教程會(huì)對(duì)您有所幫助。

您可以使用許多資源來改進(jìn)組策略管理和其他先前使用VBScript的領(lǐng)域,這些資源包括下載內(nèi)容中的WindowsPowerShell函數(shù),另外TechNet網(wǎng)站上還提供了VBScript到WindowsPowerShell的轉(zhuǎn)換準(zhǔn)則,這一極為實(shí)用的準(zhǔn)則在您了解VBScript中的等同內(nèi)容的情況下,可以提示您如何在WindowsPowerShell中執(zhí)行常見任務(wù)。您可以從microsoft.com/technet/scriptcenter/topics/winpsh/convert獲得該轉(zhuǎn)換準(zhǔn)則。

此外,GPMCAPI也提供完整的文檔內(nèi)容,您可以從組策略網(wǎng)站(microsoft.com/grouppolicy)下載相應(yīng)的信息。

***但并非最不重要的一點(diǎn),如果您尚未安裝WindowsPowerShell,那還在等什么呢?現(xiàn)在就從下載吧。祝您愉快!

希望本文介紹的使用PowerShell簡(jiǎn)化組策略管理的方法能夠?qū)ψx者有所幫助,更多有關(guān)組策略的知識(shí)還有待于讀者去探索和學(xué)習(xí)。

【編輯推薦】

  1. WindowsVista組策略詳解
  2. WindowsVista如何部署組策略?
  3. 如何在組策略編輯器中添加管理模板?
  4. 如何通過組策略設(shè)置群集用戶賬戶登錄權(quán)限?
  5. 如何在windows系統(tǒng)的域控制器中打開和使用組策略 ?
責(zé)任編輯:韓亞珊 來源: 火魔網(wǎng)
相關(guān)推薦

2019-05-05 08:00:00

Windows密碼組策略

2011-07-28 13:25:46

進(jìn)入組策略

2011-08-03 08:30:23

2009-02-18 20:27:24

組策略提升Windows性能

2011-07-27 13:59:04

2011-07-21 17:08:41

組策略

2013-05-13 09:59:37

Windows操作系統(tǒng)虛擬化網(wǎng)絡(luò)

2011-07-28 14:07:30

2011-07-22 14:11:17

組策略

2011-07-28 16:27:48

域控制器組策略

2009-01-11 09:47:00

2011-03-15 15:00:56

組策略

2011-08-01 18:34:59

組策略編輯器管理模板

2011-07-27 11:24:45

組策略組策略管理器

2011-07-28 13:56:38

組策略組策略編輯器

2011-07-21 15:36:03

組策略禁止U盤

2011-08-03 09:28:23

2011-07-22 09:31:11

2011-07-21 17:31:51

本地組策略Windows Vis

2011-05-31 10:56:43

PowerShell
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)