W celu obsługi scenariuszy "pasuje do każdego ...", stworzyłem funkcję, która jest dość łatwa do odczytania. Moja wersja ma o wiele więcej, ponieważ jest to cmdlet programu PowerShell 2.0, ale wersja, którą wklejam poniżej, powinna działać w wersji 1.0 i nie może zawierać żadnych dodatków.
to nazwać tak:
Get-Process | Where-Match Company -Like '*VMWare*','*Microsoft*'
Get-Process | Where-Match Company -Regex '^Microsoft.*'
filter Where-Match($Selector,[String[]]$Like,[String[]]$Regex) {
if ($Selector -is [String]) { $Value = $_.$Selector }
elseif ($Selector -is [ScriptBlock]) { $Value = &$Selector }
else { throw 'Selector must be a ScriptBlock or property name' }
if ($Like.Length) {
foreach ($Pattern in $Like) {
if ($Value -like $Pattern) { return $_ }
}
}
if ($Regex.Length) {
foreach ($Pattern in $Regex) {
if ($Value -match $Pattern) { return $_ }
}
}
}
filter Where-NotMatch($Selector,[String[]]$Like,[String[]]$Regex) {
if ($Selector -is [String]) { $Value = $_.$Selector }
elseif ($Selector -is [ScriptBlock]) { $Value = &$Selector }
else { throw 'Selector must be a ScriptBlock or property name' }
if ($Like.Length) {
foreach ($Pattern in $Like) {
if ($Value -like $Pattern) { return }
}
}
if ($Regex.Length) {
foreach ($Pattern in $Regex) {
if ($Value -match $Pattern) { return }
}
}
return $_
}
Brakujący ___ został potraktowany jako znacznik wiki dla kursywy;) – x0n
Dzięki .. to zrobiło! – Pascal
Możesz także odwoływać się do listy nazw użytkowników, aby odfiltrować je za pomocą zmiennej:? {$ Users -notcontains $ _. Username} – JasonMArcher