跟踪企业台式机

我的一部分工作是确保对于特定OU中的计算机,实际上正在使用什么= AD中列出的内容= SCCM中列出的内容。 这是一个25万台电脑的环境,但我特别关心一个部门的70K。 将AD与SCCM进行比较是相当容易的,但是更难以追踪那些并不存在的计算机。 我试图想出创造性的方法来解决这个问题。

我的问题是:find不存在的机器查询AD与Powershell的计算机没有loginX天的好方法?

我想在PowerShell中更复杂的任务如下:从AD中拉dnshostnames Ping我的OU中的所有主机,并成功,将它们从列表中删除。 每6个小时运行一个星期一个星期,继续删除ping成功的机器。 笔记本电脑,我将不得不处理不同。

任何其他想法,build议等?

在Patricks综合build议的变体上,我将使用复制的LastLogontimeStamp属性缩小search范围:

 Import-Module ActiveDirectory $threshold = (Get-Date).AddDays(-44) $computers Get-ADComputer -Filter * -SearchBase "ou=desiredou,dc=domain,dc=tld" -Properties LastLogontimeStamp $oldComps = $computers | where {[Date.Time]::FromFileTime($_.lastlogontimestamp) -lt $threshold} 

然后, $oldComps会保存至less30天内没有login的所有计算机。

这有点违反直觉,阈值为44天,但为了防止大量复制更新到LastLogontimeStamp ,该属性仅在其值超过9天时更新。 如果该值在9到14天之间过时,则随机过程确定是否更新它。

这是一个很好的解释: http : //blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it- works.aspx

这听起来像你需要像oldcmp : http : //www.joeware.net/freetools/tools/oldcmp/

这将search为最近x天未login的计算机指定的域或组织单位,并为您提供报告或禁用这些计算机帐户的function。

Active Directory中的工具和表示只代表了域知道的事情,所以您仍然需要在Active Directory环境之外构build一个报告进程,以使您能够跟踪那些报告为尚未用于validation它们实际上具有的机器离开组织,应该被删除。 这里的一个典型例子就是笔记本电脑:这些工具可能会报告笔记本电脑已经不在使用的时候,这实际上隐藏了笔记本电脑只是在线使用而已。

可以使用类似的方法,包括SCCM中的报告来调查机器最后能够发出心跳的时间; 只要这些机器具有SCCM客户端的function,这可能是一个更好的方法,而不是拉出一个报告,并试图平衡他们 – 这将是一个非常劳动密集型,容易产生假阳性结果的技术。

计算机AD对象具有LastLogon时间戳记,可以为您提供计算机当前状态的有用指示器。

如果您能够安装第三方cmdlet,那么Quest Active Directory cmdlet将非常有帮助。

 $result = @() $OU = "DC=ncp,DC=co,DC=uk" Foreach($computer in (Get-QADComputer -SearchRoot "$ou" -sizelimit 0)) { $result += "$((Get-QADComputer $computer -IncludeAllProperties).lastLogon), $computer" } 

$ result将列出指定OU中的所有计算机,并列出其最后一次logindate,如下所示:

 06/10/2013 08:48:25, NATTHN21$ 05/13/2011 14:54:04, NATTHN02$ 06/10/2013 08:42:51, NATRHN01$ 06/10/2013 08:45:38, NCPHON01$ 

您需要针对此计算机可能login的所有DC运行此操作。 一个组织的大小这可能是不切实际的。

作为一种替代措施。 计算机AD对象上的对象属性“whenChanged”是机器帐户密码。 这会在30天后自动更新(通常在Win 2K及更高版本中是默认的,检查默认的域组策略对象可以确认这一点)。

如果您发现“whenChanged”超过30天的计算机帐户,则这些机器在此期间尚未login。 这适用于较大的多DCnetworking,因为这个数字在'lastLogon'不在的地方被复制。

只需在上面的脚本中修改该行即可删除“.lastLogon”,并将其replace为“.whenChanged”

如果您无法安装Quest AD,则需要使用安装有RSAT的计算机(或DC),并使用Get-ADComputer cmdlet(键入“Import-Module ActiveDirectory”)。

跟踪将来使用的第三个选项是使用login脚本。 几年前,我在一个客户那里做了这个,它运行得很好,虽然我们在一些人的机器上,而不是~70K。

当时我们的login脚本是.BAT文件。 在NETLOGON中使用以下行创build一个新的.BAT(例如LogonTrack.BAT)

 ::LogonTrack.BAT ECHO %date% >Z:\%computername% 

并在您的70K用户可能使用的任何loginbatch file的末尾添加一行

 call LogonTrack.BAT 

这将创build一个具有计算机名称的文件,而文件date是映射位置中的最后一个login名。

我不会推荐这个,但是你可以为这个信息审计事件日志,尽pipe我通常尽可能地避免日志潜水。 你需要事件4624 。

最后,我还在一个非常棒的客户端使用LANSweeper 。 这在旧电脑上有很好的报道。 但是,作为付费产品,需要单独安装和服务器,因此可能对您没有任何好处。 加上250K系统,你需要一个相当强大的后端,而不是一个四处转动的虚拟机。