PowerShell格式化一个已经是string的值

我有一些我想要以特定方式格式化的值。 要非常清楚,它的IP地址八位字节,我希望它在“xxx”格式。 例如,如果我有一个八位字节值为“20”我想显示为“020”而不是“20”。

我最终会有一个数组填充IP,我想正确格式化所有这些。

这是我知道的一个例子,我已经想出了一个get-member这个整数。

$Test = 1 $Test.ToString("000") 001 

这是行不通的。 我已经通过Get-Member计算出该值已经是string了。

 $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 

任何想法如何我可以得到已经是一个string格式化的值,我可以与值是一个整数? 长期以来,我希望示例$testing将实际上包含一个完整的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 "." 

大概你试图用这种方式来格式化它们,以便它们都很好地alignment。

唯一的问题是020和20不一样。不pipe怎么说,

带有TCP / IP-32和Windows NT实用程序的Windows for Workgroups可以接受由十进制,八进制或hex数组成的Internet协议(IP)地址。 这可能会导致混淆,如果您无意中使用十进制八位字节中的前导零。 在前导零的情况下,这些数字被这些实用程序parsing为八进制数,从而指定了错误的IP地址。

文章说,它只适用于WIndows 2000和NT,但我只是在我的Windows 7电脑上试过,这是一样的故事。

要回答你最初的问题,使用PadLeft方法:

 $Test = 1 $Test.ToString().PadLeft(3, '0') 001 

我使用Chris Dent编写的这些伟大的子网math函数 。 将您的地址列表存储在纯十进制(不是点分十进制)或纯二进制值中。 对列表进行sorting,然后检索列表,最后使用ConvertTo-DottedDecimalIP函数显示列表。 他的博客中还有许多其他伟大的子网function。