У меня есть некоторые значения, которые я хочу отформатировать определенным образом. Чтобы быть предельно ясным, это октет IP-адреса, и я хочу, чтобы он был в формате «xxx». Например, если у меня есть значение октета «20», я хочу отображать его как «020», а не «20».
В конечном итоге у меня будет массив, заполненный IP-адресами, и я хочу правильно отформатировать их все.
Вот один пример, который, как я знаю, работает, и я выяснил, что это целое число с помощью get-member.
$Test = 1
$Test.ToString("000")
001
Это не работает. Я понял через Get-Member, что значение уже является строкой.
$Test = "1"
$test.ToString("000")
Cannot find an overload for "tostring" and the argument count: "1".
At line:1 char:2
+ $test.tostring("000")
+ ~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
Любая идея о том, как я могу получить значение, которое уже является строкой, отформатированной, как я, со значением, которое является целым числом? В долгосрочной перспективе я надеюсь, что пример $ test действительно будет содержать полный IP-адрес.
Например, 10.10.10.10 я хотел бы быть 010.010.010.010
Ответ Для заинтересованных. Используя пример @GregL, я смог собрать рабочий пример для полного формата IP с ведущими нулями, который показан ниже для справки.
$Test = "10.10.10.10"
$test2 = ($test.Split(".") | ForEach-Object {$_.tostring().padleft(3, '0')}) -join "."
Предположительно вы пытаетесь отформатировать их таким образом, чтобы все они были хорошо выровнены.
Единственная проблема в том, что 020 - это не то же самое, что 20. Не согласно этот тем не мение.
Windows для рабочих групп с TCP / IP-32 и утилиты Windows NT могут принимать адреса Интернет-протокола (IP), состоящие из десятичных, восьмеричных или шестнадцатеричных чисел. Это может вызвать путаницу, если вы непреднамеренно используете начальный ноль в десятичном октете. Если в начале стоит ноль, эти утилиты распознают число как восьмеричное число, что указывает на неправильный IP-адрес.
В статье говорится, что это применимо только к WIndows 2000 и NT, но я только что попробовал это на своем ПК с Windows 7, и это та же история.
В любом случае, чтобы ответить на ваш первоначальный вопрос, используйте PadLeft
метод:
$Test = 1
$Test.ToString().PadLeft(3, '0')
001
Я использую эти отличные Математические функции подсети написанный Крисом Дентом. Сохраните список адресов в чистом десятичном (не с точками) или в чистом двоичном формате. Отсортируйте список, затем извлеките список и, наконец, отобразите список с помощью функции ConvertTo-DottedDecimalIP. В его блоге много других замечательных функций подсети.