Int64 对象类型长度

Int64 object type length

我是 powershell 的新手,所以如果有人能帮助我理解这种情况下的最佳实践,那就太好了:

我正在使用 Centrify Powershell 模块获取用户的 uid 属性。如果我输入

Get-CdmUserProfile -Zone "DN_NAME_HERE" | select name,uid

它returns以下:

markok                   3252423756
markusa                  32356514982
markusk                    417
markusp                  32187

我需要过滤掉 uid 长度。所以我尝试了

Get-CdmUserProfile -Zone "DN_NAME_HERE" | ? {($_.Uid).length -lt 6 } | select name,uid

但它不断返回长度超过 6 个字符的 uid 用户。 所以我试图找出每个 uid:

的长度
Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).length}

Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).count}

但它returns 1 每个 uid 这显然不是真的。

所以我决定通过Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{($_.uid).gettype()}找出uid属性的类型,对象类型是Int64 System.ValueType

我已经设法通过使用 tostring() 方法找到解决方法:

Get-CdmUserProfile -Zone "DN_NAME_HERE" | %{(($_.uid).tostring()).length}

它确实有效,但我不确定它是否是性能和整洁打字方面的最佳做法。有没有其他方法可以找出 int64 对象长度?

TL;DR

查找 int64 长度的最佳做法是什么?

你做得对,将它转换为字符串并获取长度。

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

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