1

我必须编写一个脚本来查询来自特定部门的用户的 AD,我将提示用户最初输入,然后输出安装在所选部门的特定用户的所有计算机上的软件。我希望能够查看特定登录的所有机器上的所有软件。

目前我正在使用以下部分:

1)AD中的查询以获取特定部门的用户:

Import-Module ActiveDirectory
$Dept = Read-Host "Enter the desired department"
$strFilter = "(&(objectCategory=User)(Department=*$Dept*))"
$colResults = Get-ADUser -LDAPFilter $strFilter |
          Select-Object -Expand DistinguishedName

2) 我还使用了我之前的人的脚本,它在 SQL 中结合 LanDesk 执行查询。见下文:

$SQLServerLANDESK = "usernam\password"  
$SqlConnectionLANDESK = New-Object System.Data.SqlClient.SqlConnection
$global:dt = new-object System.Data.DataTable

$LONA = ""
$o = 0

function doit() {
    $SqlConnectionLANDESK.ConnectionString = "Server=$SQLServerLANDESK; Database=   $SQLDBNameLANDESK;uid=useraidi; pwd=parola"
    $SqlConnectionLANDESK.Open()

    $QueryLANDesk = @"

SELECT DISTINCT A0.DISPLAYNAME, A0.LOGINNAME,A0.PRIMARYOWNER,A0.TYPE, A1.OSTYPE, A2.SUITENAME, A2.PUBLISHER, A2.VERSION  
FROM Computer A0 (nolock) LEFT OUTER JOIN Operating_System A1 (nolock) ON A0.Computer_Idn = A1.Computer_Idn LEFT OUTER JOIN AppSoftwareSuites A2 (nolock) ON A0.Computer_Idn = A2.Computer_Idn  
WHERE  A0.DEVICENAME like '%D02DI0907061%'
 or A0.DEVICENAME like '%D02DI0929860%'

"@

    $CommandLANDesk = new-object System.Data.SqlClient.SqlDataAdapter ($QueryLANDesk, $SqlConnectionLANDESK) 
    $CommandLANDesk.fill($dt) | out-null

    $dtrc = $dt.Rows.Count
     Write-Host "($i) Searching all cores ($dtrc machines)..."

    $SqlConnectionLANDESK.Close() 
}

 foreach ($i in  1..10)
 {if ($i -eq 6) {continue}
  $SQLDBNameLANDESK = "database"
  $SQLServerLANDESK = "username\parola"
  doit
 }

Write-Host 

$dt.select("displayname like '%$LONA%'") | export-csv H:\TEST\add-remove_TEST_LOGINNAME.csv # | foreach  {  $o++  }

# "$o machines found."

我希望能够基本上从点 1 连接结果搜索并将其与 DistinguishedName 格式的“PRIMARYOWNER”匹配,并将它们存储在 SQL 中的表中。我怎么做?

4

0 回答 0