$notMatchingLines = Get-Content "pathToYourFile" | Select-String "YourRegex" -NotMatch
Если вы хотите узнать количество строк, не соответствующих вашему регулярному выражению, вы можете сделать:
$notMatchtingLines.Count
Практический пример, вернуть все строки из моего vimrc, не содержащие слова "set":
>$linesNotContaingSet = Get-Content .\_vimrc | Select-String "set" -NotMatch
>$LinesNotContaingSet.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Результатом является массив:
> $LinesNotContaingSet[0]
call plug#begin()
Количество строк не совпадает:
> $LinesNotContaingSet.Count
Если вы хотите узнать, что еще можно сделать с возвращенными объектами, используйте Get-Member
(псевдоним = gm
):
> $LinesNotContaingSet | gm
TypeName: Microsoft.PowerShell.Commands.MatchInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
RelativePath Method string RelativePath(string directory)
ToString Method string ToString(), string ToString(string directory)
Context Property Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename Property string Filename {get;}
IgnoreCase Property bool IgnoreCase {get;set;}
Line Property string Line {get;set;}
LineNumber Property int LineNumber {get;set;}
Matches Property System.Text.RegularExpressions.Match[] Matches {get;set;}
Path Property string Path {get;set;}
Pattern Property string Pattern {get;set;}
Для более глубокого изучения Powershell MVA PowerShell Jumpstart видео.
Надеюсь, это поможет