我想确定我是否可以在Powershell中回显多个对象。我尝试搜索此内容并找到了this,但这不是我想要的。
基本上,我希望能够使用一个命令来回显两个不同的对象(在foreach-object
中都可以看到)。
预期的输入和输出
PS C:\> <echo multiple object command> "test" | % {echo "$_ test"}
test test
test test
我尝试过的输入和输出。
PS C:\> echo "test`ntest" | % {echo "$_ test"}
test
test test
预期输出:
test test
test test
例如,如果我使用get-process
进行操作,例如:
PS C:\> get-process | % {echo "$_ and this"}
输出:
Process1 (Thing) and this
Process2 (Thing) and this
Process3 (Thing) and this
Process4 (Thing) and this
这同样适用于像这样的数组:
PS C:\> $test = @("test1","test2","test3")
PS C:\> $test | % {echo "$_ and this"}
test1 and this
test2 and this
test3 and this
但是到目前为止,我还没有找到指定数组以外的某些对象来复制它的任何方法
摘要:有没有办法在Powershell 5.1中编写多对象输出?
总而言之,我想回显多对象输出吗?
答案 0 :(得分:1)
简而言之:You can only send one thing to the pipeline at a time.可以是字符串,字符串数组或任何其他对象。
您要的不是输出多个对象,而是基本上只是显示输出和格式化输出的方式。
PowerShell is object-based and not text-based。显示的输出不满足要求。它具有默认格式,以方便且易读的方式显示对象,甚至还有一些特殊格式,以熟悉的方式显示某些对象类型(例如文件系统项)。
如果我理解正确,则您正在尝试显示“彼此相邻”的多个对象。这是一种非常面向文本的方法(不是面向对象的)。我不推荐。
基本上,这只是一个格式问题。问自己:您期望输出看起来如何?然后,找到一种方法来做到这一点。其他答案中已经提到了一些简单的示例。您可能还想编写一个自定义formatting file。
最后,这完全取决于您的个人喜好。问问自己,您真的需要吗?又为什么呢这可能是XY problem。
答案 1 :(得分:0)
您可以使用-join
方法将输出合并为一行。
($test | % {echo "$_ and this"}) -join ","
# test1 and this,test2 and this,test3 and this
如果您对打印具有单个输出的数组感兴趣,可以引用该数组以使用单个命令进行打印
Write-Output "$test"
# test1 test2 test3
我没有得到的是,您如何期望以下内容不会打印任何内容。
echo "test`ntest" | % {echo "$_ test"}
test
test test
基本上,您是将字符串(test'ntest)传递到一个foreach对象,该对象仅重复一次,因为只有一个字符串(test'ntest),然后打印该字符串(包含在{{ 1}})和另一个“测试”。
这是如何使用一个命令(无循环)打印$_
的另一个示例
get-service
答案 2 :(得分:0)
ForEach-Object(%)cmdlet对对象中的每个项目执行操作 输入对象的集合。
另外,集合就是数组。因此,您确实需要将数组提供给foreach(%)cmdlet
其他一些例子:
@("test1","test2","test3").gettype() # system.array
(get-process).gettype() # system.array
(1..10).gettype() # system.array
1..10 | % {echo "$_ test"}
"test`ntest".Split("`n").gettype() #system array
"test`ntest".Split("`n") | % {echo "$_ test"}
在第一个示例中: 回声“测试`测试” | %{echo“ $ _ test”}
当我们检查(echo "test
ntest“)。gettype()`是什么时,我们可以看到它是一个System.Object而不是一个数组。因此foreach对象会将其看作是一个内部有1个元素的数组。 / p>