2015-12-15 60 views
1

我正在编写一个PowerShell脚本来创建一个新的Active Directory组,并根据用户所在的部门自动将其放入正确的OU中。 Active Directory中的用户,然后需要将其用作活动目录中OU的名称。当我不使用AD路径中的变量时,此脚本可以工作。Active Directory路径中的字符串变量不起作用

[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” 

然而,当我尝试使用变量$部门如上,我得到以下错误:

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路径内部变量?

+4

''($ department)'应该是'$($ department)'或者只是'$ department' –

回答

4

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

  1. $department本身不是一个串但具有百货商店属性的对象的字符串表示。你需要打破字符串。这就是-ExpandProperty的原因。如果您现在看到您的department,您会看到类似@{Department="IT"}

  2. 您也在使用字符串进行可变扩展时遇到问题。

[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"。没有$符号,括号被认为是字符串的一部分。

2

尝试一个美元符号在左括号前面是这样的: "OU=$($department)..."

相关问题