跟踪企业桌面

跟踪企业桌面

我的部分工作是确保对于特定 OU 中的计算机,实际使用的内容 = AD 中列出的内容 = SCCM 中列出的内容。这是针对拥有 25 万台 PC 的环境,但我特别关心一个部门的 7 万台 PC。将 AD 与 SCCM 进行比较相当容易,但跟踪实际上不存在的计算机则更加困难。我正在尝试想出创造性的方法来解决这个问题。

我的问题是:有没有一个好的方法可以找到不存在的机器,并使用 Powershell 来查询 AD 中那些 X 天内没有登录过的计算机?

我想到了一个更复杂的 powershell 任务,如下所示:从 AD 中提取 dnshostnames 对我的 OU 中的所有主机执行 Ping 操作,如果成功,则从列表中删除它们。每周每 6 小时运行一次,继续删除 ping 成功的机器。对于笔记本电脑,我必须以不同的方式处理。

还有其他想法、建议等吗?

答案1

根据 Patrick 的综合建议,我将使用复制LastLogontimeStamp属性来缩小搜索范围:

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将保留所有至少 30 天未登录的计算机。

阈值为 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

答案2

听起来你需要类似的东西旧命令http://www.joeware.net/freetools/tools/oldcmp/

这将在指定的域或组织单位中搜索最近未登录的机器X天,并为您提供报告或禁用这些计算机帐户的功能。

Active Directory 中的工具和表示仅代表域所了解的内容,因此您仍然需要构建报告流程外部的到 Active Directory 环境,使您能够跟踪报告为未使用过的机器,以验证它们是否确实离开了组织并应被删除。一个典型的例子就是笔记本电脑:工具可能会将笔记本电脑报告为未使用,而实际上这隐藏了笔记本电脑只是离线使用的事实。

可以使用类似的方法,通过 SCCM 中的报告来调查机器上次能够发出心跳的时间;只要机器有正常运行的 SCCM 客户端,这可以说是一种比提取报告并尝试 ping 它们的更好的方法——后者需要耗费大量的人力,而且容易出现假阳性结果。

答案3

计算机 AD 对象具有 LastLogon 时间戳,它为您提供了计算机当前状态的有用指标。

如果您能够安装第三方命令,那么探索活动目录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 中的所有计算机及其最后登录日期,如下所示:

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$

您需要针对此计算机可能登录的所有 DC 运行此操作。对于像您这样规模的组织来说,这可能不切实际。

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

如果您发现计算机帐户的“whenChanged”超过 30 天,则这些计算机在此期间未登录。这适用于较大的多 DC 网络,因为此数字在“lastLogon”没有的情况下被复制。

只需修改上面脚本中的行以删除“.lastLogon”并将其替换为“.whenChanged”

如果您无法安装 Quest AD,您将需要使用安装了 RSAT 的机器(或 DC)并使用 Get-ADComputer cmdlet(类型“Import-Module ActiveDirectory”)。

跟踪未来使用的第三个选项是使用登录脚本。几年前,我曾在客户那里这样做过,效果很好,尽管我们只有几百台机器,而不是大约 70K。

当时我们的登录脚本是一个 .BAT 文件。在 NETLOGON 中创建一个新的 .BAT,其中包含以下行(例如 LogonTrack.BAT)

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

并在 70K 用户可能使用的任何登录批处理文件的末尾添加一行

call LogonTrack.BAT

这将创建一个以计算机名称命名的文件,文件日期是映射位置的最后一次登录日期。

我不推荐这样做,但你可以审核事件日志以获取此信息,尽管我通常尽可能避免深入研究日志。你需要事件 4624

最后,我也使用局域网清扫器在客户那里,这很棒。它对旧电脑有很好的报告。但是,作为付费产品,需要单独安装和服务器,所以可能对你没什么用。此外,对于 250K 系统,你需要一个相当强大的后端,而不是闲置的重新利用的 VM。

相关内容