如何从PowerShell变量中删除换行符

时间:2014-02-04 21:44:26

标签: powershell newline

我正在尝试做一些处理逻辑 - 根据树配置CSV文件并行运行一些命令:

Operation;Parent;Enabled;Propagated;Job_ID;Status;Started;Finished
CA1;n/a;Y;N;;;;
PROD1;n/a;Y;N;;;Y;
CON1;CA1;N;N;;;Y;
CON2;CON1;N;N;;;Y;

我将文件加载到变量中,然后我试图找到需要处理的下一步:

$Data = Import-Csv -delimiter ";" .\config.csv
$NextStep = $Data | Select-Object -first 1 | Where-Object {$_.Started -eq ""}
$NextStepText = $NextStep.Operation | ft -autosize | out-string

问题是$ NextStep.Operation似乎包含换行符。当我显示它时,我得到:

PS C:\temp\SalesForce> $NextStep.operation
CA1

PS C:\temp\SalesForce> $NextStep.Operation.Contains("`n")
False

你知道我做错了什么吗?我想显示没有“虚拟”新行字符的内容,即使包含方法说它不在那里也存在。

或者请告知如何做得更好。我还在学习PowerShell;到目前为止,我只是谷歌命令,我想把它放在一起。

2 个答案:

答案 0 :(得分:0)

换行符不在您的数据中,而是由Out-String添加。观察以下内容的输出(特别是在你做的地方,并且在CA1之后没有获得换行符):

$Data = import-csv -delimiter ";" .\config.csv
$NextStep = $Data | select-object -first 1 | where-object {$_.Started -eq ""}
$NextStepText = $NextStep.Operation | ft -autosize | out-string
"hi"
$NextStepText
"hi"
$NextStep.Operation;
"hi"
$NextStep.Operation | ft -autosize
"hi"

如果您打算在以后直接输出以外的任何其他内容使用Format-Table,那么您不应该在该步骤中使用Out-String(此脚本中不需要$NextStepText) 。考虑Format-Table(或任何Format-* cmdlet)行末尾的可用数据。

答案 1 :(得分:0)

为什么你认为那里有某种新的线条特征?如果您使用的是ISE,那么您发布的内容看起来并不像。在命令之间有一个空行是正常的(在v2 / v3 ISE中,不确定v4),所以你发布的内容并不表示它包含任何新的行字符。

你总是可以检查$ NextStep.Operation.Length以查看它是否显示为3或4.如果那里有一个`n,它将显示在长度中。例如(复制并粘贴我的v3 PS ISE):

PS C:\> $test = "Test`nTest2"

PS C:\> $test
Test
Test2

PS C:\> $test.Length
10

PS C:\>

这是为了表明有一个新的行字符通过跟随文本注入,没有任何文本跟在新行字符后面看起来像这样:

PS C:\> $test = "Test`n"

PS C:\> $test
Test


PS C:\> $test.Length
5

PS C:\> 

您会注意到第二个命令的文本“Test”后面有2个空行。第一个是注入变量的行,第二个是PS放入的强制行,用于显示命令之间的分离。