none
Powershell. Перемещение пользователей в OU на основании поля "company" RRS feed

  • Вопрос

  • Помогите написать скрипт на Powershell, который на основании поля Организация (company), будет перемещать в нужный контейнер (OU).
    16 ноября 2017 г. 8:41

Ответы

  • С учетом, что company = OU name:

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    • Предложено в качестве ответа Vector BCOModerator 16 ноября 2017 г. 9:24
    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:07
    Отвечающий
  • Вам не подойдет такой вариант?

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:08
  • Добрый день!

    Попробуйте так:

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU

    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:16

Все ответы

  • С учетом, что company = OU name:

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    • Предложено в качестве ответа Vector BCOModerator 16 ноября 2017 г. 9:24
    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:07
    Отвечающий
  • Вам не подойдет такой вариант?

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:08
  • Добрый день!

    Попробуйте так:

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU

    • Помечено в качестве ответа Vector BCOModerator 17 ноября 2017 г. 10:24
    16 ноября 2017 г. 9:16
  • не понял куда OU вставить

    а чем он отличается от 

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU
    16 ноября 2017 г. 11:39
  • не понял куда OU вставить

    а чем он отличается от 

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU

    В этой строке вы указываете куда хотите переместить пользователя

    $OU = "OU=users,OU=company,DC=domen,DC=com"

    А вот тут

    {$_.Company -eq "То что у пользователя в поле Организация"}

    попробуйте на тестовом пользователе у которого допустим как в примере будет 1234

    переместить в нужный OU


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.


    • Изменено PuCtoy 16 ноября 2017 г. 11:49
    16 ноября 2017 г. 11:47
  • ок я понял, спасибо у меня получилось 

    а чем он отличается от

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    16 ноября 2017 г. 12:05
  • ок я понял, спасибо у меня получилось 

    а чем он отличается от

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    На это может ответить Kazun

    я слабоват в PoSh, но было бы супер если бы он объяснил


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    16 ноября 2017 г. 12:18
  • ок я понял, спасибо у меня получилось 

    а чем он отличается от

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    1 строка получает список OU и пихерит список в переменную $org

    2 строка получает список всех пользюков и форичем их перебирает

    3 в 3й строке получаете Distinguished Name OU по параметру Company

    4 Проверяем что строка 3 не пустая (получилось сопоставить)

    5 Проверяете что пользователь еще не в той же OU

    6 Если пользюка нужно переместить - перемещаете

    7-9 закрывающие скобки предыдущих команд


    The opinion expressed by me is not an official position of Microsoft

    16 ноября 2017 г. 12:24
    Модератор
  • ок я понял, спасибо у меня получилось 

    а чем он отличается от

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    1 строка получает список OU и пихерит список в переменную $org

    2 строка получает список всех пользюков и форичем их перебирает

    3 в 3й строке получаете Distinguished Name OU по параметру Company

    4 Проверяем что строка 3 не пустая (получилось сопоставить)

    5 Проверяете что пользователь еще не в той же OU

    6 Если пользюка нужно переместить - перемещаете

    7-9 закрывающие скобки предыдущих команд


    The opinion expressed by me is not an official position of Microsoft

    А как он поймет в какую ou ему переместить пользователя? Точнее как он определит если например ou не существует в ветке 
    16 ноября 2017 г. 12:34
  • а можно ли сделать какой нибудь отчет из какой ou он вытащил пользователя, чтобы потом его посмотреть и хранить как бэкап
    16 ноября 2017 г. 12:38
  • ок я понял, спасибо у меня получилось 

    а чем он отличается от

    Get-ADOrganizationalUnit -Filter * | Foreach {$org = @{}} {$org[$_.Name] = $_.DistinguishedName}
    Get-ADUser -Filter "compnay -like '*'" -Properties company | Foreach {
    	$path = $org[$_.Company]
    	if($path) {
    		if($path -ne $_.DistinguishedName.split(",",2)[1]) {
    			$_ | Move-ADObject -TargetPath $path
    		}
    	}
    }

    1 строка получает список OU и пихерит список в переменную $org

    2 строка получает список всех пользюков и форичем их перебирает

    3 в 3й строке получаете Distinguished Name OU по параметру Company

    4 Проверяем что строка 3 не пустая (получилось сопоставить)

    5 Проверяете что пользователь еще не в той же OU

    6 Если пользюка нужно переместить - перемещаете

    7-9 закрывающие скобки предыдущих команд


    The opinion expressed by me is not an official position of Microsoft

    А как он поймет в какую ou ему переместить пользователя? Точнее как он определит если например ou не существует в ветке 

    Если нет OU - никто ничего не будет перемещать. Перечитайте еще раз описание скрипта построково.

    Что вы получите в каждой переменной вы можете легко увидеть выполняя пошагово скрипт и проверяя что вы получаете на выходе


    The opinion expressed by me is not an official position of Microsoft

    16 ноября 2017 г. 12:39
    Модератор
  • Добрый день!

    Попробуйте так:

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU

    Подскажите пожалуйста как сделать, так чтобы он не брал с юзеров с определенной OU?
    18 ноября 2017 г. 5:27
  • Добрый день!

    Попробуйте так:

    Import-Module ActiveDirectory
    $OU = "OU=users,OU=company,DC=domen,DC=com"
    Get-ADUser -Filter * -Properties Company | ? {$_.Company -eq "1234"} | Move-ADObject -TargetPath $OU

    Подскажите пожалуйста как сделать, так чтобы он не брал с юзеров с определенной OU?
    Get-ADUser -Filter * -SearchBase "OU=test,OU=it,DC=company,DC=com"

    Вы всегда можете вызвать справку, делается это так:

    Get-Help Get-ADUser -Full
    Так можно делать с любой командой


    20 ноября 2017 г. 7:19