我一直试图在论坛中找到类似的东西,但这就是把我绑起来的逻辑 - 把它们放在一起。
我有一个AD,我有一个用户的CSV,应该在特定的OU中。我想将OU中的用户与CSV进行比较,而不是CSV中的用户,我想禁用它们并将它们移动到不同的OU。
我是Powershell的新手,并且在这方面有点艰难。让我得到的是比较和IF-Then逻辑......我只是无法正确理解语法。我尝试过几个选项......这就是我现在所拥有的选择
Import-Module ActiveDirectory
$path = "f:\aDMGMT\"
$logpath = "f:\admgmt\logs\diable_ad_users.log"
$userfile = $path + "\files\ad_currentemployees.csv"
$location = "OU=Faculty,OU=People,DC=mydomain,DC=com"
$disabledou = "OU=disabledemployees,OU=Disabled,DC=mydomain,DC=com"
$AD_users = Get-ADUser -Filter * -SearchBase "OU=Faculty,OU=People,DC=mydomain,DC=com" | select -ExpandProperty SamAccountName
$sams = $userfile | Select-Object -ExpandProperty NameUnique #the
Compare-Object $AD_users $sams | Out-File $logpath
但是可用的标签是includeequal和excludedifferent之类的东西......但是不包括在内......而且我怎么只在一边做呢?
帮助!
答案 0 :(得分:0)
您可以做的是使用where
过滤结果到SideIndicator
子句中。
Compare-Object $AD_users $sams |
Where-Object{$_.SideIndicator -eq "<="} |
Select-Object -expandproperty inputobject
使用您需要的方向"<="
或"=>"
,然后管道输入Select-Object
以恢复您要过滤的输入对象。如果您的对象是多维的,那么最后一部分会更重要。
我将尝试使用真实数据,因为这只是经过严格测试但应该有效。
答案 1 :(得分:0)
我重新思考了我的逻辑并提出了这个问题。它运作得很好。
Import-Module ActiveDirectory -ErrorAction Stop
$path = "f:\aDMGMT\"
$date = Get-Date
$logdate = Get-Date -UFormat "%y%m%d"
$log = $path+"\logs\diable_ad_users_"+$logdate+".log"
$userfile = $path + "\files\ad_currentemployees.csv"
$location = "OU=employees,OU=People,DC=myorg,DC=com"
$disabledou = "OU=disabledemployees,OU=Disabled,DC=myorg,DC=com"
$AD_users = Get-ADUser -Filter * -SearchBase "OU=employees,OU=People,DC=myorg,DC=com" | select -ExpandProperty SamAccountName
$sams = Import-csv $userfile | select nameunique
ForEach ($user in $AD_users)
{
$exists = $sams.nameunique -contains $user # clean output for array w/ header vs. array without header demands .namunique
If(!$exists)
{
Get-ADUser -Identity $user | Move-ADObject -targetpath $disabledou
Disable-ADAccount -Identity $user
}
}