none
Prosím o pomoc s PowerShell scriptem pro Active Directory

    Dotaz

  • Dobrý den,

    prosím o pomoc s Powershell scriptem, tento script by měl projít Active Directory a následně by měl vybrat všechny Uživatele, které nemají vyplněné Company a zároveň vybrat ty které mají v Company něco jiného než Engineering a RD (poslední podmínka je aby byl účet Enabled)

    Tento script mi nezafungoval přijde mi že filtr nefunguje jak má.

    Get-ADUser Filter {Company -notlike "*" -or Company -notlike "Engineering" -or Company -notlike "RD" -and Enabled $true} >> export.csv


    3. května 2017 7:37

Všechny reakce

  • Dobrý den, v rámci daného dotazu Vám pravděpodobně chybí sdružení oněch OR podmínek na levé straně a jedné AND podmínky pro všechny parametry.

    {(Company -notlike "*" -or Company -notlike "Engineering" -or Company -notlike "RD") -and Enabled $true}

    A pravděpodobně také filtr na společnosti na hvězdičku. Tento filtr může vrátit všechny hodnoty. Proto bych spíše srovnal s $null nebo prázdným stringem "".

    4. května 2017 6:14
    Vlastník
  • Bohužel to nezafungovalo, našel jsem si další chybu aby mi to vyfiltrovalo pouze lidi které nemají Company Engineering a RD musím to mít takhle,

    Get-AdUser -Filter {(Company -notlike "Engineering") -and (Company -notlike "RD")}

    tento příkaz nezafunguje udělal jsem si schválně data které jsou jak bez Engineeering tak RD, a nevypíše to nic, v běžném případě jsem schopen si poradit, ale v tomto případě jsem ztracen.

    Samotný script by měl projít ActiveDirectory, a vybrat veškeré uživatele, které nemají vyplněné Company a vybrat uživatele které mají vyplněné něco jiného než Engineering a RD... podle mě jednoduché zadání, ale nedaří se mi a ani kolega mi nepomohl, takže pokud by to bylo možné nenapadá Vás jiné řešení jak provést tento úkol?

    4. května 2017 8:40
  • Ahoj,

    problém je, že údaj Company je property objektu AdUser...

    Zkusil bych:

    Get-ADUser -Filter 'name -like "*"' -properties * | ft name,company
     

    Popřípadě toto uložit do .csv nebo proměnné a potom dalším commandem nebo Input-CSV si vyfiltrovat to co potřebuješ.

    Záleží k čemu to potřebuješ, jestli pro jednorázový seznam, tak to asi ani nemusíš tak vytunit a jen si to vylistuj pomocí mojeho commandu

    Radek

    4. května 2017 11:02
  • Abych to uvedl na pravou míru, tak ja potřebuju mít script, který se bude pouštět dejme tomu automatizovaně jednou týdně a on mi vysype všechny Usery, který nemají vyplněné Company, a nebo tam mají něco jiného než ENGINEERING a RD a zároveň jsou Enabled
    4. května 2017 11:42
  • Abych to uvedl na pravou míru, tak ja potřebuju mít script, který se bude pouštět dejme tomu automatizovaně jednou týdně a on mi vysype všechny Usery, který nemají vyplněné Company, a nebo tam mají něco jiného než ENGINEERING a RD a zároveň jsou Enabled

    Ok, takže takto:

    Get-ADUser -Filter 'name -like "*"' -Properties * | Where-Object -Property company -NotLike "Engineering"  |  Where-Object -Property company -NotLike "RD" | Where-Object -Property enabled -Like $TRUE |  ft name,company

    Není to úplně úhledné, ale mělo by fungovat

    EDIT: ještě mi tam chybělo to enabled

    Radek





    4. května 2017 12:50
  • Něco podobného jsem zkoušel a vyskakuje mi chyba A parameter cannot be found that matches parameter name 'Property'.. mě se to zdálo jako celkem lehký úkol ale pokud člověk vidí Active Directory script poprvé, není to taková sranda
    4. května 2017 13:35
  • Něco podobného jsem zkoušel a vyskakuje mi chyba A parameter cannot be found that matches parameter name 'Property'.. mě se to zdálo jako celkem lehký úkol ale pokud člověk vidí Active Directory script poprvé, není to taková sranda

    Zkusil jsem to otestovat a mi to funguje. Testuju na Win2016:

    PS C:\> Get-ADUser -Filter 'name -like "*"' -Properties * |  ft name,company,enabled
    
    name              company     enabled
    ----              -------     -------
    Administrator                    True
    Guest                           False
    DefaultAccount                  False
    krbtgt                          False
    Petr Novak                       True
    Pavel Franek      RD             True
    Libuše Vinklerova jine           True
    Franta Vomacka    Engineering    True
    
    
    PS C:\> Get-ADUser -Filter 'name -like "*"' -Properties * | Where-Object -Property company -NotLike "Engineering"  |  Wh
    ere-Object -Property company -NotLike "RD" | Where-Object -Property enabled -Like $TRUE |  ft name,company,enabled
    
    name              company enabled
    ----              ------- -------
    Administrator                True
    Petr Novak                   True
    Libuše Vinklerova jine       True




    5. května 2017 6:23
  • Bohužel i po konzultaci s kolegou nám tento script nefunguje chybová hláška je pořád stejná "A parameter cannot be found that matches parameter name 'Property'" tento script by měl běžet na WIN2008
    9. května 2017 6:45
  • Aha..no já jsem nějak předpokládal, že máte alespoň 2012, kde by to fungovat mělo..

    Jde totiž o to, že Win2008 má powershell verze 1. A samozřejmě každá další verze powershellu má  nějaké příkazy a moduly navíc. Mnoho věcí v powershellu verze 1 ani nejde. Zkuste doinstalovat do windows 2008 Service Pack 2 a povýšit powershell alespoň na verzi 3. Možná to tam už půjde, ale nedokážu se za to zaručit..

    PowerShell Version Release Date Default Windows Versions Available Windows Versions
    PowerShell 1.0 November 2006 Windows Server 2008 (*) Windows XP SP2
    Windows XP SP3
    Windows Server 2003 SP1
    Windows Server 2003 SP2
    Windows Server 2003 R2
    Windows Vista
    Windows Vista SP2
    PowerShell 2.0 October 2009 Windows 7
    Windows Server 2008 R2 (**)
    Windows XP SP3
    Windows Server 2003 SP2
    Windows Vista SP1
    Windows Vista SP2
    Windows Server 2008 SP1
    Windows Server 2008 SP2
    PowerShell 3.0 September 2012 Windows 8
    Windows Server 2012
    Windows 7 SP1
    Windows Server 2008 SP2
    Windows Server 2008 R2 SP1
    PowerShell 4.0 October 2013 Windows 8.1
    Windows Server 2012 R2
    Windows 7 SP1
    Windows Server 2008 R2 SP1
    Windows Server 2012
    PowerShell 5.0 April 2014 (***) Windows 10 Windows 8.1
    Windows Server 2012 R2


    EDIT: nebo možná by stačilo script spouštět z jiné stanice (např. Win10), která bude mít naimportované Active Directory moduly. Verzi powershellu zjistíte pomocí Get-Host    (je to parametr version)

    Radek

    9. května 2017 11:05
  • Tak to delejte pres ADSI - to funguje vsude

    https://social.technet.microsoft.com/wiki/contents/articles/4231.working-with-active-directory-using-powershell-adsi-adapter.aspx


    9. května 2017 13:57