2015-05-13 4 views
0

Этот оператор if ничем не подходит по какой-либо причине, хотя вывод в CSV имеет данные $ MemberName в ячейке.Лучше всего создать несколько непонятно, если оператор

if($MemberName -notlike "Administrator" -or $MemberName -notlike "Domain Admins" -or $MemberName -notlike "Workstation Admin"){ 
       Add-Content -Path $OutPutFile -Value "$Computer, $LocalGroupName, SUCCESS, $MemberType, $MemberDomain, $MemberName" 
      } 

Также есть более эффективный способ написать инструкцию if? Я только хочу, чтобы добавить строку ЕСЛИ $ MemberDomain и $ MemberName НЕ СООТВЕТСТВУЕТ следующие наборы критериев:

$MemberDomain $MemberName 
LocalUser AND Administrator 
DomainGroup AND Workstation Admin 
DomainGroup AND Domain Admins 

Somethinng как:

if(($MemberName -notlike "Administrator" -and $MemberDomain -notlike "LocalUser") -or ($MemberName -notlike "Domain Admins" -and $MemberDomain -notlike "DomainGroup") -or ($MemberName -notlike "Workstation Admin" -and $MemberDomain -notlike "DomainGroup")) { do something } 

Это то, что работает, но я думаю, что есть более эффективный способ тестирования для двух значений вместе.

$ExcludedNames = ("Administrator","Workstation Admin","Domain Admins") 
$ExcludedMemberTypes = ("LocalUser","DomainGroup") 

if(($ExcludedNames -contains $MemberName) -and ($ExcludedMemberTypes -contains $MemberType)){ 
    } else { 
    Add-Content -Path $OutPutFile -Value "$Computer, $LocalGroupName, SUCCESS, $MemberType, $MemberDomain, $MemberName" 
    } 

Вопросы, которые я хочу сопоставить друг с другом вместе. Например, комбинация «DomainGroup и Administrator» будет верна с приведенным выше кодом, и она должна быть ложной, если только LocalUser и Administrator должны быть истинными.

ответ

2

До тех пор, пока вы не нужны подстановочные-соответствия, вы можете использовать switch и -notcontains

$Success = switch($MemberDomain) 
{ 
    "LocalUser" {"Administrator" -ne $MemberName} 
    "DomainGroup" {"Workstation Admin","Domain Admins" -notcontains $MemberName} 
} 

if($Success){ 
    Add-Content # ... 
} 

В PowerShell 3.0 и выше, вы также можете использовать эквивалентный -notin оператора, может быть немного больше, интуитивный:

$MemberName -notin "Workstation Admin","Domain Admins" 
+0

Интересно. Никогда не думал о переключении. Я должен буду прочитать об этом. –

Смежные вопросы