逻辑条件不起作用

时间:2014-12-16 11:57:45

标签: powershell

我需要PowerShell的帮助

我需要使用Csv在逻辑比较中帮助我的脚本: SamAccountNameOthertelephoneemployeeIdPreferredLanguage 我开发了一个脚本,根据特定条件更新AD用户详细信息。

  1. EmployeeID应仅为ABC和XYZ,不应采用其他ID。这个字段可以是空白的。
  2. Sam帐户不能为空
  3. Othertelephone不能为空
  4. PreferredLanguage应该只是EN | ES。不应该采取其他参数,此字段可以为空白。
  5. 如果符合上述条件,

    脚本将更新用户。

    我被困在第1点,它并没有忽略空白字段。如果我把它留空,它会执行代码块。

    IF($_.employeeId -notmatch 'ABC|XYZ' or $_EmployeeId.trim() -eq "") 
    { write-output " Id is not proper" } 
    

3 个答案:

答案 0 :(得分:3)

你真的不需要-OR和另一个条件测试。只需在正则表达式中添加另一个限定符:

$_.EmployeeID -notmatch '^(ABC|XYZ|\s*)$'

除ABC和XYZ值外,还将测试空格或空字符串。

编辑:如果ABC和XYZ值测试需要无限制(它们可以出现在属性值中的任何位置),请将开始和结束锚点隔离到空/空白测试:

 $_.EmployeeID -notmatch 'ABC|XYZ|^\s*$'

答案 1 :(得分:0)

$_.employeeId -notmatch 'ABC|XYZ' or $_EmployeeId.trim() -eq ""

在此-之前需要or,在第二次测试中需要.之后的$_

$_.employeeId -notmatch 'ABC|XYZ' -or $_.EmployeeId.trim() -eq ""

但是,如果$true为空,则此语句仍将评估为EmployeeId,因为空ID也符合您的第一个测试条件 - 空格不匹配ABCXYZ

我认为你真的想要这个:

$_.employeeId -notmatch 'ABC|XYZ' -and $_.EmployeeId.trim() -ne ""

您可能希望测试$null以及那里的空字符串。

答案 2 :(得分:0)

你能试试吗

$_.employeeId -ne "ABC" -and $_.employeeId -ne "XYZ" -and $_.employeeId -ne ""