PowerShell V2介绍(32) – 组策略模块(中)

大家好,今天要为大家介绍的是组策略模块中名词部分为GPPrefRegistryValue和GPRegistryValue的cmdlets。作为系统管理员的我们都了解组策略的强大,也惊叹于通过组策略我们就能轻松控制组织内Windows系统的一些行为和设置。但有些时候在组织中我们可能还需要通过注册表控制其他软件的一些行为和设置,在Windows Server 2003时代,我们可能会选择使用脚本来修改相关的注册表值,因为组策略中自带的相关注册表设置还是比较孱弱的。自从Windows Server 2008中引入组策略首选项以来,修改注册表变得不再繁琐。但是重复的GUI操作有些时候还是比较让人厌烦的,并且有时我们想要在测试环境中重复这些设置就更会令人心烦意乱。

而在Windows Server 2008 R2中由于PowerShell组策略模块的出现,修改GPO中注册表相关设置的操作变得不再繁琐。而完成具体设置工作的就是名词部分是GPPrefRegistryValue和GPRegistryValue的cmdlets。接下来我们就先来看看设置组策略首选项中注册表的cmdlets,对应的图形界面如下图所示:

  • GPPrefRegistryValue

首先我们可以使用Set-GPPrefRegistryValue来创建需要设置的组策略首选项中的注册表设置,使用Set-GPPrefRegistryValue时需要指定组策略对象的名称,Context参数,即是用户配置还是计算机配置,具体注册表键的路径,注册表值名、值以及值类型(可选的值有,String、ExpandString、Binary、DWord、MultiString、ExpandString 和 Qword,和注册表中显示的及以往使用的名称略有不同),及具体操作类型(Create、Update、Replace 或 Delete)。

下面的例子中将在注册表中设置“注册组织”,具体命令如下:

Set-GPPrefRegistryValue -Name Shanghai -Context User -Key "HKLM\Software\Microsoft\Windows NT\CurrentVersion" `
-ValueName RegisteredOrganization -Value " NWTRADER" -Type String -Action Update

命令的执行效果如下:

大家可以看到,该cmdlet使用起来还是相对简单的,但是大家也看到了在返回的结果中WMIFilter是一个空对象,想必有朋友就会感兴趣如何去设置这个对象属性了。 但可惜的是目前没有现成的cmdlet支持,同时MSDN上的说明信息也非常有限,我们只能期待下一个版本的GroupPolicy模块了(如果不像2003时代那样独立发布GMPC的话,那我们可能需要等待Windows Server vNext了)。如果要批量设置的话,我们可以使用下面的代码:

Import-Csv .\GPPrefRegistryValue.csv | %{Set-GPPrefRegistryValue -Name $_.Name `
-Context $_.Context -Key $_.Key -ValueName $_.ValueName -Value$_.Value -Type `
$_.Type -Action $_.Action}

和批量创建用户一样,我们可以先准备一个csv文件,然后把对应的内容写入该文件,然后使用Import-CSV导入,并通过管道传递给Set-GPPrefRegistryValue进行设置。命令的执行结果如下:

其中GPPrefRegistryValue.csv的内容如下:

Name,Context,Key,ValueName,Value,Type,Action
Shanghai,User,"HKLM\Software\Microsoft\Windows NT\CurrentVersion",RegisteredOrganization,"NWTRader","String",Update
Shanghai,User,"HKLM\Software\Microsoft\Windows NT\CurrentVersion",RegisteredOwner,"NWTRader Users","String",Update

因此如果有大量注册表设置需要导入的话,最好使用以上方法,同时该方法也解决了生产环境与测试环境设置同步的问题,我们只需保留好相应的CSV文件即可。

接下来,我们可以用Get-GPPrefRegistryValue来确认刚才的创建工作有没有完成,具体命令如下:

Get-GPPrefRegistryValue -Name Shanghai -Context User -Key `
"HKLM\Software\Microsoft\Windows NT\CurrentVersion" | fl FullKeyPath,ValueName,Value

命令的运行结果如下:

最后我们再来看下如何删除以上的注册表首选项设置,我们首先需要使用Get-GPO得到组策略对象,然后将组策略对象通过管道传递给Remove-GPPrefRegistryValue删除即可,删除时需要指定Context及Key参数,具体命令如下:

Get-GPO Shanghai | Remove-GPPrefRegistryValue -Context User -Key `
"HKLM\Software\Microsoft\Windows NT\CurrentVersion"

命令的执行效果如下:

  • GPRegistryValue

接下来我们再来看一下另外一个和组策略注册表有关的名词GPRegistryValue,这里需要注意的是通过名词部分是GPRegistryValue设置的项目是不会出现在GPO编辑器的GUI界面中的(因为没有对应的模板),但是我们可以在GPMC的RSoP标签中查看,如下图所示:

具体设置命令如下:

Set-GPRegistryValue -Name Shanghai -Key "HKLM\Software\Microsoft\Windows NT\CurrentVersion" `
-ValueName RegisteredOrganization -Value "NWTrader" -Type String

而如果需要禁用注册表设置,并从客户端删除相关设置,则可以使用Disable参数禁用。命令的执行效果如下:

如果你只需从组策略中删除相关设置,并且需要保留客户端已经应用的设置,则需要使用Remove-GPRegistryValue来删除,具体命令如下:

Remove-GPRegistryValue -Name Shanghai -Key "HKLM\Software\Microsoft\Windows NT\CurrentVersion"

命令的执行效果如下:

相较而言,我想大家还是会喜欢通过组策略首选项来设置注册表。本次关于组策略模块中注册表相关设置的cmdlets的介绍就到此结束了,敬请期待下次的介绍。

此条目发表在PowerShel V2 CTP3 intro分类目录。将固定链接加入收藏夹。

留下评论