刚使用Active Directory的常见问题(二)。我们使用windows 2003 AD。如何检查我的网络内部的客户端电脑:
1、已经加入域。
2、并且用户也使用域账户登陆了机器。
回答:1、如何检查客户端电脑已经加入网域。
在服务器端检查:您可以在DC上的管理员工具中运行Active Directory Users and Computers,展开域节点,展开Computers,初始所有的加入域的计算机都会列在这个节点下。在客户端检查: 打开我的电脑的属性值,切换到“Computer Name”,您会看到当前计算机属于域或工作组。您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/
2、并且用户也使用域账户登陆了机器。
回答:您可以通过auditing policy来监控当前域用户登录的相关信息。具体信息请参考以下文档:
Audit logon events
http://technet2.microsoft.com/windowsserver/en/library/6847e72b-9c47-42ab-b3e3-691addac9f331033.mspx?mfr=true
Chapter 3: Audit Policy
http://www.microsoft.com/technet/security/guidance/serversecurity/tcg/tcgch03n.mspx
1、 用户加入域的机器名会保存在 computers OU中,但是当用户退出网域,此OU并不更新,仍然会保留该电脑名。(所以,我们判断此OU中的成员是加入过网域的机器,但是当前是否仍在域中,如何判断呢?)您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/
答:如果该计算机被正常退出domain加入workgroup中的话,它会显示为disable(标有红X)的状态。同时,您也可以使用dsquery命令找出当前domain中有多少台机器几周内没有登录域:
dsquery computer -inactive <NumWeeks>
该命令会找出当前domain中至少NumWeeks个礼拜没有登录过域的机器。
2、我想了解谁登入了网域,需要查log,这各方法不是很方便。我们人员很多,查起来会比较繁琐。而且log日至需要每一条都进入才能看到内容,并不能提炼成一个登入网域的人员列表。
答:同样您可以通过dsquery检查当前domain中至少NumWeeks个礼拜没有登录过域的用户
dsquery user -inactive <NumWeeks>
3、我们有办法可以强制要求用户加入网域或登入玉帐号吗?
答:如果用户知道该计算机本地管理员帐号的密码,那么您的要求恐怕无法达到。
4、以及,我可以提炼出加入网域的电脑名称,登入网域的帐户名称,的列表进行公告与报告用途吗?(图和提炼名单列表?
答:没有直接的方法满足您的需求,您需要写script,同时您可以参考Wen共享的脚本。您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/
Vicky Hu 胡晓洁 微软全球技术支持中心
你好,希望下面的方法对你有用。
1、活动目录的dsquery命令似乎可以满足你的需要,但是好像是要在纯2003的域功能级别,本想给你个工具,太大新闻组发不了;
2、给你个脚本,可以导出最近30天没有登录的用户到Excel文件,时间你可自己定义,见附件;
3、如果用户没有本地计算机用户帐号的密码,那他就不能登录到本地了,通过脚本更改用户的本地帐号密码;
4、第2点应该已经可以满足你的需求;
---不包含此行---
' Assign Variables
Dim DomainString, fso, DomianObj, UserDel, C, Code
Dim ChkLast, UserObj, Flag, s
' Create Object for File System Access您看到的文章来自活动目录seo http://gnaw0725.blogbus.com/c1404552/
set fso = CreateObject ("Scripting.FileSystemObject")
' Set Domain Name
DomainString = "overmcse.com" 'Modify this line or this script wont work
' Open ADSI and connect to Domain user data
Set DomainObj = GetObject("WinNT://" & DomainString)
DomainObj.Filter = Array("user")
' Insure that file does not already exist
IF fso.FileExists ("C:/temp/USER.TSV") THEN
set USERDel = fso.GetFile ("C:/TEMP/USER.TSV")
USERDel.Delete
End IF
' Create File in temp directory
set C = fso.CreateTextFile ("C:/TEMP/USER.TSV", True)
on error resume next
' Add collumn headings to new file
C.WriteLine "Name" & vbTab & "Description" & vbTab & "FullName" & _
vbTab & "LastLogin" & vbTab & "PasswordExpirationDate" & _
vbTab & "IsAccountLocked" & vbTab & "Class" & vbTab & "UserFlags"
' List all users
For Each UserObj In DomainObj
ChkLast = UserObj.LastLogin ' ChkLast is used to determine the last logon time.
IF (ChkLast < (Date - 30) OR ChkLast = NULL ) AND UserObj.UserFlags <> 661103 AND UserObj.UserFlags <> 515 THEN
s = CHR(34) & UserObj.Name & CHR (34)
s = s & vbTab
s = s & CHR (34) & UserObj.Description & CHR (34)
s = s & vbTab
s = s & UserObj.FullName
s = s & vbTab
s = s & UserObj.LastLogin
s = s & vbTab
s = s & CHR (34) & UserObj.PasswordExpirationDate & CHR (34)
s = s & vbTab
s = s & CHR (34) & UserObj.IsAccountLocked & CHR (34)
s = s & vbTab
s = s & CHR (34) &UserObj.Class & CHR (34)
s = s & vbTab
' Convert Flags to more undersandable terms.
Flag = UserObj.UserFlags
IF Flag = 66113 THEN
Code = "Password never expires and user cannot change password"
ELSEIF Flag = 66115 THEN
Code = "Account is Disabled"
ELSEIF Flag = 577 THEN
Code = "Account is not setup right, login not possible"
ELSEIF Flag = 515 THEN
Code = "Account is disabled and user must change password at next logon"
ELSEIF Flag = 513 THEN
Code = "Account has no flags set. User is active"
ELSEIF Flag = 66049 THEN
Code = "Password Does Not expire"
ELSE
Code = "Unknown Code"
END IF
s = s & CHR (34) & Code & CHR (34)
C.WriteLine s ' Write new line to file.
End IF
Next ' Repeat for all users
Wscript.Quit
---不包含此行---