有没有一种方法可以find具体的AD网站下的PC的列表? 我们以前曾经为每个站点创build了不同的OU,这将更容易跟踪PC。 现在我们只有一个OU,所以在每个站点上查找PC的唯一可行的方法是通过AD站点获取PC的列表。 在这方面的任何帮助将不胜感激和/或如果有更好的办法?
实际上你不能。 机器不会与AD中的网站关联(如此)。
子网与站点相关联,因此您可以在任何时候对与站点相关联的子网或子网进行NMap扫描,以获取IP列表,然后将其与机器名称列表相关联。 只有在那个时间点有效。
场景:劳拉在销售经常在丹佛,但今天她正在访问亚特兰大办事处。 不同的网站,但任何人,无论是pipe理员,甚至在幕后都没有做出任何改变。 她的笔记本电脑知道目前的网站,因为它pipe理着login过程等等。
所以让我问 – 你想解决什么问题? 你想要什么结束状态? 你需要通过网站跟踪机器? 获取库存解决scheme。
这些信息不会在AD中存储或维护。
客户端将其网站信息存储在registry中。
使用以下命令可以远程收集客户端的站点信息:
nltest / server: computername / dsgetsite
这不是你的问题的直接答案,而是另一种select。 由于Active Directory不存储您正在查找的信息,而手动扫描或运行脚本以循环遍历所有计算机可能非常耗时。
由于本网站基于计算机所在的子网,因此清单软件将为您提供一种在一个或多个子网中查找所有计算机的好方法。
对于我们的领域,我们使用PDQ库存 。 它允许在后台自动扫描,dynamic集合列出所有具有指定参数的计算机。 您可以为每个网站创build一个集合,并且它们都将dynamic更新。 他们的价格是相当合理的,特别是如果你开始使用更多的function。
开箱即用,计算机/站点信息不存储在AD中。 但是,没有什么能阻止你把它放在那里。 您可以将计算机启动脚本或计划任务部署到您的域计算机,以便每台计算机将其当前分配的站点值写入其自己的AD计算机对象的属性。 只要授予“SELF”安全主体权限即可修改您决定在后代计算机对象上使用的任何未使用的属性。 这个信息可以很容易地被查询,以确定哪些客户端与哪个站点相关联。 确保您的脚本帐户为不相关的客户端。
以下是一个示例PowerShell脚本,可以从joinWindows客户端的域运行,不需要导入任何额外的PowerShell模块。 这会将当前的AD站点值写入AD中计算机对象的“extensionattribute8”属性:
$obj = new-object -com ADSystemInfo $type = $obj.gettype() $adsite = $type.InvokeMember("sitename","GetProperty",$null,$obj,$null) if($adsite -eq $null){$adsite = "UNKNOWN"} $root = [ADSI]"LDAP://DC=Contoso,DC=com" $search = [adsisearcher]$root $name = $ENV:COMPUTERNAME $Search.Filter = "(&(SamAccountName=$name$))" $computer = $Search.FindOne() | foreach{$cproperties=$_.GetDirectoryEntry()} $adsiteinad = $cproperties.extensionattribute8 if($adsiteinad -eq $adsite){}else{ $cproperties.extensionattribute8 = [string]$adsite $cproperties.SetInfo() }
只需将DC = Contoso,DC = comreplace为您的域的专有名称,并用您可用的任何未使用的单值属性replace“extensionattribute8”即可。 然后将“SELF”安全主体读/写权限授予指定后代计算机对象的属性。 运行该脚本作为SYSTEM计划的任务或在PowerShell计算机启动脚本中,它将填充域计算机对象上的属性。 该脚本将当前属性值与站点名称进行比较,只有在不匹配时才尝试写入AD。 这是为了防止不必要的写入AD。 显然你应该在将它应用到大量计算机之前进行testing。
然后,您可以使用以下PowerShell命令来查询分配给特定站点的所有计算机的域:
Get-ADComputer -Filter 'extensionAttribute8 -eq "SITENAME"'