如何将所有 Active Directory 计算机读入 PowerShell 中的数组?
How can I read all Active Directory computers into an array in PowerShell?
当我这样做时:
# 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
}
$Computer
结果为 System.DirectoryServices.SearchResult
。如何查询所有计算机的 Active Directory 并将它们的字符串值存储到这样的数组中?
我需要保留 foreach
语法(即 foreach $Computer in $Reader
),因为我的代码 $Reader
也可以接受这样的计算机文件:
$Reader = Get-Content ((Resolve-Path $iL).Path)
总而言之,我想要的东西既可以与输入文件一起使用,也可以通过使用相同的循环语法查询 AD 来使用。
编辑:我的输入文件是一个文本文件,用换行符分隔计算机名称,如下所示:
win7box1
win7box2
win10box3
$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,显然,这个答案变得毫无意义。
我解决了。要从 System.DirectoryServices.DirectorySearcher
获取字符串,您可以像我的示例一样执行循环,然后执行:
foreach ($Computer in $Reader) {
$ComputerString = $Computer.Properties.Name
}
当我这样做时:
# 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
}
$Computer
结果为 System.DirectoryServices.SearchResult
。如何查询所有计算机的 Active Directory 并将它们的字符串值存储到这样的数组中?
我需要保留 foreach
语法(即 foreach $Computer in $Reader
),因为我的代码 $Reader
也可以接受这样的计算机文件:
$Reader = Get-Content ((Resolve-Path $iL).Path)
总而言之,我想要的东西既可以与输入文件一起使用,也可以通过使用相同的循环语法查询 AD 来使用。
编辑:我的输入文件是一个文本文件,用换行符分隔计算机名称,如下所示:
win7box1
win7box2
win10box3
$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,显然,这个答案变得毫无意义。
我解决了。要从 System.DirectoryServices.DirectorySearcher
获取字符串,您可以像我的示例一样执行循环,然后执行:
foreach ($Computer in $Reader) {
$ComputerString = $Computer.Properties.Name
}