在我的开发和生产环境中,域或服务器本地安全组是权限分配的关键。在少数场合下,我会为单独的用户授权,但一般情况下,都是遵从最佳实践,就是将用户ID加入到组中。要移除一个用户的入口,我只需从组中删除该用户的账号即可。脚本使你可以快速地列举组成员,因此可以简化本地组的管理,包括增加和删除成员以及更改组的属性。你可以将脚本与一些本地组相关的工具联合使用,比如:Local、Findgrp、Cusrmgr、MemberOf,和LG等。随后的FAQ会帮助你为特定的场合识别最佳的工具。这些FAQ包含5个脚本,用来展示如何使用这些工具。范例脚本并没有使用这些工具的全部功能,因此要更详细地了解这些工具的功能,你需要阅读每一个工具的在线帮助。你可以访问Windows Scripting Solutions站点,下载这些脚本以及定制指导。Local、Findgrp和Cusrmgr等工具是Microsoft Windows 2000 Professional Resource Kit和Microsoft Windows 2000 Server Resource Kit.的一部分。微软经常将来自过期资源包的工具作为公共领域软件发行。但不幸的是,Local、Findgrp和Cusrmgr工具没有包含在当前的公共域中,因此你需要获取一份资源包拷贝,或者经常检查微软站点直到这些工具被发布。MemberOf和LG工具可从Joeware.net站点获得。
global和local工具现在对于列举组还有用吗?在我的环境中需要一个脚本,它可以列出给定PC和服务器上的本地Administrators、Backup Operators和Power Users组的成员。我应该用什么工具?如何将结果记录到一个文件中?
本地工具在今天仍然很实用,我经常利用它们。像大多数管理员一样,我不再使用global工具。global和local工具来自于Win2K之前的资源包。local工具的一个限制是它不能工作于嵌套组,因此单一的local命令无法确定嵌套组的成员。有时这个限制很严重,有时也无关紧要。同时,local工具仅是一个查询工具,不能编辑组的设置。不过,在特定的场合下,这个传统工具还是有价值的。关于你所需要的脚本,你可以用几种方法枚举组成员。你没有说明要处理多少台机器,因此列表1所示的GetAdministratorsAndOtherKeyGroups.bat脚本展示了两种使用local工具检查组成员的不同方法。列表1的Callout A适用于检查大数量PC或服务器的组成员。Callout B则适用于小数量机器。
列表1: GetAdministratorsAndOtherKeyGroups.bat
Set InputList=D:\serverslist.txt
Set LocalLoc=D:\Local.exe
Set OutFile=D:\OutputFile.txt
:: BEGIN CALLOUT A
:: BEGIN COMMENT
:: For a large number of PCs or servers, use For /f and parse an input list.
:: END COMMENT
For /f "tokens=*" %%i in (%InputList%) Do (Set Server=%%i) & (Call :Next)
:: END CALLOUT A
:: BEGIN CALLOUT B
:: BEGIN COMMENT
:: For a small number of machines, use the For /d (currently commented out).
:: END COMMENT
:: For /d %%i in (ServerA ServerB ServerC ServerD ServerE ServerF
ServerG ServerH) Do (Set Server=%%i) & (Call :Next)
:: END CALLOUT B
Echo Run Complete
Goto :EOF
:Next
Echo %server% ******************** >>"%OutFile%"
Echo Administrators Group>>"%OutFile%"
%LocalLoc% "Administrators" \\%server%>>"%OutFile%"
Echo.>>"%OutFile%"
Echo Backup Operators Group>>"%OutFile%"
%LocalLoc% "Backup Operators" \\%server%>>"%OutFile%"
Echo.>>"%OutFile%"
Echo Power Users Group>>"%OutFile%"
%LocalLoc% "Power Users" \\%server%>>"%OutFile%"
Echo.>>"%OutFile%"
Goto :EOF
我需要更改一些本地组的描述。我们在组描述中包含了组所有者的电话号码。当我们需要更改电话号码时,我们必须定位所有用户拥有的组并手工更改电话号码。我不希望更改整个注释,因为它包含其它组信息。我认为可以使用一个脚本来更改电话号码,从而节省时间,但是我应该使用什么工具,如何使用脚本更改电话号码,同时不丢失注释字段内的其它数据?
你可以使用LG工具,它是来自Joeware.net的一个本地组编辑工具。LG工具与Local工具机理类似。列表2所示的CommentReplace.bat脚本展示了如何使用这个工具。这个脚本查找你在列表2的callout A中指定的电话号码。脚本使用Set substitution命令用新的号码替换旧的电话号码字符串,你可以在callout B中看到这个步骤。检查LG工具的在线帮助菜单可以了解更多功能。
列表2: CommentReplace.bat
Set LGgLoc=D:\LG.exe
For /f "tokens=1,* delims=:" %%i in
:: BEGIN CALLOUT A
('%LGgLoc% \\work1 -comment -q ^| Find "555-234-1234"')
:: BEGIN CALLOUT A
Do (Set Group=%%i) & (Set Comment=%%j) & (Call :ChangeCom)
Goto :EOF
:ChangeCom
Set Group="%Group%"
Set Group=%Group: "="%
:: BEGIN CALLOUT B
Set NewComment=%Comment:555-234-1234=505-234-1234%
:: END CALLOUT B
%LGgLoc% %Group% -setcomment "%NewComment%"
Goto :EOF
我希望编写一个简单脚本,以便在用户咨询权限问题时,我们的桌面帮助技术人员可以查询或比较用户组成员。我的脚本应该使用什么工具,有什么办法让脚本对于不懂脚本的用户更友好?
传统上,Findgrp命令是查询用户组成员的最好工具。像Local工具一样,Findgrp工具写于Win2K以及嵌套组出现之前,因此它只能列出直接组成员。但是有时你也只需要这些。我不清楚你要为桌面帮助技术人员提供多少细节,因此我写了两个脚本。列表3所示的FindUserLocalGroups.bat,使用Findgrp工具查询直接组成员。列表4所示的MemberOf-SorterandCounter.bat使用来自Joeware.net的MemberOf工具同时查询直接组成员和嵌套组成员。两个脚本都使用Set /P命令,它提示用户进行输入,然后将输入指派到指定的变量。例如,FindUserLocalGroups.bat显示一个提示:reads Type the domain\UserID and press Enter,然后将输入的域和用户名指派到fgname变量。桌面帮助技术人员可以键入或粘贴域和用户名,从而在屏幕上获得易于查询的规范格式的结果,也可以将其结果粘贴入一个邮件、文档或电子表格中。两个脚本也使用Sort命令按字母顺序排列组名称以便于查看。
列表3: FindUserLocalGroups.bat
Set FindgrpLoc=D:\Findgrp.exe
@Echo Off
Set /P fgname=Type the domain\UserID and press Enter:
Echo.
Set /P fgdomain=Type the domainname or \\servername you want to search
and press Enter:
Echo.
Echo User "%fgname%" belongs to the following local groups on %fgdomain%:
%FindgrpLoc% %fgdomain% "%fgname%" /L /Q|Sort
Echo.
Echo Press any key to Exit... & Pause >NUL
Goto :EOF
列表4: MemberOfSorterandCounter.bat
Set MemberOfLoc=D:\MemberOf.exe
@Echo Off
Set counter=0
Set domID=
Set /P domID=Type the domain\UserID and press Enter:
Echo.
Echo Please Wait....
If Exist "%temp%\memof.txt" Del "%temp%\memof.txt"
For /f "tokens=1,2,3,4 delims=[]" %%i in ('%MemberOfLoc% -q -u %domID%')
Do (Set group=%%l) & (Call :Next)
For /f "tokens=*" %%i in ('Sort^<%temp%\memof.txt')
Do (Set group=%%i) & (Call :Next2)
Echo.
Echo Press any key to Exit... & Pause >NUL
If Exist "%temp%\memof.txt" Del "%temp%\memof.txt"
Goto :EOF
:Next
Echo %group%>>"%temp%\memof.txt"
Goto :EOF
:Next2
Set /A counter=%counter%+1
Echo %counter%) %group%
Goto :EOF
我们的公司进行了重组,需要更改域本地组的名称。我担心在GUI界面中手工进行操作会很费时并容易出错。请问如何使用脚本进行更改?
在Cusrmgr工具出现之前,用脚本进行这些更改是非常困难的,但是现在非常简单。我编写了ChangeLocalGroupNames.bat脚本,如列表5所示,它可以帮助你更改组名称。你需要创建一个逗点分割值(CSV)输入列表,第一列是旧的组名称,第二列是新的组名称。由于是进行批量更改,因此在对全部组列表执行脚本之前,应该彻底校验输入的准确性并用少量组进行测试。我加了一个日志文件,你可以查看每个改名操作的成功与错误。Cusrmgr工具也可以执行其它组更改功能,比如重设口令。
列表5: ChangeLocalGroupNames.bat
Set InputList=D:\grouplist.txt
Set CusrmgrLoc=D:\cusrmgr.exe
Set Log=D:\grouplog.txt
:: BEGIN COMMENT
:: For renaming a large number or groups, use an input file with commas
:: separating the old and the new group names.
:: END COMMENT
For /f "tokens=1,2 delims=," %%i in (%InputList%) Do %CusrmgrLoc%
-m \\work1 -rlg "%%i" "%%j" |Find "Renaming">>"%Log%"
Echo Run complete
Goto :EOF
试运行时机
现在你拥有了FAQ提供的5个脚本。我在运行Windows XP Service Pack 2(SP2)的机器上进行了测试。在将它们应用到实际环境中之前,你应该总是在测试环境中测试你的脚本。这些脚本以及它们所使用的本地组工具可以节约查询和更改本地组以及用户成员信息的时间,不管你的环境规模是大还是小。
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |