![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Нужна помощь с формулировкой условия в PowerShell |
|
PowerShell - Нужна помощь с формулировкой условия в PowerShell
|
Новый участник Сообщения: 33 |
Приветствую!
Нужна помощь. Делаю скрипт, который подключается к удаленным доменам и берет оттуда учетки из определенной OU-шки. Затем проверяет на соответствие атрибутов, если локальные отличаются от удаленных, то устанавливаем атрибуты учетки из удаленной сети. Если локальной учетки нет, то она создается с нужными атрибутами. Я не могу придумать, как мне реализовать условие. по которому будет идти проверка на отсутствие учетки в удаленной сети (если человек уволен, его перемещают в другой контейнер) и удалять локальную учетку в случае отсутствия удаленной. Все это нужно для формирования контактов в чанге, но это будет следующим шагом. Сам скрипт: [array]$var = Get-ADUser -SearchBase "OU=Accounts,DC=TEST,DC=LOC" -Properties * -Filter * $comps = '' #$date = (Get-Date).ToString('ddMMyyyy_HH') $file = 'C:\_BAT\PS1\New_projects\Address_book\phrase' # пароль $logfile = 'C:\_BAT\PS1\New_projects\Address_book\log\Error_log.txt' # файл логов $User = 'ldap_user' $password = ConvertTo-SecureString (Get-Content $file) -AsPlainText -Force # хэш-тблица с именами региональных подразделений (имена добавляются спереди учетки $subnets = @{ 2='Ф.Санкт-Петербург2';3='Ф.Екатеринбург2';32='Ф.Калининград';34='Ф.Волгоград';35='Ф.Красноярск';36='Ф.Иркутск';40='Ф.Воронеж';49='Ф.Казань';50='Ф.Киров';55='Ф.Екатеринбург2';58='Ф.Астрахань';103='Ф.Хабаровск'; 60='Ф.Белгород';62='Ф.Краснодар';63='Ф.Ижевск';75='Ф.Барнаул';76='Ф.Кемерово';84='Ф.Архангельск';87='Ф.Магнитогорск';91='Ф.Волгодонск';92='Ф.Липецк';94='Ф.Курск';95='Ф.Буденновск';89='Ф.Чебоксары'; 83='Ф.Москва2';73='Ф.Москва';57='Ф.Москва3';99='Ф.Мурманск';44='Ф.Н.Новгород2';51='Ф.Н.Новгород';4='Ф.Н.Новгород3';80='Ф.Новороссийск';59='Ф.Новосибирск2';93='Ф.Новосибирск';25='Ф.Уфа';64='Ф.Челябинск'; 74='Ф.Омск';69='Ф.Оренбург';52='Ф.Пенза';65='Ф.Пермь';66='Ф.Пятигорск';38='Ф.Ростов-на-Дону';39='Ф.Ростов-на-Дону2';26='Ф.Самара';100='Ф.Санкт-Петербург2';46='Ф.Саратов';42='Ф.Саратов2'; 61='Ф.Смоленск';53='Ф.Сочи';47='Ф.Ставрополь';88='Ф.Сыктывкар';82='Ф.Тамбов';86='Ф.Тверь';77='Ф.Томск';48='Ф.Тула';67='Ф.Тула2';45='Ф.Тюмень';104='Ф.Улан-Удэ';90='Ф.Ульяновск';54='Ф.Ярославль' } function data_request($val1, $val2, $val3, $val4){ # $val1 - адрес сервера; $val2 - OU-контейнера; $val3 - домен пользователя, $val4 - подстановка подсети try { $userName = $user + '@' + $val3 $domain = $val3.Split('.') $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $Password $usr = Get-ADUser -Server $val1 -SearchBase $val2 -Credential $cred -Properties * -Filter * foreach ($u in $usr){ if ($u.EmailAddress -eq $null -or $u.OfficePhone -eq $null){ continue } #elseif ($u.enabled -eq $false){ # Remove-ADUser -Identity $($u.SamAccountName + $subnet[2]) #} else { Write-Host $val1, $val3 $data = ($u.SamAccountName, $u.DisplayName, $u.Surname, $u.GivenName, $u.Office, $u.OfficePhone, $u.EmailAddress, "___") # Пишем данные региональных учеток в файл Add-Content $("C:\_BAT\PS1\New_projects\Address_book\Shops\" + $domain[0] + '.txt') $data # Если запрашиваемой учетки нет, переходим в блок CATCH где выполняется команда создания учетки Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -ErrorAction Stop $Remote_User = $u.SamAccountName $Local_User = Get-ADUser -Identity $($Remote_User + $val4[2]) # Проверяем атрибуты, если у удаленной учетки они отличаются от локальной, то меняем их if ($Local_User){ if ($local_User.DisplayName -match $u.DisplayName){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties * | Set-ADUser -DisplayName $($subnets.[int]$val4[2] + " - " + $u.DisplayName) } if ($Local_User.title -eq $u.title){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties title | Set-ADUser -title $u.title } if ($Local_User.Department -eq $u.Department){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties Department | Set-ADUser -Department $u.Department } if ($Local_User.Company -eq $u.Company){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties Company | Set-ADUser -Company $u.Company } if ($Local_User.OfficePhone -eq $u.OfficePhone){ Write-Host "OK" }else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties OfficePhone | Set-ADUser -OfficePhone $u.OfficePhone } if ($Local_User.Office -eq $u.Office){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties Office | Set-ADUser -Office $u.Office } if ($Local_User.Surname -eq $u.Surname){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties Surname | Set-ADUser -Surname $u.Surname } if ($Local_User.GivenName -eq $u.GivenName){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties GivenName | Set-ADUser -GivenName $u.GivenName } if ($Local_User.EmailAddress -eq $u.EmailAddress){ Write-Host "OK" } else { Get-ADUser -Identity $($u.SamAccountName + $val4[2]) -Properties EmailAddress | Set-ADUser -EmailAddress $u.EmailAddress } } } } } catch [Microsoft.ActiveDirectory.Management.ADServerDownException]{ Add-Content $logfile $((Get-Date).ToString('yyyy.MM.dd HH:mm:ss') + " -- Not answer -- " + $pc + " -- " + $dom + " -- " + $error[0] + " -- " + "Microsoft.ActiveDirectory.Management.ADServerDownException") } catch [System.Security.Authentication.AuthenticationException]{ Add-Content $logfile $((Get-Date).ToString('yyyy.MM.dd HH:mm:ss') + " -- Authentication -- " + $pc + " -- " + $dom + " -- " + $error[0] + " -- " + "System.Security.Authentication.AuthenticationException") } catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]{ if ($u.SamAccountName -eq $null){ continue } else { Write-Host "Попытка поздания пользователя" New-ADUser -Name $($subnets.[int]$val4[2] + " - " + $u.DisplayName) -Enabled $true -SamAccountName $($u.SamAccountName + $val4[2]) -Surname $u.Surname -GivenName $u.GivenName -DisplayName $($subnets.[int]$val4[2] + " - " + $u.DisplayName) -AccountPassword $password -ChangePasswordAtLogon $true -Office $u.Office -OfficePhone $u.OfficePhone -EmailAddress $u.EmailAddress -Department $u.department -Company $u.Company -UserPrincipalName $($u.SamAccountName + $val4[2] + '@test.loc') -Title $u.title -path $('OU=' + $subnets.[int]$val4[2] + ',OU=Accounts,DC=TEST,DC=LOC') } } catch { Add-Content $logfile $((Get-Date).ToString('yyyy.MM.dd HH:mm:ss') + " -- General -- " + $pc + " -- " + $dom + " -- " + $error[0] + " -- " + "Block: CATCH") } } $comps = @{ 0=@('192.168.2.1','CN=Users,DC=spb3,DC=int'); 1=@('192.168.3.1','CN=Users,DC=ekb3,DC=int'); 2=@('192.168.4.1','CN=Users,DC=nnov2,DC=int'); 3=@('192.168.25.1','CN=Users,DC=ufa,DC=int'); 4=@('192.168.26.1','CN=Users,DC=samara,DC=int'); 5=@('192.168.32.1','CN=Users,DC=klg,DC=int'); 6=@('192.168.34.1','CN=Users,DC=volgograd,DC=int'); 7=@('192.168.35.1','CN=Users,DC=kras,DC=int'); 8=@('192.168.36.1','CN=Users,DC=irkut,DC=int'); 9=@('192.168.38.1','CN=Users,DC=rostov,DC=int'); 10=@('192.168.39.1','CN=Users,DC=rostov2,DC=int'); 11=@('192.168.40.1','CN=Users,DC=vrn,DC=int'); 12=@('192.168.42.1','CN=Users,DC=saratov,DC=int'); 13=@('192.168.45.1','CN=Users,DC=tyumen,DC=int'); 14=@('192.168.46.1','CN=Users,DC=saratov2,DC=int'); 15=@('192.168.47.1','CN=Users,DC=stavropol,DC=int'); 16=@('192.168.48.1','CN=Users,DC=tula2,DC=int'); 17=@('192.168.49.1','CN=Users,DC=kazan,DC=int'); 18=@('192.168.50.1','CN=Users,DC=kirov,DC=int'); 19=@('192.168.51.1','CN=Users,DC=nnov,DC=int'); 20=@('192.168.52.1','CN=Users,DC=penza,DC=int'); 21=@('192.168.53.1','CN=Users,DC=sochi,DC=int'); 22=@('192.168.54.1','CN=Users,DC=yaroslavl,DC=int'); 23=@('192.168.55.1','CN=Users,DC=ekb,DC=int'); 24=@('192.168.55.2','CN=Users,DC=ekb2,DC=int'); 25=@('192.168.57.1','CN=Users,DC=msk3,DC=int'); 26=@('192.168.58.1','CN=Users,DC=astrahan,DC=int'); 27=@('192.168.59.1','CN=Users,DC=NOVOSIBIRSK2,DC=int'); 28=@('192.168.60.1','CN=Users,DC=BELGOROD,DC=int'); 29=@('192.168.61.1','CN=Users,DC=SMOLENSK,DC=int'); 30=@('192.168.62.1','CN=Users,DC=krasnodar,DC=int'); 31=@('192.168.63.1','CN=Users,DC=IZHEVSK,DC=int'); 32=@('192.168.64.1','OU=Domain_SM_user,DC=CHELYABINSK,DC=int'); 33=@('192.168.65.1','OU=user_RD,DC=PERM,DC=int'); 34=@('192.168.66.1','CN=Users,DC=PYATIGORSK,DC=int'); 35=@('192.168.67.1','CN=Users,DC=TULA,DC=int'); 36=@('192.168.69.1','CN=Users,DC=orenburg,DC=int'); 37=@('192.168.73.1','CN=Users,DC=msk2,DC=int'); 38=@('192.168.74.1','CN=Users,DC=omsk,DC=int'); 39=@('192.168.75.1','CN=Users,DC=barnaul,DC=int'); 40=@('192.168.76.1','CN=Users,DC=kemerovo,DC=int'); 41=@('192.168.77.1','CN=Users,DC=tomsk,DC=int'); 42=@('192.168.80.1','CN=Users,DC=novorossiysk,DC=int'); 43=@('192.168.82.1','CN=Users,DC=tambov,DC=int'); 44=@('192.168.84.1','CN=Users,DC=arhangelsk,DC=int'); 45=@('192.168.86.1','CN=Users,DC=tver,DC=int'); 46=@('192.168.87.1','CN=Users,DC=magnit,DC=int'); 47=@('192.168.88.1','CN=Users,DC=syktyvkar,DC=int'); 48=@('192.168.89.1','CN=Users,DC=cheboks,DC=int'); 49=@('192.168.90.1','CN=Users,DC=ulyanovsk,DC=int'); 50=@('192.168.91.1','CN=Users,DC=volgodon,DC=int'); 51=@('192.168.92.1','CN=Users,DC=lipetsk,DC=int'); 52=@('192.168.93.1','CN=Users,DC=novosib2,DC=int'); 53=@('192.168.94.1','CN=Users,DC=kursk,DC=int'); 54=@('192.168.95.1','CN=Users,DC=budjonnovsk,DC=int'); 55=@('192.168.99.1','CN=Users,DC=murmansk,DC=int'); 56=@('192.168.100.1','CN=Users,DC=spb2,DC=int'); 57=@('192.168.103.1','CN=Users,DC=habarovsk,DC=int'); 58=@('192.168.104.1','CN=Users,DC=ulan-ude,DC=int') } for ($i=0; $i -lt $comps.Count; $i++){ $pc = $comps[$i][0] # IP сервера $OU = $comps[$i][1] # OU-шка $dm = $OU -Split',' | ConvertFrom-StringData # создаем хеш-таблицу из OU-шки $dom = $dm.DC -join '.' # формируем из хеш-таблицы имя домена $subnet = $pc.split('.') # Разбиваем IP-адрес на группы, позже понадобиться 3-й октет Write-Host "+ + + + +" Write-Host "" Write-Host $pc Write-Host $OU Write-Host "_ _ _ _ _" Write-Host "" data_request -val1 $pc -val2 $OU -val3 $dom -val4 $subnet } |
|
Отправлено: 15:39, 14-02-2022 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Но куда этот блок вставить, не могу понять...
|
Последний раз редактировалось lcnet, 15-02-2022 в 09:01. Отправлено: 15:53, 14-02-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Или в первой функции этого не реализовать и надо писать еще одну функцию и выполнять обратное сравнение?
|
Отправлено: 17:51, 14-02-2022 | #3 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать 1. Если учетки запрашиваются из определенного OU, то какой смысл проверять отключены ли они, если уволенные переносятся в другой OU (или что подразумевается под контейнером)?
2. Другое дело если нужно именно проверить наличие учетной записи на то, существовала ли она вообще. Но тут включается как человеческий фактор, так и незначительная разница в регламентах и/или изменение оных (например если сначала учетные записи удаляли, а потом начали отключать и переносить в другой OU, или если какой-то сотрудник сделал это по незнанию). Если же проигнорировать 2 и не пользоваться 1, то остаются варианты с или |
Отправлено: 10:13, 15-02-2022 | #4 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Приветствую!
Я слишком запарился. видимо )) Спасибо за идею! |
|
Отправлено: 12:54, 16-02-2022 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Нужна помощь | Vovan1396 | Тест-форум | 2 | 29-03-2014 18:17 | |
VPN - Нужна помощь | korenko | Сетевые технологии | 6 | 30-11-2013 09:53 | |
Разное - Нужна помощь .... | Format | Тест-форум | 1 | 12-11-2010 22:55 | |
нужна помощь | NiceSindy | Хочу все знать | 11 | 01-05-2004 10:16 | |
нужна помощь | Garry73 | Хочу все знать | 1 | 27-03-2004 16:04 |
|