PS版本2的powershell Get-Content -raw替代

时间:2018-08-03 17:20:37

标签: powershell powershell-v2.0

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

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

但是在Powershell版本2中,没有用于Get-Content的-raw开关,但是如果没有-raw开关,则regex匹配步骤总是失败; $ matches看起来是$ null。

我不确定此“原始”参数的内部工作原理,因为Microsoft在相应的文档页面上对它进行了相当可悲的描述,所以我不确定如何解决它。

2 个答案:

答案 0 :(得分:4)

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]
}

答案 1 :(得分:4)

作为@ HAL9256的替代方法,您可以将字符串连接在一起:

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

否则Get-Content返回一个字符串数组。

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