【问题标题】:Powershell - Comparing SQL to ADPowershell - 将 SQL 与 AD 进行比较
【发布时间】:2020-06-10 18:37:50
【问题描述】:

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

一个连接到 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 帐户 - 换句话说,要手动删除的列表。

【问题讨论】:

  • !(object -in object) 我建议使用for 循环,这样您就可以像for($i=0; $i -lt $sqlpeeps.length; $i+=3){do stuff} 那样更轻松地完成三分之一

标签: powershell


【解决方案1】:

我假设$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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多