Длина типа объекта Int64
Я новичок в 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 ответ
Вы делаете это правильно, конвертируете это в строку и получаете длину.
Если вы действительно хотите математический способ получить количество цифр в Integer
, вы можете использовать [Math]::Log10
функция с [Math]::Truncate
функция:
$digitsLong = [Math]::Truncate( [Math]::Log10( $uid ) + 1 )