在不使用Get-ADUser的情况下将专有名称转换为SamAccountName

时间:2015-06-02 20:45:11

标签: powershell active-directory

我的计算机具有PowerShell v2.0的原始版本,因此Get-ADUser将无效。我正在尝试将manager属性从distinguishedname转换为SamAccountName

$searcher = [adsisearcher]"(samaccountname=$env:USERNAME)"
$searcher.FindOne().Properties.manager

如果我有Get-ADUser

,这就完美无缺
(get-aduser (get-aduser $user -Properties manager).manager).samaccountName

Grabbed get-aduser statement from here..

2 个答案:

答案 0 :(得分:2)

您可以使用专有名称来检索将为您提供sAMAccountName

的用户对象
$searcher = [adsisearcher]"(samaccountname=$env:USERNAME)"
$manager  = [adsi]('LDAP://' + $searcher.FindOne().Properties.manager)
$manager.sAMAccountName

如果专有名称包含需要转义的特殊字符,您也可以使用其他ADSISearcher:

$searcher  = [adsisearcher]"(samaccountname=$env:USERNAME)"
$manager   = $searcher.FindOne().Properties.manager
$searcher2 = [adsisearcher]"(distinguishedName=$manager)"
$searcher2.FindOne().Properties.sAMAccountName

答案 1 :(得分:0)

$ADS_ESCAPEDMODE_ON = 2
$ADS_SETTYPE_DN = 4
$ADS_FORMAT_X500_DN = 7
$Pathname = new-object -comobject "Pathname"
[Void] $Pathname.GetType().InvokeMember("EscapedMode", "SetProperty", $null, $Pathname, $ADS_ESCAPEDMODE_ON)

$searcher = [ADSISearcher] "(sAMAccountname=$Env:USERNAME)"
$managerDN = $searcher.FindOne().Properties["manager"]
if ( $managerDN ) {
  [Void] $Pathname.GetType().InvokeMember("Set", "InvokeMethod", $null, $Pathname, @($managerDN[0], $ADS_SETTYPE_DN))
  $escapedDN = $Pathname.GetType().InvokeMember("Retrieve", "InvokeMethod", $null, $Pathname, $ADS_FORMAT_X500_DN)
  ([ADSI] "LDAP://$escapedDN").Properties["sAMAccountName"][0]
}

获取当前用户的manager属性(专有名称),使用Pathname对象将其转义,使用[ADSI]类型加速器绑定到该属性,然后检索经理{ {1}}属性。