扩展属性无法解析,Powershell

时间:2017-12-06 17:26:52

标签: powershell variables active-directory escaping

我正在尝试设置一个方法,用户可以在其中告诉我用户名,我将其插入并且它将返回我的计算机名称。

//获取用户名

$username = Read-Host -prompt 'Username'

//获取DistinguishedName并存储

$usernameDN = Get-ADUser $username -properties * | SELECT DistinguishedName

//获取ComputerName
//每次都失败

Get-ADComputer -Filter {ManagedBy -eq $usernameDN} -properties * | SELECT CN,ManagedBy

//我收到的错误......几乎就像它必须是一个字符串

  

Get-ADComputer:无效值:''为扩展属性指定:   '的ManagedBy&#39 ;.在行:1个字符:1   + Get-ADComputer -Filter {ManagedBy -eq $ usernamedn} -properties * | SE ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~       + 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=**

所以我认为我的问题是Filter要求它是字符串,但是我无法找出正确的转义以使变量以这种方式读取。

我也尝试过字符串格式化,但我还没有完全理解

谢谢,

2 个答案:

答案 0 :(得分:0)

我建议使用Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("A1:C10") If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=holdCodes" .ShowInput = True .ShowError = True End With End If End Sub 代替-LDAPFilter并使用LDAP过滤字符串:

-Filter

值得您学习LDAP search filter syntax,因为这就是PowerShell必须“翻译”Get-ADUser -LDAPFilter "(managedBy=$usernameDN)"

答案 1 :(得分:0)

这只是一个表达问题,您的示例对我来说很好。您只是在{}中缺少了()。

Get-ADComputer -Filter {(ManagedBy -eq $usernameDN)} -properties * | SELECT CN,ManagedBy