从今天开始,微软停止了对Windows Server 2003的支持。前两天刚好接到一个请求来查找2003的服务器:从SCCM无法查到全部,部分服务器没有SCCM agent,希望从AD了查到。本文把我的全部做法写出来,供大家分享。

 

全部工作围绕Get-ADcomputer命令展开,过滤OperatingSystem属性。

 

  • 导出所有2003机器到All2003.csv文件里:
    Get-ADComputer -Filter {OperatingSystem -like "*2003*"} -Properties * | Export-Csv .\All2003.csv –NoTypeInformation
    命令非常简单,也无需多解释。如果您是一个小的域环境,这个命令就足够了。

        而我们是有几十个站点,几十个分公司的域,只要求查一个站点或分公司的2003服务器就稍微有点复杂。

     

  • 如果您的服务器有很好的命名规则,名字能够体现出公司,例如北京的公司名称含有cnbj,就可以添加一个搜索条件来查:
    Get-ADComputer -Filter {(OperatingSystem -like "*2003*") -and (name -like "*cnbj*")} -Properties * | Export-Csv .\CNBJ2003.csv –NoTypeInformation

     

  • 如果您的服务器通过不同的OU来管理,可以通过-SearchBase选项来查
    Get-ADComputer -Filter {OperatingSystem -like "*2003*"} -Properties * -SearchBase "OU=CNBJ,DC=contoso,DC=com" | Export-Csv .\CNBJ2003.csv –NoTypeInformation

     

  • 上述两个条件都不具备,可以通过登录特定域控的条件来查询,假定一个站点有两台域控,DC1和DC2,分别可以对两台DC运行下面命令:
    Get-ADComputer -Filter {(OperatingSystem -like "*2003*") -and (lastLogon -gt 0)} -Properties * -Server DC1 | Export-Csv .\DC1_2003.csv -NoTypeInformation
    这里需要注意的是搜索条件使用的是Window 2000域开始就有的lastLogon属性,而不是2003开始的lastLogonTimestamp,后者是一个复制的(replicated)属性,所有的DC都是同一个值,而前者是不同DC特有的,没有登录一台DC,在上面的这个属性为空值。具体地可以参考微软的网站,我想要说明白可能够写本书了。

     

上面讨论了2008 R2以后域上使用PowerShell AD模块的方法,如果还在使用2003或2008第一版域控,只能使用csvde或者dsquery *命令了,注意这里*是命令的一部分,dsquery computer的查询功能无法满足我们的需要,如需详细的帮助,欢迎联系!