用于将samaccountname返回到静态变量

时间:2019-07-14 03:56:52

标签: powershell active-directory ldap-query

我正在尝试创建一个脚本,用于通过网络远程删除本地配置文件。

我正在使用delprof2作为程序,并将其设置为计算机网络名称,但是当尝试指定要查找和删除的用户名时,脚本将返回完整的DistinguishedName,包括OU和Dc等。我需要它返回的是SamAccountName内容,没有CN = infront。

有人可以帮忙吗?

我尝试使用-filter而不是-ldapfilter
我已将方括号中的samaccount名称更改为$name.samaccountname=甚至是CN=

function CheckUser{
    $user = Get-ADUser -LDAPFilter "(samaccountname=$user)"
    If ($user  -eq $Null) 
    {"User does not exist in AD";GetUserName}
    Else {GetMenu}

必需的结果是让$user变量仅保存SamAccountName数据。

2 个答案:

答案 0 :(得分:0)

Get-ADUser默认返回属性SamAccountName,以及DistinguishedNameEnabledGivenNameNameObjectClassObjectGUIDSIDSurnameUserPrincipalName

Get-ADUser cmdlet的-Identity参数可以接受以下条目:

  • 专有名称
  • GUID
  • SID
  • SamAccountName

并且,如果您的问题表明您已经有DistinghuishedName或SamAccountName可供检查,则可以将其简单地用于Identity参数,而根本不使用过滤器。

类似的事情应该起作用:

function CheckUser {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [string]$UserToCheck  # can be DistinghuishedName, GUID, SID or SamAccountName
    )
    $user = Get-ADUser -Identity $UserToCheck
    if (!$user) { 
        "User does not exist in AD" 
    }
    else {
        # return the SamAccountName of the user
        return $user.SamAccountName
    }
}

像这样使用

$samaccountname = CheckUser -UserToCheck 'the property you have, like the DistinghuishedName'

如果您需要使用用户的其他属性,例如电子邮件地址,那么您确实需要使用过滤器(或LDAPFilter)来搜索用户。 像

$user = Get-ADUser -Properties EmailAddress -Filter "EmailAddress -eq '$UserToCheck'"

$user = Get-ADUser -LDAPFilter "(mail=$UserToCheck)"

希望这会有所帮助

答案 1 :(得分:0)

感谢大家的帮助

尝试了每个人的建议后,我以原始形式更改了脚本,现在可以正常使用

function CheckUser{
    Get-ADUser -LDAPFilter ("samaccountname=$user") = $user
    If ($user  -eq $Null) 
    {"User does not exist in AD";GetUserName}
    Else {GetMenu}
}

如您所见,现在将samaccountname设置为$ user

我使用菜单功能进行了测试  4 {#显示存储的用户名     读主机$ user     CheckUser     }

并且输出的是正确的用户名

这现在将正确的变量传递给DelProf2.exe,以进行远程配置文件删除。