【发布时间】: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