【发布时间】:2019-08-16 11:27:20
【问题描述】:
我正在尝试运行一些 PowerShell 以将用户移动到不同的 OU 并禁用该帐户。
这是我的代码
$ADUsers = Import-Xlsx 'C:\User Creation\ADUsersRemoval.xlsx' | Foreach {
$test = Get-ADUser -LdapFilter "samaccountname -eq '$("$Firstname.$Lastname")" |
Move-ADObject -TargetPath "OU=Users,OU=Graveyard,DC=domain,DC=dc" -PassThru |
Disable-ADAccount
}
}
代码运行没有错误,但对用户帐户没有任何作用。我做错了什么?
更新
我意识到我错过了添加 $Firstname 和 $Lastname 的值。
这是我测试过的代码。
$ADUsers = Import-Xlsx 'C:\User Creation\ADUsersRemoval.xlsx'
foreach ($User in $ADUsers) {
$Firstname = $User.Firstname
$Lastname = $User.Lastname
Get-ADUser -Filter "samaccountname -eq '$("$Firstname.$Lastname")'" -Properties 'mail'
}
}
现在工作得很好,在下面给我详细信息。清楚地从我的 xlsx 文件 ps 中读取。使用'$("$Firstname.$Lastname")'" 可以正常工作。任何其他方式都不会读取 xlsx 文件。
但是在尝试执行移动用户和禁用的任务时。它没有作用
$ADUsers = Import-Xlsx 'C:\User Creation\ADUsersRemoval.xlsx'
foreach ($User in $ADUsers) {
$Firstname = $User.Firstname
$Lastname = $User.Lastname
Get-ADUser -Filter "samaccountname -eq '$("$Firstname.$Lastname")'" |
Move-ADObject -TargetPath "OU=Users,OU=Graveyard,DC=domain,DC=com" -PassThru |
Disable-ADAccount
}
【问题讨论】:
-
你应该切换到
-filter而不是-ldapfilter,因为你已经有了-filter的语法。你也有一个没有结束单引号的单引号。我会尝试Get-ADUser -Filter "samaccountname -eq '$("$Firstname.$Lastname")'" -
'$("$Firstname.$Lastname")'应该是'${Firstname}.${Lastname}'。为什么人们觉得有必要将所有内容都放入子表达式中? -
[1]
'$("$Firstname.$Lastname")"来自哪里?看起来应该是$_.FirstName或 CSV 导入中的任何内容。 [2] 除非您将-PassThru添加到其参数中,否则 $Test? from what i can tell,Disable-ADAccount` 中的任何内容都没有输出。 -
@Kidbuu 一方面,您发布的代码 sn-p 有一个虚假的尾随花括号。此外,正如其他人指出的那样,
$Firstname和$Lastname未定义,您的代码使用参数-LdapFilter和参数-Filter的值。请创建一个minimal reproducible example,测试运行 that 代码以确保它仍然暴露您尝试调试的问题,然后 edit 您的问题并复制/粘贴 that i> 代码连同示例输入和它引发的所有错误。 -
另外,你确定用户
SamAccountName的形式是FirstName.LastName吗?
标签: powershell active-directory