2014-04-01 77 views
0

我正在嘗試查找由商業細分的XP計算機帳戶。我們有幾個不同的業務'分佈在多個領域。Powershell搜索多個域名

我有一個不同的txt文件(BusinessX.txt)的集合,每個文件都列出了存儲企業計算機帳戶的位置。每個列表在幾個域和/或根級域中可以有幾個不同的OU。例如...

Business1.txt包含...

Business1.ad.com/Desktop/BusinessUnitA 
Business1.ad.com/Desktop/BusinessUnitB 
Project1.ad.com/Desktop 
Project2.ad.com 

我有我的工作搜索,找到XP計算機帳戶的單個域。當我嘗試擴展搜索以根據我的列表在域之間動態更改時,我不成功。我正在考慮在我的ForEach-Object循環中添加一個「if」語句來驗證域並使用connect-QADService -Service 'Business1.ad.com'進行切換。看起來這會增加大量的開銷,因爲有些域名需要檢查15萬個計算機帳戶。

根據我的txt文件列表動態切換域的策略的任何建議?

這裏是我的腳本,因爲它代表...

get-content $Business1.txt | 
ForEach-Object {get-qadcomputer -SearchRoot $_ -OSName '*XP**' -DontUseDefaultIncludedProperties -IncludedProperties OSName, CanonicalName, PwdLastSet, LastLogon, LastLogonTimeStamp} | 
Select OSName, canonicalName, PwdLastSet, LastLogon, LastLogonTimeStamp | 
Export-Csv 「C:\XP_Computers_Business1_$((Get-Date).ToString('yyyy-MMM-dd_hh-mm-ss')).csv「 -NoTypeInformation 

回答

0

如果你先讀所有文本文件(可能添加的文件名作爲對象屬性,讓你知道它是從哪裏來的),它不應該太難以在每個域上進行uniqely排序,然後讓腳本按域執行搜索域。這樣,您只需爲每個域執行一次連接即可。

從我的頭頂(完全未測試的代碼),我會做這樣的事情:

$files = get-childitem "C:\SomeFolder" 
    #Construct an array to hold objects 
    $OUSearchList = @() 
    foreach ($file in $files) 
    { 
     $content = get-content $file 
     #Get-content returns an array of lines - iterate 
     foreach ($line in $content) 
     { 
      #Construct custom object 
      $myobj = "" | Select OUPath, Filename, Domain 
      $myobj.OUPath = $line 
      $myobj.FileName = $File.Name 
      $myobj.Domain = $myobj.OUpath.Split("/")[0] 
      $ouSearchList += $myobj 
     } 

    } 

    #Get the unique domains 
    $Domains = $OUSearchList | select Domain -Unique 

    #List through all the search paths, domain by domain 
    foreach ($domain in $domains) 
    { 
     $DomainOUSearchPaths = $OUSearchList | where {$_.Domain -eq $domain} 
     foreach ($search in $DomainOUSearchPaths) 
     { 
      $searchpath = $search.OUPath 
      $searchFileName = $search.filename 
      #put search logic in here 

     } 

    }