我正在使用PowerShell,并且有类似
的内容<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />
<div class="row">
<div class="col-5">
<div class="card">
<div class="card-body text-left d-flex flex-column justify-content-end">
<a href="#" class="card-link">Link</a>
<a href="#" class="card-link">Link</a>
<h5 class="card-title">Title</h5>
<p class="card-text">Text goes here</p>
<a href="#" class="btn">Button</a>
<a href="#" class="btn">Button</a>
</div>
</div>
</div>
</div>
结果很好,但有新行(换行符,如\ n)。
我想在我的HTML文件中使用它,并将结果保存为javascript文件。
$testResult = vstest.console $myPathToUnitTests.dll
这很好用,我可以用它。
问题是,它没有显示换行符。在我试过的javascript文件中
$testResult = vstest.console $myPathToUnitTests.dll
$js = "const result = $($testResult);"
$js | Set-Content $myPathToJsFile
在powershell中,我试过
result = result.replace(/(?:\r\n|\r|\n)/g, '<br />');
但是,如果我在powershell ID中的testResult上放置一个断点并将鼠标悬停在变量testResult上,我看到
这意味着它知道有新的换行符/换行符。我似乎无法坚持下去:(
答案 0 :(得分:2)
vstest.console $myPathToUnitTests.dll
会返回数组而不是字符串,因此您需要加入所有字符串(行)和-join运算符,类似于html:
$TestResult -Join "<br />"
或者如果您想创建多行文本文件:
$TestResult -Join [System.Environment]::NewLine
注意:为此,我建议使用系统的默认换行符定义([System.Environment]::NewLine
)而不是硬编码的换行符(例如:`r`n
)。 < / p>
您无法轻松预测未知cmdlet或命令返回的内容,但PowerShell在管道中同时处理多个对象(数组)时非常安静,这是假设每个未知cmdlet或命令可能会在分配给变量时返回在数组中收集的多个对象(或字符串)。
毋庸置疑,已经存在数十个类似PowerShell StackOverflow的问题,就像这个问题一样。然而,相关问题本身的区别太大,不能将它们标记为重复。在这些其他问题中,本机PowerShell命令Get-Content
可能是此PowerShell编程陷阱的最常见原因。
找出未知cmdlet当前返回的内容的最佳方法是使用GetType()
方法(不能在$Null
上工作)或使用{来显示其类型{1}}属性(通常返回一个继承类型的数组):
PSTypeNames
但是,这并不保证它将始终返回相同的(单个)对象类型:
PS C:\> (get-content .\SingleLine.txt).PSTypeNames
System.String
System.Object
(字符串)数组通常直接显示在多个行(由换行符分隔)的主机上存放(由空格分隔)当它们被封装在一个字符串中时,可能是一个识别问题的触发器:
PS C:\> (get-content .\MultipleLines.txt).PSTypeNames
System.Object[]
System.Array
System.Object
cmdlet或命令可以返回对象(字符串)或对象数组(字符串)的不确定性确实引发了一个新问题(正如您所评论的那样)。
这种不确定性实际上很容易在PowerShell中解决;只需将输出包装在一个数组中(在括号中用@开头,另请参阅:How can I force Powershell to return an array when a call only returns one object?):
在后一种情况下,重要的是要明白没有额外的 级别将添加到结果数组
此技术通常用于PowerShell:
PS C:\> $a = "a", "b", "c"
PS C:\> $a
a
b
c
PS C:\> "$a"
a b c
PS C:\>