我是Powershell的新手,所以如果有人可以帮助我了解此案例的最佳做法,那将是很棒的事情
我正在使用Centrify Powershell模块来获取用户的uid属性。如果输入
Get-CdmUserProfile -Zone "DN_NAME_HERE" | select name,uid
它返回以下内容:
markok 3252423756
markusa 32356514982
markusk 417
markusp 32187
我需要过滤掉uid
的长度。所以我尝试了
Get-CdmUserProfile -Zone "DN_NAME_HERE" | ? {($_.Uid).length -lt 6 } | select name,uid
,但回传用户的uid
长度始终超过6个字符。
因此,我试图找出每个uid
的长度:
Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).length}
和
Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).count}
但是每个1
都会返回uid
,这显然是错误的。
所以我决定通过uid
找出Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).gettype()}
属性的类型,对象类型为Int64 System.ValueType
我设法通过使用tostring()
方法来找到解决方法:
Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{(($_.uid).tostring()).length}
它确实能做到,但是我不确定这在性能和整齐打字方面是否是最佳实践。还有其他方法可以找出int64
对象的长度吗?
TL; DR
找到int64长度的最佳实践是什么?
答案 0 :(得分:1)
您做得正确,将其转换为字符串并获得了长度。
如果您真的想用数学方法来获取Integer
中的位数,则可以将[Math]::Log10
函数与[Math]::Truncate
函数一起使用:
$digitsLong = [Math]::Truncate( [Math]::Log10( $uid ) + 1 )