Чтобы найти содержимое файла путем сопоставления строк и вывести те, которые не найдены в PowerShell 2.0 - PullRequest
0 голосов
/ 05 июня 2019

У меня есть фрагмент кода, который проверяет содержимое строк в файле и перечисляет строки, которые не отображаются в файле. Нижеприведенный фрагмент кода отлично работает в PowerShell 5.0, но в PowerShell 2.0 я получаю сообщение об ошибке:

Объект Foreach: невозможно преобразовать System.object [] в тип System.Management.Automation.ScriptBlock, требуемый параметром Process. Указанный метод не поддерживается в Power Shell 2.0

.

Приведенный ниже код предназначен для PowerShell 2.0 и 5.0.Но в настоящее время он работает только на 5.0.

$Pattern = 'Hello|new|World|Hi|greet'

$Test = (Get-Content -Path .\file.txt | Select-String -Pattern $Pattern -AllMatches) | foreach {$_.matches.Value} $($pattern -split '\|') | where {$Test -notcontains $_} 

Файл file.txt имеет следующее содержимое:

$q = Get-Content -Path .\file.txt |Select-String 'Hello' -SimpleMatch    
$w = Get-Content -Path .\file.txt |Select-String 'new' -SimpleMatch
$e = Get-Content -Path .\file.txt |Select-String 'World' -SimpleMatch
$r = Get-Content -Path .\file.txt |Select-String 'Hi' -SimpleMatch
$t = Get-Content -Path .\file.txt |Select-String 'greet' -SimpleMatch

Я пробовал новый код как:

$strings = ('Hello','new','World','Hi','greet')
$file    = '.\file.txt'

$Found = (Get-Content -Path $file |
         Select-String -Pattern $strings -AllMatches).Matches.Value 
$Missing = $Strings | Where {$Found -notcontains $_}

if ($Missing) {
    "Strings missing in $file"
    $Missing
} else {
    "All strings present in $file"
}

Я могу получить вывод в виде списка всех строк вместо получения списка пропущенных строк.Как решить проблему?

1 Ответ

0 голосов
/ 10 июня 2019

Последний фрагмент кода из вашего обновленного вопроса пытается использовать функцию, называемую перечисление члена . Эта функция была представлена ​​в PowerShell v3 и недоступна в PowerShell v2.

Изменить утверждение

$Found = (Get-Content -Path $file |
         Select-String -Pattern $strings -AllMatches).Matches.Value

в

$Found = Get-Content -Path $file |
         Select-String -Pattern $strings -AllMatches |
         Select-Object -Expand Matches |
         Select-Object -Expand Value

и проблема исчезнет.

...