У меня есть некоторые значения, которые я хочу отформатированный в особенном методе. Чтобы быть очень ясными, октет IP-адреса и я хотим это в "xxx" формате. Например, если у меня есть значение октета "20", я хочу отобразить его как "020" не "20".
Я в конечном счете собираюсь заполнить массив IP, и я хочу правильно отформатировать всех их.
Вот один пример, что я знаю работы, и я выяснил, соперничают получать-участник, что это - целое число.
$Test = 1
$Test.ToString("000")
001
Это НЕ работает. Я выяснил через получать-участника, что значение уже является строкой.
$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. В его блоге много других замечательных функций подсети.