【发布时间】:2017-12-06 17:26:51
【问题描述】:
我正在尝试设置一种方法,用户可以在该方法中告诉我用户名,我将其插入,它将返回他们的计算机名。
//获取用户名
$username = Read-Host -prompt 'Username'
//获取DistinguishedName并保存
$usernameDN = Get-ADUser $username -properties * | SELECT DistinguishedName
//获取计算机名
//这个每次都失败
Get-ADComputer -Filter {ManagedBy -eq $usernameDN} -properties * | SELECT CN,ManagedBy
//我收到的错误...几乎就像它必须是一个字符串一样
Get-ADComputer:无效值:''为扩展属性指定: '管理人'。在行:1 字符:1 + Get-ADComputer -Filter {ManagedBy -eq $usernamedn} -properties * |东南... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ADComputer], ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Comm ands.GetADComputer
//所以你把它写成字符串
PS C:\WINDOWS\system32> Get-ADComputer -Filter {ManagedBy -eq '$usernamedn'} -properties * | SELECT CN,ManagedBy
//错误
Get-ADComputer:扩展属性中提供的身份信息: 'ManagedBy' 无法解决。原因:'找不到对象 身份:'$usernamedn' 下:'DC=****,DC=*****'.'。在行:1 字符:1 + Get-ADComputer -Filter {ManagedBy -eq '$usernamedn'} -properties * | ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Get-ADComputer], ADIdentityResolutionException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityResolutionException ,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
//但是,如果您将变量替换为文字 DistinguishedName...它将起作用
PS C:\WINDOWS\system32> Get-ADComputer -Filter {ManagedBy -eq 'CN=*******\, ***** *.,OU=********,OU=*****,OU=******,DC=*****,DC=******'} -properties * | SELECT CN,ManagedBy
//结果
CN ManagedBy
-- ---------
********* CN=**\, ** *.,OU=***,OU=***,OU=***,DC=***,DC=**
********* CN=**\, ** *.,OU=***,OU=***,OU=***,DC=***,DC=**
所以我认为我的问题是过滤器要求它是字符串,但我无法找出正确的转义来使变量以这种方式读取。
我也尝试过格式化字符串,但我还没有完全理解
谢谢,
【问题讨论】:
标签: powershell variables active-directory escaping