您可以轻松创建一个“没有多余的装饰”实施Out-String
的东西,如:
filter ConvertTo-String { "$_" }
这胁迫传递给过滤器转换成字符串(使用PowerShell的字符串扩展调用ToString
在非空的对象,并改变$null
到一个空字符串)的任何对象。
下面五行的示例输入运行过滤器,过滤器将它们转换成相应的字符串的值(整数变得'1'
,双'2.3'
,空''
,字符串'four'
,和哈希表'System.Collections.Hashtable'
):
1,2.3,$null,'four',@{five=6} | ConvertTo-String
运行于的Get-ChildItem
(别名ls
)的输出处的滤波器产生类似的结果:
PS> Get-ChildItem
Directory: C:\Windows\System32\WindowsPowerShell\v1.0
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 13 Jul 2009 11:56 PM en-US
d---- 13 Jul 2009 11:52 PM Examples
d---- 13 Jul 2009 11:52 PM Modules
-a--- 13 Jul 2009 8:14 PM 452608 powershell.exe
-a--- 12 May 2012 10:28 AM 436 powershell.exe.config
...
PS> Get-ChildItem | ConvertTo-String
en-US
Examples
Modules
powershell.exe
powershell.exe.config
...
当您将对象转换成字符串,就失去了原本的对象包含的信息和功能:
事实上,可以作出的唯一安全的转换是,如果原来的对象是一个字符串。这也是唯一一次会出现“尾随空白”。
(换句话说,它通常是更好的做法,坚持,只要有可能,而不是试图仿效基于字符串的炮弹;-)的限制对象
这是为什么需要时即可只需输出一个字符串? – 2013-03-22 14:14:54
因为宽度是1024,所以还有额外的空间。摆脱宽度参数和额外的空间会消失。使用PowerShell,您不需要动态分配数组。也没有这种东西无限的字符串。 “为什么需要这样做,只要输出一个字符串?” – 2013-03-22 22:49:52
默认宽度为80,因此将它关闭会让事情变得更糟。 – 2013-03-23 11:58:00