PowerShell版本2的Get-Content -raw替代方法

3

对于较新的PowerShell版本,我可以毫无问题地使用以下内容:

$contents = Get-Content $path -raw
if ($contents -match $regex) {
    $result = $matches[0]
}

但是在PowerShell 2版本中,Get-Content没有-raw开关,没有这个开关,正则表达式匹配步骤总是失败的;$matches似乎是$null。

我不确定这个“原始”参数的内部工作方式,因为Microsoft在相应的文档页面上提供了一个相当可悲的描述,所以我不确定如何解决它。

2个回答

5

Get-Content -Raw 命令会忽略换行符,并将文件内容读取为一个字符串。

以下是两种方法,可以在 PowerShell 2.0 中模拟 PowerShell 3.0+ 的 -Raw 功能:

$contents = [System.IO.File]::ReadAllText($path)

if ($contents -match $regex) {
    $result = $matches[0]
}

或者:

$contents = Get-Content -Path $path | Out-String

if ($contents -match $regex) {
    $result = $matches[0]
}

4

作为@HAL9256的替代方案,你可以将字符串连接起来:

[string]$contents = @(Get-Content -Path $path) -join [Environment]::NewLine

否则,Get-Content返回一个字符串数组。
if ($contents -match $regex)
{
    $result = $matches[0]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接