我需要将一个列表与另一个列表进行比较,并为在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帐户,换句话说,是要进行手动删除的列表。
答案 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
}
}