簡體   English   中英

將 ADSI 輸出管道傳輸到另一個用於查找域計算機的 powershell 腳本

[英]piping ADSI output into another powershell script for finding domain computers

我已搬到一家擁有舊服務器且沒有 RSAT 的公司,因此我無法使用 AD 模塊,並且必須確保腳本符合 v2 標准。

我編寫了一個發現腳本來查找林中的所有域,並且我試圖將其通過管道傳輸到另一個腳本中,以查找我也可以訪問的域中計算機的所有 dns 主機名,但不斷收到各種錯誤。

森林代碼中的域:

$Root = [ADSI]"LDAP://RootDSE"
$oForestConfig = $Root.Get("configurationNamingContext")
$oSearchRoot = [ADSI]("LDAP://CN=Partitions," +     $oForestConfig)
$AdSearcher = [adsisearcher]"(&(objectcategory=crossref)    (netbiosname=*))"
$AdSearcher.SearchRoot = $oSearchRoot
$Domains = $AdSearcher.FindAll()
return $Domains|$Domains = "dc=" + $Domains.Name.Replace(".",     ",dc=") |Out-File C:\domains.txt

查找 dns 主機名的代碼:

$doms = Get-Content C:\domains.txt
foreach ($dom in $doms) {
$AD = (([adsisearcher]"").Searchroot.path)
IF ($AD -notlike "LDAP://*") {$AD ="LDAP://$AD"}
$AD.Filter = "(&(objectCategory=Computer)(name=$item))"
$Computers = $AD.Filter.FindAll()
$ComputerNames = $Computers.Properties.dnshostname
}

有任何想法嗎?

您可以在 PowerShell 中使用所有 .NET 類,這可以使這里的事情變得更容易。 事實上, [adsi][adsisearcher]DirectoryEntryDirectorySearcher類的“類型加速器”。

對於此用例,您可以使用Forest.GetCurrentForest()查找林並讀取林中的所有域。 然后,對於每個域,查找所有計算機。

以下是您將如何執行此操作的示例。 它可能不會按照您想要的方式進行格式化,但您可以根據需要進行更改。

$forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()

foreach ($domain in $forest.Domains) {
    $domain.Name
    $searcher = [adsisearcher]"(objectCategory=Computer)"
    $searcher.SearchRoot = [adsi]"LDAP://$($domain.Name)"
    $searcher.PropertiesToLoad.Add("dNSHostName") | Out-Null

    foreach ($comp in $searcher.FindAll()) {
        $comp.Properties["dnsHostName"][0]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM