我有以下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
不是字符串?那么,它是什么?如何将其转换为字符串?
答案 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
"+++"