Powershell-比较SQL与AD

时间:2020-06-10 18:37:50

标签: powershell

我需要将一个列表与另一个列表进行比较,并为在AD中找到但在SQL中找不到的每个员工ID创建第三个列表。我有两个命令可以从每个命令中提取数据。我正在努力创建一个命令,将这些命令组合起来以实现我想要的方式。

一个人连接到SQL数据库,并从那里拉出任何当前雇员。

$sqlpeeps = Invoke-Sqlcmd -ServerInstance '192.168.1.1' -Database 'DATABASE' 
-Query "SELECT * FROM [COMPANY].[dbo].[employee] WHERE EmployeeStatus in 
('A', 'S', 'L')"

另一个命令是获取我们所有活动的AD帐户。

$adpeeps = get-aduser -filter * -searchbase 
"OU=Users,OU=Logins,DC=COMPANY,DC=COM" -properties * 

我认为我需要某种foreach循环,但是我似乎找不到用Powershell表示“不参与”的方法,因此我很难编写它。

$adpeeps | foreach ($_.EmployeeID in $sqlpeeps) <do nothing?> else {out-file 
"C:\users\user\Desktop\here.txt"}

如果这可以帮助我更轻松地进行操作,则SQL数据中有一列称为FILE#,它与AD属性EmployeeID直接相关。是否有一种简单的方法可以剪切掉所有无关的数据,所以我仅将这两列用于比较?

理想情况下,脚本需要找到已从SQL表中删除的AD帐户,换句话说,是要进行手动删除的列表。

1 个答案:

答案 0 :(得分:0)

我假设$sqlpeeps具有一列EmployeeID(它实际上被称为“ FILE#”,您可以在查询中使用AS键,如here所述)

# iterate through $adpeeps and process each user as $aduser 
foreach($aduser in $adpeeps) {
    # test if the sql column EmployeeID does not contain the employeeid of the ad user
    if($sqlpeeps.EmplyeeID -notcontains $aduser.employeeid) {
        Out-File -Path "C:\users\user\Desktop\here.txt" -Append
    }
}
相关问题