powershell - Powershell - Active Directory - 将用户移动到基于 CSV 文件的员工 ID 和日期的 OU
问题描述
我正在尝试制作一个脚本,该脚本将根据 CSV 文件中的日期和员工 ID 将 Active Directory 用户帐户从 1 个 OU 移动到另一个 OU。CSV 文件具有以下列:
“员工编号”、“开始日期”、“结束日期”。示例一:员工编号:123456,开始日期:10/07/2020 结束日期:20/07/2020
该脚本需要在 Active Directory 中搜索员工编号,然后如果“开始日期”与“今天日期”匹配,则将其移至 OU X。如果“结束日期”与“今天日期”匹配,则将其移至 OU Y。
我想通过顶部的变量来做到这一点,如下所示:
$Importcsv = Import-Csv -Path "C:\Temp\Accounts.csv" | select "Employee Number", "Start Date", "End Date"
$xOU = "OU=Start,OU=Test,DC=MyDomain,DC=local"
$yOU = "OU=End,OU=Test,DC=MyDomain,DC=local"
$CurrentDate = Get-Date -Format dd/MM/yyyy
然后我知道我需要使用“ForEach 代码,然后将所有变量嵌套在其中,但是让它匹配日期然后将其移动到 OU?这就是我卡住的地方!
解决方案
比较日期时最好的做法是将它们作为[DateTime]
对象进行比较,而不是它们的字符串表示形式。
此外,您的问题标题EmployeeID
显示,但在 CSV 中您似乎使用了EmployeeNumber
..
这些是 AD 中的两个不同用户属性,因此您需要确保使用正确的用户属性。
现在,我假设你确实想要属性EmployeeID
:
$xOU = "OU=Start,OU=Test,DC=MyDomain,DC=local"
$yOU = "OU=End,OU=Test,DC=MyDomain,DC=local"
$CurrentDate = (Get-Date).Date
Import-Csv -Path "C:\Temp\Accounts.csv" | ForEach-Object {
$id = $_.'Employee Number'
$user = Get-ADUser -Filter "EmployeeID -eq '$id'" -Properties EmployeeID -ErrorAction SilentlyContinue
if ($user) {
# convert the string dates from the CSV into real DateTime objects
$startDate = [DateTime]::ParseExact($_.'Start Date', 'dd/MM/yyyy', $null)
$endDate = [DateTime]::ParseExact($_.'Finish Date', 'dd/MM/yyyy', $null)
switch ($CurrentDate) {
$startDate {
Write-Host "Moving user $($user.Name) to $xOU"
$user | Move-ADObject -TargetPath $xOu
break
}
$endDate {
Write-Host "Moving user $($user.Name) to $yOU"
$user | Move-ADObject -TargetPath $yOu
}
}
}
else {
Write-Warning "No user with EmployeeID '$id' found."
}
}
推荐阅读
- javascript - 即使应用程序在后台,我如何每小时调用一个函数 - Cordova
- r - 语句 rm(list=ls()) 不会删除全局环境中的函数
- r - 基于节点删除或隐藏 iGraph 中的特定边
- sql - 子串?我可以使用此命令消除名称前的一些单词吗
- python - 如何将列添加到包含熊猫中列值对应的组名称的DataFrame
- java - 为什么 Feedly API 没有返回类别流中的所有 ids 条目?
- java - 春季启动资源getFile()不起作用
- docker - Yii 2 入门套件 - docker 在文件 .\.env 中:环境变量名称“YII_DEBUG”可能不包含空格。事件返回错误代码 1
- python - 仅当序列在 python 正则表达式中的另一个序列中具有相同数量的字符时,如何匹配特定的字符序列?
- sql - SQL Server 中的 SET 指令不起作用