我有以下计算表达式:
@{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 $_
}