我需要PowerShell的帮助
我需要使用Csv在逻辑比较中帮助我的脚本:
SamAccountName
,Othertelephone
,employeeId
,PreferredLanguage
我开发了一个脚本,根据特定条件更新AD用户详细信息。
EmployeeID
应仅为ABC和XYZ,不应采用其他ID。这个字段可以是空白的。Othertelephone
不能为空PreferredLanguage
应该只是EN | ES。不应该采取其他参数,此字段可以为空白。脚本将更新用户。
我被困在第1点,它并没有忽略空白字段。如果我把它留空,它会执行代码块。
IF($_.employeeId -notmatch 'ABC|XYZ' or $_EmployeeId.trim() -eq "")
{ write-output " Id is not proper" }
答案 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也符合您的第一个测试条件 - 空格不匹配ABC
或XYZ
我认为你真的想要这个:
$_.employeeId -notmatch 'ABC|XYZ' -and $_.EmployeeId.trim() -ne ""
您可能希望测试$null
以及那里的空字符串。
答案 2 :(得分:0)
你能试试吗
$_.employeeId -ne "ABC" -and $_.employeeId -ne "XYZ" -and $_.employeeId -ne ""