Длина типа объекта 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 )

Другие вопросы по тегам