Int64对象类型的长度

时间:2018-07-09 16:15:51

标签: powershell centrify

我是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长度的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

您做得正确,将其转换为字符串并获得了长度。

如果您真的想用数学方法来获取Integer中的位数,则可以将[Math]::Log10函数与[Math]::Truncate函数一起使用:

$digitsLong = [Math]::Truncate( [Math]::Log10( $uid ) + 1 )