powershell-拆分(';';)指定新行

powershell-拆分(';';)指定新行,powershell,scripting,Powershell,Scripting,我正在尝试编写一个脚本,让它将一个文本文件拆分成一个数组,并根据每一行拆分文件 我应该如何将“=”符号更改为这取决于文本文件的确切编码,但[Environment]::NewLine通常起作用 Get-Content $user| Foreach-Object{ $user = $_.Split('=') New-Variable -Name $user[0] -Value $user[1]} 输出: 这是 一串 String.Split方法的问题在于它会在给定字符串中的每个字符上

我正在尝试编写一个脚本,让它将一个文本文件拆分成一个数组,并根据每一行拆分文件


我应该如何将“=”符号更改为

这取决于文本文件的确切编码,但
[Environment]::NewLine
通常起作用

Get-Content $user| Foreach-Object{
   $user = $_.Split('=')
   New-Variable -Name $user[0] -Value $user[1]}
输出:

这是

一串


String.Split
方法的问题在于它会在给定字符串中的每个字符上进行拆分。因此,如果文本文件有CRLF行分隔符,您将得到空元素

更好的解决方案,使用


您可以使用
String.Split
方法在
CRLF
上进行拆分,而不是使用方法重载以空元素结束

有两种不同的方法可以使用此方法来实现

选择1 这将在组合的
CRLF
(回车和换行)字符串上拆分,该字符串由
`r`n
表示。
[StringSplitOptions]::None
选项将允许
Split
方法返回数组中的空元素,但如果所有行都以
CRLF
结尾,则不应返回空元素

选择2
这将在回车或换行时拆分。因此,数组将以空元素和实际字符串交织而成。<代码> [StrugStultOrths]::ReaveVeleItvices < /Case>选项指示<代码>分割< /C>方法不包括空元素。

到目前为止给出的答案仅考虑Windows作为运行环境。如果您的脚本需要在各种环境下运行(Linux、MAC和Windows),请考虑使用以下片段:

$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)

这将在原始字符串的每行之间包含空元素。谢谢*1000!这有助于我处理Windows事件日志中的Message属性,特别是Sysmon事件日志。在尝试大量代码片段时遇到了困难,但这颗小珍珠的工作非常出色!谢谢你,瑞安
"This is `r`na string." -Split "`r`n" #[Environment]::NewLine, if you prefer
$input.Split([string[]]"`r`n", [StringSplitOptions]::None)
$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)
$lines = $input.Split(
    @("`r`n", "`r", "`n"), 
   [StringSplitOptions]::None)