【发布时间】:2015-06-18 10:30:49
【问题描述】:
我正在尝试使用一个脚本来根据其显示名称组织我的 Active Directory 帐户,因为我们所有的帐户的名称中都有其 OU(或 subOU)。我正在尝试使用 PowerShell 中 ForEach 循环内的 If 语句来执行此操作。但是,每次我运行它时,它都会不断询问我的身份。谁能帮我解决这个问题?这就是我所拥有的......
Import-Module ActiveDirectory
$OU = "OU=Test, OU=com"
$Test1OU = "OU=Test1, OU=Test, OU=Com"
$Test2OU = "OU=Test2, OU=Test, OU=Com"
$Users = (Get-ADUser -SearchBase $OU -Filter * -Properties samAccountName,DisplayName)
ForEach ($user in $users)
{
If ($($user.DisplayName -like ("*Supply*" -or "*Supplies*"))
{Move-ADObject -Identity $($user.samAccountName -TargetPath $Test1OU}
ElseIf ($($user.DisplayName -like ("*Accounting*" -or "*Accountant*"))
{Move-AdObject -TargetPath $Test2OU}
}
【问题讨论】:
-
Move-ADObject什么?您指定了目的地,但没有指定要移动的对象。 -
仍然是 PowerShell tbh 的新手,但我认为要移动的对象是 if 语句中具有显示名称的对象,例如“supply”等...
-
无论如何您都必须将对象提供给 cmdlet,并且它应该是 AD 对象,而不是选择结果。您应该使用
Get-ADUser原始输出来操作它们,而不是使用select并使用字符串。如果您这样做foreach ($user in $users) { $_.displayname},您仍然可以从用户列表中获取字符串 -
所以我将 if 语句更改为... If($_.DisplayName -like ("Supply" -or "Supplies") ) 和 ForEach 到 ($User in $Users) 并且命令运行但没有执行任何操作...至少我遇到了一个问题...我也确保使用 Get-ADUser ,你还看到什么我做错了吗?
-
不要组合
-like检查,-like期望在其右侧有一个字符串,而不是带有-or的表达式,这使其成为布尔值。此外,使用-match可以让您在要匹配的任一字符串中删除包装星号。if ($_.DisplayName -match "Supply" -or $_.displayname -match "Supplies") ...
标签: powershell active-directory organization ou