如何在PowerShell中将所有Active Directory计算机读入阵列?

时间:2017-02-01 18:55:08

标签: file loops powershell active-directory powershell-v2.0

当我这样做时:

# Gets all domain-joined computer names and properties in one object
$strCategory = "computer"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")

$colProplist = "name"

foreach ($i in $colPropList) {
    $objSearcher.PropertiesToLoad.Add($i)
}

$Reader = $objSearcher.FindAll()

foreach ($Computer in $Reader) {
   Write-Host $Computer
}

$ComputerSystem.DirectoryServices.SearchResult的形式出现。如何查询所有计算机的Active Directory并将其字符串值存储到这样的数组中?

我需要保留foreach语法(即foreach $Computer in $Reader),因为我的代码是$Reader也可以接受这样的计算机文件:

$Reader = Get-Content ((Resolve-Path $iL).Path)

总之,我想要一些适用于输入文件或通过使用相同的循环语法查询AD的东西。

编辑:我的输入文件是一个文本文件,用新行分隔计算机名称,如下所示:

win7box1
win7box2
win10box3

2 个答案:

答案 0 :(得分:2)

我解决了。要从System.DirectoryServices.DirectorySearcher获取字符串,您可以像我的示例中那样执行循环,然后执行:

foreach ($Computer in $Reader) {
     $ComputerString = $Computer.Properties.Name
}

答案 1 :(得分:1)

$Reader = Get-ADComputer -Filter * | Select-Object -ExpandProperty samAccountName

foreach ($Computer in $Reader) {
   #WMI processing
}

应该做的伎俩。不需要更多。

但出于性能原因,您可以使用System.DirectoryServices.DirectorySearcher使用真正的过滤器,而不是*

我猜您从here获取了代码,如果您之前没有尝试过任何其他内容,那么它不是PowerShell提供的最简单的选择。

修改

您需要为Get-ADComputer加载的ActiveDirectory模块可用(Import-Module ActiveDirectory)。

...您需要安装RSAT ActiveDirectory PowerShell模块才能使用。

编辑2:

没有安装RSAT,很明显,这个答案毫无意义。