【问题标题】:Int64 object type lengthInt64 对象类型长度
【发布时间】:2018-07-09 16:15:51
【问题描述】:

我是 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}

但它为每个uid 返回1,这显然不是真的。

所以我决定通过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 长度的最佳做法是什么?

【问题讨论】:

  • 在这种情况下并没有真正的“最佳方式”,但您已经找到了最简单的方式,我建议您使用可行且可读的方式。你也可以这样做:| ? { "$($_.uid)".Length -lt 6 }

标签: powershell centrify


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多