powershell форматируют значение, это уже - строка

У меня есть некоторые значения, которые я хочу отформатированный в особенном методе. Чтобы быть очень ясными, октет 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 "."
2
задан 18 March 2015 в 18:27
2 ответа

Предположительно, вы пытаетесь отформатировать их таким образом, чтобы они все выглядели хорошо выровненными.

Единственная проблема в том, что 020 - это не то же самое, что 20. По крайней мере, не в соответствии с этим.

Windows для рабочих групп с TCP/IP-32 и утилитами Windows NT может принимать IP-адреса, состоящие из десятичных, восьмеричных или шестнадцатиричных чисел. Это может привести к путанице, если вы непреднамеренно используете ведущий ноль в десятичном октете. При использовании ведущего нуля, число разрешается этими утилитами как восьмеричное, указывая таким образом неправильный IP-адрес.

В статье говорится, что это применимо только к WIndows 2000 и NT, но я только что попробовал это на своем компьютере под управлением Windows 7, и это одна и та же история.

Чтобы в любом случае ответить на первоначальный вопрос, используйте метод PadLeft:

$Test = 1
$Test.ToString().PadLeft(3, '0')
001
4
ответ дан 3 December 2019 в 10:02

Я использую эти замечательные математические функции подсети , написанные Крисом Дентом. Сохраните список адресов в чистом десятичном (без точек) или чистом двоичном значении. Отсортируйте список, затем извлеките его и, наконец, отобразите список с помощью функции ConvertTo-DottedDecimalIP. В его блоге много других замечательных функций подсети.

0
ответ дан 3 December 2019 в 10:02

Теги

Похожие вопросы