我正在尝试创建一个脚本,用于通过网络远程删除本地配置文件。
我正在使用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数据。
答案 0 :(得分:0)
Get-ADUser
默认返回属性SamAccountName
,以及DistinguishedName
,Enabled
,GivenName
,Name
,ObjectClass
,ObjectGUID
,SID
,Surname
和UserPrincipalName
。
Get-ADUser cmdlet的-Identity
参数可以接受以下条目:
并且,如果您的问题表明您已经有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,以进行远程配置文件删除。