Public/Get-ComputerADEntry.ps1
function Get-ComputerADEntry { <# .SYNOPSIS Получает объект AD по имени компьютера. .DESCRIPTION Возвращает Directory Entry на основании имени компьютера. .PARAMETER Name Имя компьютера для поиска в каталоге. .PARAMETER Domain Указывает на домен для поиска. Если ничего не указано, поиск будет выполнен в текущем домене. .EXAMPLE $vADComputer = Get-ComputerADEntry -Name 'PODSRV-RDSCB1' .INPUTS Name и, опционально, домен пользователя. .NOTES Функция ориентирована на использование в скрипта, которые выполняются от имени пользователя. Функция позволяет получать данные о компьютере не использую модуль ActiveDirectory. Опциональный параметр -Domain может быть либо в формате FQDN, либо - DN. #> [CmdletBinding()] [OutputType([System.DirectoryServices.DirectoryEntry])] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)] [System.String] $Name, [Parameter(Mandatory = $false, ValueFromPipeline = $false, Position = 1)] [System.String] $Domain ) begin { Write-Warning -Message 'The function <Get-ComputerADEntry> is deprecated. Use the module <ArielAD> instead.' try { if ($IsLinux) { throw [System.Configuration.ConfigurationException]::New('This operation system does not supported.') } if ($Domain) { # Если домен похож на FQDN... if ($Domain -Match "(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)") { $arr = $Domain.Split('.') for ($i = 0; $i -lt $arr.count; $i++) { $arr[$i] = 'DC=' + $arr[$i] } $Domain = $arr -join ',' } # Теперь домен должен быть корректным DN if ($Domain -Match '^(?:(?<cn>CN=(?<name>(?:[^,]|\,)*)),)?(?:(?<path>(?:(?:CN|OU)=(?:[^,]|\,)+,?)+),)?(?<domain>(?:DC=(?:[^,]|\,)+,?)+)$') { $vDomainDirectoryEntry = New-Object System.DirectoryServices.DirectoryEntry($("LDAP://$Domain")) $vDirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher($vDomainDirectoryEntry) } # Иначе - ошибка else { throw "Не удается привести значение <$Domain> к виду DN." } } else { $vDirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher } } catch { #$PSCmdlet.ThrowTerminatingError($PSItem) Write-Error -Exception $PSItem.Exeception } } process { try { if ($IsLinux) { throw [System.Configuration.ConfigurationException]::New('This operation system does not supported.') } $vDirectorySearcher.Filter = "(&(objectCategory=Computer)(Name=$Name))" $Result = ($vDirectorySearcher.FindOne()).GetDirectoryEntry() } catch { #$PSCmdlet.ThrowTerminatingError($PSItem) Write-Error -Exception $PSItem.Exeception } } end { return $Result } } |