【问题标题】:Powershell script for returning samaccountname to static variable用于将 samaccountname 返回到静态变量的 Powershell 脚本
【发布时间】:2019-11-23 06:06:24
【问题描述】:

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

我使用 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 数据。

【问题讨论】:

  • 您已经掌握了哪些信息?你的代码说你已经有了 SamAccountName ...然后你说你想要 SamAccountName ...我非常非常非常困惑! [脸红]
  • 试试:$Samaccountname = $User | Select -Expand samaccountname 或只是:$Samaccountname = $User.samaccountname

标签: powershell active-directory ldap-query


【解决方案1】:

Get-ADUser 默认返回属性SamAccountName,以及DistinguishedNameEnabledGivenNameNameObjectClassObjectGUIDSID、@987654@3 987654332@.

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)"

希望对你有帮助

【讨论】:

    【解决方案2】:

    感谢大家的帮助

    在尝试了每个人的建议后,我以原始形式更改了脚本,并且在上下文中现在可以正常工作

    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 检查用户 }

    输出是正确的用户名

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

    【讨论】:

    • 所以你刚刚将$user = .. 换成了.. =$user.. 恐怕这是完全错误的。你真的测试过吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多