我正在尝试做一些处理逻辑 - 根据树配置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;到目前为止,我只是谷歌命令,我想把它放在一起。
答案 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放入的强制行,用于显示命令之间的分离。