Get-ADUser -Filter paraméter dinamikus építése

0 votes
asked Mar 24, 2015 in IRF tantárgy by balage (27 points)  
edited Mar 25, 2015 by balage

Lehet-e, és ha igen hogyan dinamikusan felépített Filter paramétert használni a Get-ADUser-nél, esetleg más Get-AD*-nál?

Elvileg a -Filter paramétere string ha jól értettem, tehát a

Get-ADUser -Filter 'memberOf -eq "CN=akarmi,DC=irfhf,DC=local"' 

helyett az is megy, hogy:

$param = 'memberOf -eq "CN=akarmi,DC=irfhf,DC=local"'
Get-ADUser -Filter $param

Namost ugye lehet a filternek több szűrési feltételt adni logikai operátorokkal összekapcsolva:

Get-ADUser -Filter {('memberOf -eq "CN=akarmi,DC=irfhf,DC=local"') -or ('memberOf -eq "CN=akarmi2,DC=irfhf,DC=local"') }

Ezt a kettőt viszont sehogy sem sikerül összekombinálnom.

A háziban a tanár csoportjaiból szeretnék építeni egy kifejezést, amit beadva az alkalmazottak keresés -filterébe csak azokat kapom meg, akik benne vannak valamely csoportban amiben a tanár is.

Szóval valami ilyesmi:

$filter
foreach ($group in $teacher.memberof)
$filter += 'memberOf -eq $group' -or
...
Get-ADUser -Filter $filter ...

Próbálkozott valaki ilyennel?

1 Answer

0 votes
answered Mar 25, 2015 by hajdua (688 points)  
edited Mar 25, 2015 by hajdua

Szia!

Így próbáltad?

$p1 = "acolley"
$p2 = "atabor"
Get-ADUser -Filter '(cn -eq $p2) -or (cn -eq $p1)'

Vagy akár így is:

$p1 = "acolley"
$p2 = "atabor"
$filter = '(cn -eq $p2) -or (cn -eq $p1)'
Get-ADUser -Filter $filter

(A zárójelezés itt egyébként nem is szükséges, csak átláthatóbbá teszi.)

commented Mar 25, 2015 by balage (27 points)  
Igen így megy, de nekem ennél több kellene.
Javítottam a kérdést, mert nem voltam egyértelmű azt hiszem.
Ciklusban szeretném építeni a filter paramétert. A te megoldásodban ugyanúgy statikusan meg van adva a paraméterezést, függetlenül attól, hogy nem literálként van beírva, hanem változókon keresztül.
commented Mar 25, 2015 by hajdua (688 points)  
Kézzel bármit össze tudsz rakni. Nem biztos, hogy a legelegánsabb megoldás, de működik:
$arr = @("acolley", "atabor", "fbeal")
$filter = ""
for($i = 0; $i -le 2; $i++){
    $filter += '(cn -eq "' + $arr[$i] + '")';
    if($i -le 1){ $filter += " -or "; }
}
Get-ADUser -Filter $filter
...