我正在编写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路径中调用该变量?
答案 0 :(得分:4)
你实际上有2个问题,这是常见的陷阱。
$department
本身不是字符串,而是具有deparment属性的对象的字符串表示形式。你需要打破这个字符串。这就是-ExpandProperty
的用途。如果您现在查看了department
,就会看到类似@{Department="IT"}
您在字符串中存在变量扩展问题。
[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)..."