1

我是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;博士

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

4

1 回答 1

1

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

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

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

于 2018-07-09T16:23:59.593 回答