У меня есть фрагмент кода, который проверяет содержимое строк в файле и перечисляет строки, которые не отображаются в файле. Нижеприведенный фрагмент кода отлично работает в 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"
}
Я могу получить вывод в виде списка всех строк вместо получения списка пропущенных строк.Как решить проблему?