Hogyan lehet Powershellben tesztelni, hogy az adott OU létezik e?

+1 vote
asked Mar 22, 2013 in IRF tantárgy by szucsmark (46 points)  
retagged Mar 22, 2013 by szucsmark

A powershell szkriptemmel tesztelni szeretném, hogy a paraméterként megadott OU létezik e. Ezt a következő módon próbálom megtenni:

$OUPath = 'AD:\' + $OU;
if(Test-Path $OUPath)
{
  Write-Host("The setted OU is valid!");
}
else
{
  Write-Host("The setted OU is INVALID.");
  return;
}

Ez a megoldás jó abban az esetben ha pl egy ilyen DN-t kap:

ou=Hungary,ou=Europe,ou=Hotels,dc=irfhf,dc=local

Hiszen ez a helyes.
Ha átírom az elejét, (Europe-->Eurrrope), akkor is szépen kezeli a hibát:

ou=Hungary,ou=Eurrrope,ou=Hotels,dc=irfhf,dc=local

DE, ha a root részt rontom el (dc=iiiiiirfhf,dc=local), akkor a következő hibát dobja szkript:

Test-Path : A referral was returned from the server
+ if(Test-Path $OUPath)
+    ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (ou=Hungary,ou=E...c=rfhf,dc=local:String) [Test-Path], ADReferralException
    + FullyQualifiedErrorId : ADProvider:ItemExists::ADError,Microsoft.PowerShell.Commands.TestPathCommand

Próbáltam try-catchelné, de úgy is ugyanezt kapom...

(Megoldást keresve csak adsi-s megoldást találtam)

Köszönöm a segítséget előre is!

1 Answer

+3 votes
answered Mar 22, 2013 by micskeiz (2,616 points)  

Használhatod a Get-ADOrganizationalUnit cmdletet erre a célra egy megfelelő Filter paraméterrel:

# invalid DN
PS C:\> (Get-ADOrganizationalUnit -Filter 'DistinguishedName -eq "ou=Hungary,ou=Eurrrope,ou=Hotels,dc=irfhf,dc=local"') -eq $null
True

# valid DN
PS C:\> (Get-ADOrganizationalUnit -Filter 'DistinguishedName -eq "ou=Hungary,ou=Europe,ou=Hotels,dc=irfhf,dc=local"') -eq $null
False

Tehát lekéred a keresett OU-t, és megnézed, hogy az eredmény NULL lett-e.

commented Mar 22, 2013 by szucsmark (46 points)  
Köszönöm, így már helyesen ellenőrzi.
...