Powershell get-aduser提取带有扩展属性的选择对象问题

时间:2018-09-05 20:08:53

标签: powershell

除家用电话和移动电话外,此脚本非常有用。如果extensionAttribute为空,那么我希望文件中的电话号码带有“”。否则,电话号码前会带有1.。

空白时返回的是“ 1”。我很困惑为什么其他部分无论扩展属性为空都在执行。

import pytest
from game.deck import Card

def test_card_rank_can_be_compared():
  ten_of_spades = Card("Spades",10)
  jack_of_spades = Card("Spades","J")

  assert ten_of_spades < jack_of_spades
  assert jack_of_spades > ten_of_spades
  assert ten_of_spades <= jack_of_spades
  assert jack_of_spades >= ten_of_spades

def test_card_suite_can_be_comapred():
  ten_of_spades = Card("Spades",10)
  ten_of_clubs = Card("Clubs",10)

  assert ten_of_spades > ten_of_clubs
  assert ten_of_clubs < ten_of_spades
  assert ten_of_spades >= ten_of_clubs
  assert ten_of_clubs <= ten_of_spades

寻找一些有助于发现问题的帮助。

3 个答案:

答案 0 :(得分:3)

About Wildcards*匹配零个或多个字符

    PS > $null -like '*'
    True
    PS > 'random text' -like '*'
    True
    PS > '' -like '*'  # empty string
    True

Try this [System.String]::IsNullOrEmpty()

@{Name='Home Phone';Expression={if ([System.String]::IsNullOrEmpty($_."extensionAttribute5")){""} else {'1'+ $_."extensionAttribute5" -replace "\D"}}}, 
@{Name='Mobile Phone';Expression={if ([System.String]::IsNullOrEmpty($_."extensionAttribute6")){""} else {'1'+ $_."extensionAttribute6" -replace "\D"}}}, 

答案 1 :(得分:0)

您应该可以使用以下内容进行测试:

if ($_.extensionAttribute5 -ne ''){ '1'+$_.extensionAttribute5 -replace "\D"}

此刻您获得的是“如果此属性绝对不是什么,就什么也不是”,这可能带来意想不到的结果。甚至$null都一样,什么也没什么,直到您问它是否类似某物:

PS C:\> $null -like "*"
True

PS C:\> $null -like ""
True

PS C:\> $null -like " "
False

答案 2 :(得分:0)

Nas' helpful answer解释了您使用通配符的问题,并提供了有效的解决方案。

简而言之:由于*匹配任意个字符序列,包括空字符串,因此 -notlike '*'总是 < / em> $False (相反,-like '*'始终为$True)。

PowerShell的隐式到布尔转换逻辑提供了一种方便的方法来测试给定的字符串是$null还是空的-只需按条件使用字符串(变量)即可。因此,您可以按以下方式重写语句:

# `-not $_.extensionAttribute5` returns $True if $_.extensionAttribute5
# contains $null or the empty string.
if (-not $_.extensionAttribute5) { "" } else { ... }

请注意,如果属性名称包含不寻常的字符,则只需用 quote 即可,因此$_.extensionAttribute5就足够了-不需要$_."extensionAttribute5"

也可以选择使用.NET框架的[string]::IsNullOrEmpty()方法(如Nas的答案所示),但是键入和“嘈杂”显然比较麻烦。