Cara yang lebih baik untuk membuat beberapa pernyataan notlike if

Pernyataan if ini tidak cocok dengan apa pun karena alasan tertentu meskipun output di CSV memiliki data $MemberName di dalam sel.

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"
            }

Apakah ada cara yang lebih efisien untuk menulis pernyataan if? Saya hanya ingin menambahkan baris JIKA $MemberDomain dan $MemberName TIDAK COCOK dengan kumpulan kriteria berikut:

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

Sesuatu seperti:

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 }

Inilah yang berhasil, tetapi menurut saya ada cara yang lebih efisien untuk menguji kedua nilai tersebut secara bersamaan.

$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"
    }

Masalah yang ingin saya cocokkan keduanya secara bersamaan. Misalnya kombinasi "DomainGroup dan Administrator" akan bernilai true dengan kode di atas dan akan bernilai false jika hanya LocalUser dan Administrator yang bernilai true.


person Bradley Smith    schedule 13.05.2015    source sumber


Jawaban (1)


Selama Anda tidak memerlukan pencocokan wildcard, Anda dapat menggunakan switch dan -notcontains

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

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

Di PowerShell 3.0 dan yang lebih baru, Anda juga dapat menggunakan operator -notin yang setara, mungkin sedikit lebih intuitif:

$MemberName -notin "Workstation Admin","Domain Admins"
person Mathias R. Jessen    schedule 13.05.2015
comment
Menarik. Tidak pernah terpikir untuk beralih. Saya harus membacanya. - person Bradley Smith; 13.05.2015