|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Администрирование AD |
|
|
PowerShell - Администрирование AD
|
Новый участник Сообщения: 48 |
Решил пользоваться PowerShell вместо mmc ADUC (Нафига? ну просто.... привыкать к PoSH).
Например просто найти пользователя, если точно не знаешь ни фамилии ни логина в ADUC ты забиваешь часть букв фамилии или тогоже логина и тебе вываливается список - где то 3 клика мыши + написать несколько букв. В PoSH я рисую вот так: Get-ADUser -Filter 'Name -like "*Петров*"' | FT name, samaccountname - это если ищу по фамилии Get-ADUser -Filter 'samaccountname -like "*pet*"' | FT name, samaccountname - если ищу по логину Как обьединить два фильтра? ------------------------------------------------- Тему буду добавлять вопросами. Надеюсь кому-то тоже будет полезно. |
|
Отправлено: 09:52, 14-11-2014 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 09:55, 14-11-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать function Get-User ($a)
{ Get-ADUser -Filter 'samaccountname -like "*$a*" -or Name -like "*$a*"' | FT name, samaccountname } Ничего не выдает(( |
Отправлено: 10:28, 14-11-2014 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:32, 14-11-2014 | #4 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать Как найти всех членов определенного OU(Organizational Unit)?
PS C:\Windows\system32> Get-ADUser -Properties * -Filter "CanonicalName -like '*IT*'" Get-ADUser : A Filter was passed that uses constructed attributes At line:1 char:1 + Get-ADUser -Properties * -Filter "CanonicalName -like '*IT*'" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException + FullyQualifiedErrorId : ActiveDirectoryServer:8555,Microsoft.ActiveDirectory.Management.Commands.GetADUser Get-ADUser -Properties * -Filter 'DistinguishedName -like "*IT*"' - не выдает ничего |
|
Отправлено: 11:14, 14-11-2014 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:19, 14-11-2014 | #6 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать function Get-User{ param ( [string]$User, [string]$OU ) if ($OU) {Get-ADUser -Filter * -SearchBase "OU=$OU,DC=contoso,DC=com" | ft name, samaccountname, officephone} if ($User) { Get-ADUser -Filter "samaccountname -like '*$User*' -or Name -like '*$User*'" -Properties * | FT name, samaccountname, officephone } } |
Отправлено: 12:14, 14-11-2014 | #7 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:29, 14-11-2014 | #8 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать Function Global:New-ADUserExtended ([parameter(Mandatory=$true)][string]$samAccountName, [parameter(Mandatory=$true)][string]$Name, # [parameter(Mandatory=$true)][string]$SecondName, [parameter(Mandatory=$true)][string]$Surname, [parameter(Mandatory=$true)][string]$ColleagueSamAccountName, [parameter(Mandatory=$false)][string]$Office, [parameter(Mandatory=$false)][string]$TelephoneNumber, # [parameter(Mandatory=$false)][string]$IPphone, # [parameter(Mandatory=$false)][string]$MobilePhone, # [parameter(Mandatory=$false)][string]$Street, # [parameter(Mandatory=$true)][string]$JobTitle, # [parameter(Mandatory=$false)][string]$Departament, # [parameter(Mandatory=$false)][string]$Company, [parameter(Mandatory=$false)][string]$Description, # [parameter(Mandatory=$false)][string]$Email, # [parameter(Mandatory=$false)][datetime]$ExpireAccount, [parameter(Mandatory=$false)][switch]$AddToColleagueGroups, [parameter(Mandatory=$true)][string]$AccountPassword, [parameter(Mandatory=$false)]$Server, [parameter(Mandatory=$false)]$Credential) { Write-Host $error.Clear | Out-Null Write-Host 'Original and comments: http://vam.in.ua/index.php/it/25-ms-powershell/154-powershell-ad-account-create.html' Write-Host 'Feedback: http://vam.in.ua/index.php/contacts/2-admins/1-aleksey.html' $passwd='' Remove-Variable commonError,passwd,colleague -ErrorAction SilentlyContinue Write-Host #--- Импортируем модуль AD Import-Module -Name ActiveDirectory -ErrorVariable commonError # Выделяем односимвольный инициал #$Initial = $SecondName.Substring(0,1).ToUpper() # Собираем полное имя $displayName = $Name + ' ' + $Surname # Добавляем несокращенные ФИО к описанию #$Description += &{' [' + $Name + ' ' + $SecondName + ' ' + $Surname + ']'} Write-Host 'Sam Account Name/User Principal Name/Login: ('$samAccountName.Length") `t" $samAccountName -ForegroundColor Yellow Write-Host 'Full Name: ('$displayName.Length") `t`t`t`t`t" $displayName Write-Host 'Description: ('$Description.Length") `t`t`t`t" $Description -ForegroundColor Yellow Write-Host 'Street: ('$Street.Length") `t`t`t`t`t" $Street Write-Host 'Telephone: ('$TelephoneNumber.Length") `t`t`t`t`t" $TelephoneNumber -ForegroundColor Yellow Write-Host 'IP Phone: ('$IPphone.Length") `t`t`t`t`t" $IPphone Write-Host 'Mobile Phone: ('$MobilePhone.Length") `t`t`t`t" $MobilePhone -ForegroundColor Yellow Write-Host 'Company: ('$Company.Length") `t`t`t`t`t" $Company Write-Host 'Departament: ('$Departament.Length") `t`t`t`t`t" $Departament -ForegroundColor Yellow Write-Host 'Office: ('$Office.Length") `t`t`t`t`t" $Office Write-Host 'Job Title: ('$JobTitle.Length") `t`t`t`t`t" $JobTitle -ForegroundColor Yellow Write-Host 'E-Mail: ('$Email.Length") `t`t`t`t`t" $Email Write-Host "Account will expire: `t`t`t`t" $ExpireAccount -ForegroundColor Yellow Write-Host "Account password: `t`t`t`t`t" $AccountPassword Write-Host "Collegue: `t`t`t`t`t`t" $ColleagueSamAccountName -ForegroundColor Yellow Write-Host while (($ContinOk.Length -ne 1) -or ($ContinOk -inotmatch {[yn]})) { $mess = 'Создать такую учетную запись? (Y/N)' $ContinOk = Read-Host -Prompt $mess } if ($ContinOk -ieq "N") { Remove-Variable ContinOk -ErrorAction SilentlyContinue Write-Error -Message "Операция была отменена" -ErrorAction Stop } else { #--- Если указаны учетные данные if ($Credential) { $passwd = Get-Credential -Credential $Credential -ErrorVariable commonError if ((!$passwd) -or ($passwd.Length -lt 1)) {Break} } #--- Если переменная Server не определена, то подставить ей значение текущего контроллера домена if ($Server) { if ($Credential) { $Server = Get-ADDomainController -Credential $passwd -Server $Server -ErrorVariable commonError $Domain = $Server.Domain $Server = $Server.HostName } else { $Server = Get-ADDomainController -Server $Server -ErrorVariable commonError $Domain = $Server.Domain $Server = $Server.HostName } } else { if ($Credential) { $Server = Get-ADDomainController -Credential $passwd -ErrorVariable commonError $Domain = $Server.Domain $Server = $Server.HostName } else { $Server = Get-ADDomainController -ErrorVariable commonError $Domain = $Server.Domain $Server = $Server.HostName } } # Если произошла общая ошибка - прервать функцию if ($commonError) { Remove-Variable passwd,Credential -ErrorAction SilentlyContinue Break } # Узнаем где находится учетная запись коллеги if ($Credential) { $colleague = Get-ADUser -Identity $ColleagueSamAccountName -Server $Server -Credential $passwd -ErrorVariable commonError } else { $colleague = Get-ADUser -Identity $ColleagueSamAccountName -Server $Server -ErrorVariable commonError } $colleague = $colleague.DistinguishedName | Out-String $colleague = $colleague | where {$_ -match ",(.+)"} | foreach {$Matches[1]} # Если произошла общая ошибка - прервать функцию if ($commonError) { Remove-Variable passwd,Credential -ErrorAction SilentlyContinue Break } # Если не определено время просроченности аккаунта - то устанавливаем его в Never if ((!$ExpireAccount) -or ($ExpireAccount.Length -lt 1)) { $ExpireAccount = "1/1/1970" } # Если определен сервер и для коллеги есть хоть один символ - создать аккаунт AD if (($Server) -and ($colleague.Length -gt 0)) { # Формируем командлет New-ADUser в зависимости от наличия параметров [string]$comandLet = 'New-ADUser -SamAccountName $samAccountName -Name $displayName ` -DisplayName $displayName -Surname $Surname ` -ErrorVariable commonError -ErrorAction Stop ` -AccountPassword (ConvertTo-SecureString -String $AccountPassword -AsPlainText -Force) ` -Path $colleague -Server $Server ` -CannotChangePassword $true ` -homedrive "H" -homedirectory "\\Srvshare\home\$samAccountName" ` -PasswordNeverExpires $true ' # Создаем массив переменных (параметр командлета New-ADUser, пробел, переменная; о одинарных кавычках, через запятую) $cmltParameters = ('-Office $Office','-OfficePhone $TelephoneNumber','-StreetAddress $Street',` '-Title $JobTitle','-Department $Departament','-Company $Company',` '-Description $Description','-EmailAddress $Email','-MobilePhone $MobilePhone',` '-AccountExpirationDate $ExpireAccount','-Credential $passwd') # Если длина параметра не ноль, добавляем его в командлет New-ADUser foreach ($parameter in $cmltParameters) { [string]$expression = 'if (' + ([regex]::Match($parameter,'(?<=\s)(\$.+)')) + '.Length -ge 1) {$comandLet += " $parameter"}' Invoke-Expression $expression } $userPrincipalName = $samAccountName + '@' + $Domain # Добавляем в командлет New-ADUser дополнительные статические атрибуты $comandLet += ' -OtherAttributes @{userPrincipalName=$userPrincipalName;givenName=$Name;countryCode="804";co="Ukraine";c="UA";l="Kharkov"' # Создаем массив дополнительных динамических атрибутов (параметр равно переменная; в одинарных кавычках, через запятую) $cmltParametersAdditional = ('ipPhone=$IPphone') # Если длина дополнительного атрибута не ноль, добавляем его в командлет New-ADUser foreach ($additionalParameter in $cmltParametersAdditional) { [string]$expression = 'if (' + ([regex]::Match($additionalParameter,'(?<=\=)(\$.+)')) + '.Length -ge 1) {$comandLet += ";$additionalParameter"}' Invoke-Expression $expression } # Закрываем скобку перечисления дополнительных атрибутов -OtherAttributes в командлете New-ADUser $comandLet += '}' # Командлет New-ADUser собран, выполняем его Invoke-Expression $comandLet # Если нет ошибок - выполнить блок кода if ((!$commonError) -and (!$commonWarn)) { # Активируем новый аккаунт if ($Credential) { Set-ADUser -Identity $samAccountName -ChangePasswordAtLogon $true -Server $Server -Credential $passwd Enable-ADAccount -Identity $samAccountName -Server $Server -Credential $passwd } else { Set-ADUser -Identity $samAccountName -ChangePasswordAtLogon $false -Server $Server Enable-ADAccount -Identity $samAccountName -Server $Server } # Поздравим с успешным созданием $mess = 'Новая учетная запись "' + $samAccountName + '" успешно создана на сервере "' + $Server + '" в ' + $colleague Write-Host $mess # Если указан параметр добавления нового аккаунта в группы коллеги, выполняем блок кода if ($AddToColleagueGroups.IsPresent) { if ($Credential) { # Узнаем в каких группах состоит коллега $grps = Get-ADUser -Identity $ColleagueSamAccountName -Properties MemberOf -Server $Server -Credential $passwd -ErrorVariable commonError } else { $grps = Get-ADUser -Identity $ColleagueSamAccountName -Properties MemberOf -Server $Server -ErrorVariable commonError } # Выделяем группы коллеги в переменную $grps = $grps.MemberOf if ($grps.Length -ge 1) { # Объявляем строковую переменную, в которую будем через запятую заносить имена групп для вывода на экран [string]$strgrp = '' # Добавляем созданный нами аккаунт в те же группы, что и у коллеги foreach ($grp in $grps) { if ($Credential) { Add-ADGroupMember -Identity $grp -Members $samAccountName -Server $Server -Credential $passwd -ErrorVariable commonError } else { Add-ADGroupMember -Identity $grp -Members $samAccountName -Server $Server -ErrorVariable commonError } # Регулярное выражение, которое выделит название группы в удобочитаемом виде $strgrp = $strgrp + [regex]::Match($grp,'(?<=\=).*?(?=\,)') + ', ' } # Поздравим с успешным добавлением в группы к коллеге if (!$commonError) { # Удаляем из строчного списка групп последнюю запятую $strgrp = $strgrp.Substring(0,($strgrp.Length -2)) # Формируем сообщение со списком групп $mess = 'Новая учетная запись успешно добавлена в группы: ' + $strgrp Write-Host $mess } } } } } } $passwd='' <# mkdir \\Srvshare\home\$samAccountName $ACL = Get-ACL \\Srvshare\home\$samAccountName $Setting = "DOMEN\$samAccountName","FullControl","Allow" $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule $Setting $ACL.SetAccessRule($AccessRule) $ACL | Set-Acl \\Srvshare\home\$samAccountName #> if ( !(Test-Path -Path "\\srvshare\HOME\$samAccountName" -PathType Container) ) { ## Doesn't exist so create it. Write-Host "home directory doesn't exist. Creating home directory." ## Create the directory New-Item -path \\srvshare\HOME\ -Name $samAccountName -ItemType Directory $userDir = "\\srvshare\HOME\$samAccountName" ## Modify Permissions on homedir $Rights= [System.Security.AccessControl.FileSystemRights]::Read -bor [System.Security.AccessControl.FileSystemRights]::Write -bor [System.Security.AccessControl.FileSystemRights]::Modify -bor [System.Security.AccessControl.FileSystemRights]::FullControl $Inherit=[System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit $Propogation=[System.Security.AccessControl.PropagationFlags]::None $Access=[System.Security.AccessControl.AccessControlType]::Allow $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule("DOMEN\$samAccountName",$Rights,$Inherit,$Propogation,$Access) $ACL = Get-Acl \\srvshare\HOME\$samAccountName $ACL.AddAccessRule($AccessRule) $Account = new-object system.security.principal.ntaccount("DOMEN\$samAccountName") $ACL.setowner($Account) $ACL.SetAccessRule($AccessRule) Set-Acl $userDir $ACL } Remove-Variable passwd,Credential,mess,strgrp,grp,grps,colleague,AccountPassword,Domain -ErrorAction SilentlyContinue } Домашняя директория создается и права раздаются - но при входе пользователя не монтируется Если зайти в ADUC что-то изменить (не связанное с HOME Folder) - при следующем логине все конектится штатно |
Последний раз редактировалось milligan, 17-11-2014 в 13:12. Причина: 1 Отправлено: 12:37, 17-11-2014 | #9 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:59, 17-11-2014 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Администрирование | ModeJunior | Хочу все знать | 1 | 01-04-2013 12:06 | |
Администрирование с недоменного ПК (AD,DNS,DHCP,...) | zubkoff.s | Microsoft Windows NT/2000/2003 | 11 | 10-02-2011 14:30 | |
Переход с AD 2000 Enterprice на AD 2003 standart | seniora | Microsoft Windows NT/2000/2003 | 2 | 20-08-2007 14:09 | |
Удаленное администрирование | Zaza | Сетевые технологии | 6 | 10-04-2005 18:46 |
|