用于将samaccountname返回到静态变量的Powershell脚本

用于将samaccountname返回到静态变量的Powershell脚本,powershell,active-directory,ldap-query,Powershell,Active Directory,Ldap Query,我正在尝试创建一个脚本,用于通过网络远程删除本地配置文件 我正在使用delprof2作为程序,我已将其设置为计算机网络名称,但在尝试指定要查找和删除的用户名时,脚本将返回完整的区分名称,包括OU和Dc等。我需要它返回的只是没有CN=INFORT的SamAccountName内容 有人能帮忙吗 我尝试了-filter而不是-ldapfilter 我已将括号中的samaccount名称更改为$name.samaccountname=甚至CN= function CheckUser{ $use

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

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

有人能帮忙吗

我尝试了
-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数据。
Get ADUser
默认返回属性
SamAccountName
,以及
DiscrimitedName
启用的
给定名称
名称
对象类
对象GUID
SID
姓氏
UserPrincipalName

cmdlet的
-Identity
参数可以采用以下条目:

  • 区分名称
  • 指南
  • 希德
  • 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'"


希望这有帮助

谢谢大家的帮助

在尝试了所有人的建议后,我改变了脚本的原始形式,在上下文中,现在可以使用了

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以进行远程配置文件删除。

您已经掌握了哪些信息?你的代码说你已经有了SamAccountName。。。然后你说你想要SamAccountName。。。我非常非常困惑![blush]尝试:
$Samaccountname=$User |选择-展开Samaccountname
或只:
$Samaccountname=$User.Samaccountname
,因此您只需将
$User=..
交换到
=$用户
。。恐怕这是完全错误的。你真的测试过这个吗?
function CheckUser{
    Get-ADUser -LDAPFilter ("samaccountname=$user") = $user
    If ($user  -eq $Null) 
    {"User does not exist in AD";GetUserName}
    Else {GetMenu}
}