Powershell(如果未设置AD属性)



我有以下计算表达式:

@{n="Sites.short_name";e={ if (([int]$_.telephoneNumber.Substring(0,1) -gt 0) -and ([int]$_.telephoneNumber.Substring(0,1) -lt 10)) {"$($_.telephoneNumber.Substring(0,1))00"} elseif (!$_.telephoneNumber) {"LOA"} else {"LOA"} }}

这里的问题是,对于某些用户,没有设置telephoneNumber属性。我如何评估属性是否存在,然后设置"0"的值;LOA";如果属性不存在?

如果telephoneNumber返回字符串,则可以执行以下操作。(扩展到多行以看起来更清晰。

$SomeUser | Select-Object @{
    Label = "sites.short_name";
    Expression = {
        if ([string]::IsNullOrEmpty($_.telephoneNumber)) { "LOA" }
        elseif ($_.telephoneNumber.Substring(0,1) -match "[1-9]") {   # satisfies condition x > 0 and x < 10
            $_.telephoneNumber.Substring(0,1) + "00"
        }
        else {
            "LOA"
        }
    }
}

它需要在一行上吗?

作为一个函数,这将可读性更强。例如

function Get-TelephonePrefix {
    param (
        [string]$TelephoneNumber
    )
    if($TelephoneNumber -match '^([0-9])') {
        return $matches[0] + '00'
    }
    return 'LOA'
}
$TestValues = @('abc', '213 11', '')
$TestValues.foreach{
    $_
    Get-TelephonePrefix -TelephoneNumber $_
}

最新更新