我编写了一个脚本,将我们的服务帐户名字移动到姓氏,并在Active Directory中创建服务帐户时使其保持最新。它工作并记录更改,除了脚本的else部分。出于某种原因,当if不为true时,它不会执行else语句。请记住,我仍然是PowerShell的初学者......
$runStartTime = Get-Date -Format g
$workingDir = "c:\bin\"
$logfile = $workingDir +" LastNameChg.txt"
Add-Content $logfile "-----| LogFile: $logfile"
Add-Content $logfile "-----| Users last names changed in Active Directory on $runStartTime :"
Import-Module ActiveDirectory
$users = Get-ADUser -searchbase "OU=Testing,OU=Service Accounts,DC=test,DC=907,DC=local" -LDAPFilter {(&(objectCategory=user)(objectClass=user)(mail=*)(!(sn=*)))}
foreach ($user in $users){
$logdata = $user.sAMAccountName
if ($user.GivenName -ne $null){
Get-ADUser $user | Set-ADUser -surname $($user.givenName) -givenname $()
Add-Content $logfile "-----| $logdata"
}
else{
Add-Content $logfile "-----| No changes made to Active Directory"
}
}
Add-Content $logfile ""
答案 0 :(得分:1)
查看PS中四种不同类型空值的写法。
http://www.codykonior.com/2013/10/17/checking-for-null-in-powershell/
其中一些测试给出了直观的结果。也许你的变量是一个字符串,在这种情况下PS为变量分配一个空字符串。然后,当对$ null进行测试时,它始终不相等,并且从不选择else。
我不是说这是你的问题,但这是一个真正的问题,所以值得一试。
答案 1 :(得分:0)
感谢所有回复的人,我想出了我的逻辑问题。 if语句需要在循环之前进行
if ($users){
foreach ($user in $users){
$logdata = $user.sAMAccountName
Get-ADUser $user | Set-ADUser -surname $($user.givenName) -givenname $()
Add-Content $logfile "-----| $logdata"
}
}else{Add-Content $logfile "-----| No Changes Made in Active Directory"}
Add-Content $logfile ""