如何用MYDOMAIN\myuser格式的用户名调用PowerShell的Get-ADUser?
解决
MYDOMAIN\myuser格式调用Get-ADUser的问题 直接用DOMAIN\username格式调用Get-ADUser失败,是因为Get-ADUser的-Identity参数默认优先识别不带域前缀的SAM账户名、用户SID、GUID或UPN,带域前缀的格式在部分环境下会出现解析异常。你可以通过以下两种方式解决:
方法一:拆分域前缀与SAM账户名
通过字符串分割提取纯SAM账户名,这是最可靠的处理方式:
$remoteapps = Get-RDRemoteApp -ConnectionBroker $connectionBroker -CollectionName $collectionName foreach ($app in $remoteapps) { if ($app.FilePath -notlike '*\QBLaunch.exe') { foreach ($userName in $app.UserGroups) { # 按反斜杠分割,仅提取用户名部分(分割后数组的第二个元素) $samAccountName = $userName -split '\\', 2 | Select-Object -Index 1 # 使用纯SAM账户名调用Get-ADUser $user = Get-ADUser -Identity $samAccountName # 此处可添加用户信息处理逻辑 Write-Host "获取到用户:$($user.Name)" } } }
-split '\\', 2中的2限制最多分割成2部分,避免用户名中包含反斜杠的极端情况。
方法二:使用Filter参数指定域和SAM账户名
如果需要结合域信息做精确匹配,可以用-Filter参数实现:
$remoteapps = Get-RDRemoteApp -ConnectionBroker $connectionBroker -CollectionName $collectionName foreach ($app in $remoteapps) { if ($app.FilePath -notlike '*\QBLaunch.exe') { foreach ($userName in $app.UserGroups) { # 拆分域和用户名 $domain, $samAccountName = $userName -split '\\', 2 # 结合域的NetBIOS名过滤用户 $user = Get-ADUser -Filter { SamAccountName -eq $samAccountName -and Domain -eq $domain } # 处理用户信息 if ($user) { Write-Host "匹配到域$domain下的用户:$($user.Name)" } } } }
注意:Get-RDRemoteApp的UserGroups属性可能同时包含用户和组对象,如果需要仅处理用户,可在获取后通过Get-ADObject判断对象类别(objectClass -eq 'user')。
内容的提问来源于stack exchange,提问作者user3720435
相关产品推荐
相关产品推荐

