我无法使用我的powershell脚本使if / else正常工作

时间:2016-01-07 17:32:31

标签: powershell

我编写了一个脚本,将我们的服务帐户名字移动到姓氏,并在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 ""

2 个答案:

答案 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 ""