Active Directory路径中的字符串变量不起作用

时间:2015-12-15 00:07:23

标签: powershell active-directory

我正在编写PowerShell脚本来创建新的Active Directory组并自动将其放入正确的OU中,具体取决于用户所在的部门。该脚本从Active Directory中的用户获取部门,然后需要将其用作活动目录中OU的名称。当我不在AD路径中使用该变量时,此脚本可以正常工作。

[string]$department = Get-ADUser -identity johndoe -properties department | Select department

New-ADGroup -Name NewADGroup -GroupScope Global -path “OU=($department),OU=SubDepartment,OU=MainDepartment,DC=OrgName”

但是,当我尝试使用上面的变量$ department时,我收到以下错误:

New-ADGroup : The object name has bad syntax
At C:\Users\JohnDoe\Desktop\CreateNewGroup.ps1:7 char:1
+ New-ADGroup -Name NewADGroup -GroupScope Global -path
"OU=($department ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo          : NotSpecified: (CN=NewADGroup,DC=OrgName
   :String) [New-ADGroup], ADException
  + FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirec
   tory.Management.Commands.NewADGroup

如何在Active Directory路径中调用该变量?

2 个答案:

答案 0 :(得分:4)

你实际上有2个问题,这是常见的陷阱。

  1. $department本身不是字符串,而是具有deparment属性的对象的字符串表示形式。你需要打破这个字符串。这就是-ExpandProperty的用途。如果您现在查看了department,就会看到类似@{Department="IT"}

  2. 的内容
  3. 您在字符串中存在变量扩展问题。

  4.  
    [string]$department = Get-ADUser -identity johndoe -properties department | Select -Expandproperty department
    
    New-ADGroup -Name NewADGroup -GroupScope Global -path "OU=$department,OU=SubDepartment,OU=MainDepartment,DC=OrgName"
    

    如果您没有调用属性或复杂对象,则删除括号就足够了。否则,您只能使用子表达式"OU=$($department),OU=SubDepartment,OU=MainDepartment,DC=OrgName"。没有$符号,括号被认为是字符串的一部分。

答案 1 :(得分:2)

在左括号前面尝试一个美元符号,如下所示: "OU=$($department)..."