如何在powershell中将多行字符串插入其他字符串?

时间:2016-03-05 11:25:57

标签: powershell

我有以下powershell-2.0脚本

$FailedTests = Get-ChildItem $PathLog | ?{ $_.PSIsContainer } | select name
"+++"
$FailedTests
"+++"

$Text = "
Summary
----------
$FailedTests
"
$Text
"+++"

,生成的输出为:

+++

Name : Test1


Name : Test2

+++

Summary
----------


+++

对我来说看起来绝对不合逻辑。我预计会有以下输出:

+++

Name : Test1


Name : Test2

+++

Summary
----------


Name : Test1


Name : Test2

+++

发生了什么事?如何解决这个问题?

也许$FailedTests不是字符串?那么,它是什么?如何将其转换为字符串?

2 个答案:

答案 0 :(得分:1)

$FailedTests不是字符串,而是一些其他类型的对象。您的代码目前是这样的:

$FailedTests = [pscustomobject]@{ Name = "Test1"},[pscustomobject]@{ Name = "Test2"}

#I had to use `Format-List *` to output the sample-objects in the same format as your objects.
#The default format are diferent between different types of objects

"+++"
$FailedTests | Format-List *
"+++"

$Text = "
Summary
----------
$FailedTests
"
$Text
"+++"

输出:

+++


Name : Test1

Name : Test2



+++

Summary
----------


+++

对象ToString()不输出任何内容。最简单的解决方案是使用| Out-String将您在控制台中获得的格式转换为字符串。这需要子表达式$()。例如:

$FailedTests = [pscustomobject]@{ Name = "Test1"},[pscustomobject]@{ Name = "Test2"}

"+++"
$FailedTests | Format-List *
"+++"

$Text = "
Summary
----------
$($FailedTests | Format-List * | Out-String)
"
$Text
"+++"

Ouptut:

+++


Name : Test1

Name : Test2



+++

Summary
----------


Name : Test1

Name : Test2





+++

答案 1 :(得分:1)

$FailedTests是一个数组。您可以使用$FailedTests.GetType()检查该内容。

问题是,如果将对象放在单独的语句中,那么对象会被传递给某些输出命令行开关,例如Format-Table,但如果将它们放在引号中则不会。

最简单的解决方案:不要以这种错综复杂的方式构建输出。

$FailedTests = Get-ChildItem $PathLog | ?{ $_.PSIsContainer } | select name

"+++"
$FailedTests
"+++"

"Summary
----------"
$FailedTests
"+++"