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

如何从PowerShell变量中删除换行符,powershell,newline,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 $N

我正在尝试执行一些处理逻辑-基于树配置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
你知道我做错了什么吗?我希望显示内容时不带“伪”新行字符,即使contains方法说它不在那里


或者请建议如何做得更好。我还在学习PowerShell;到目前为止,我只是在谷歌上搜索这些命令,并试图将它们组合在一起。

换行符不在您的数据中,而是由
输出字符串添加的。观察以下内容的输出(特别是在
CA1
之后是否有换行):


如果以后打算将
$NextStepText
用于除直接输出以外的任何内容,则不应在该步骤中使用
格式表
(并且此脚本中不需要
输出字符串
)。考虑<代码>格式表< /代码>(或任何<代码>格式-*/COS> CMDLASE)可用数据行的结尾。

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

您可以随时检查$NextStep.Operation.Length,看看它是3还是4。如果有一个'n'在那里,它将显示在长度上。例如(从我的v3 PS ISE中复制并粘贴):

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

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

PS C:\> $test
Test


PS C:\> $test.Length
5

PS C:\> 

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

Hmm,我无法重现您看到的内容。我在V4.Alroc上,谢谢你的回答,这将是问题所在。我实际上想记录输出以进行调试。有没有办法删除这条新线?因为现在它弄乱了我的日志文件:[04.02.2014 22:36:36]:[-]:程序PS_Main.ps1已启动。[04.02.2014 22:36:36]:[D]:下一步输出:CA1[04.02.2014 22:36:36]:[-]:程序PS_Main.ps1完成时不使用
格式表
。正如我演示的那样,只需使用原始值。添加换行符的是
format table
。我在没有使用format table的情况下尝试了它,但它仍在添加新行。无论如何,我通过在输出字符串中添加-stream开关解决了这个问题:
$NextStepText=$NextStep.Operation |输出字符串-stream
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:\>