在PowerShell中 - 如何同时创建父OU和子OU?

时间:2014-05-10 16:52:53

标签: powershell scripting windows-server-2012-r2 powershell-v4.0

我使用的是Windows Server 2012 R2,我是管理员。我的PowerShell版本是4.0。我的域名是DC = testdomene,DC = local。

我想完成以下事项: 1)创建父OU 2)同时创建一些子OU(

我能够在PowerShell中手动执行此操作,但我想使用PowerShell的一个主要好处是以某种方式自动执行此操作。 "帮助New-ADOrganizationalUnit -examples"当涉及到父母和孩子的同时,不要给我任何答案。

创建父OU: New-ADOrganizationalUnit -Name" US" -Path" DC = testdomene,DC = local" -description Parent -ProtectedFromAccidentalDeletion $ false

创建第一个子OU: New-ADOrganizationalUnit -Name" Nevada" -Path" OU = US,DC = testdomene,DC = local" -description Child -ProtectedFromAccidentalDeletion $ false

创建第二个子OU: New-ADOrganizationalUnit -Name" Texas" -Path" OU = US,DC = testdomene,DC = local" -description Child -ProtectedFromAccidentalDeletion $ false

这给了OU OU,带着孩子OU的内华达州和德克萨斯州。我怎么能同时完成这个?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

塔达! :)是的,有办法做到这一点。我不会赞成这个解决方案,因为我得到了我朋友的很多帮助。他真的不喜欢在互联网上被提及,所以现在,我将把他的名字从中删除。

我使用国家,州和城市作为演示,但主要目的是制作一个组织,部门和子部门都在一个脚本中,并且在脚本运行时没有任何输入。首先,我将粘贴文本文件,然后粘贴使其全部工作的脚本。有些名字是挪威语,但在必要的地方,我会翻译其含义。

Textfile(1)演示如下:文本文件的名称是OUStructure.txt

US
US/Florida
US/Florida/Miami
US/Texas
US/Texas/Houston
US/Texas/Dallas
US/Nevada
US/Nevada/Las Vegas
US/Nevada/By1
US/Nevada/By2
US/Nevada/By2/Computers
US/Colorado
US/Colorado/Austin

简短说明:对于town1和town2,By1和By2是挪威语。计算机与城市无关。我只是想看看我是否可以在sub下面制作更多的子OU。

Textfile(2)演示如下:文本文件的名称是OUStructure.txt。我想这就是我在问我的问题时所寻找的。

TechCorp
TechCorp\Production
TechCorp\Management
TechCorp\Sales
TechCorp\IT

脚本文件如下。脚本文件的名称为import_OU_Fra_Fil.ps1

Get-Content OUStructure.txt | Foreach-Object {
  $domene = 'DC=testdomene,DC=local'
  $alleOU = ''
  $ous = (Split-Path $_ -Parent).Split('\')
  [array]::Reverse($ous)
  $ous | Foreach-Object {
    if ($_.Length -eq 0) {
      return
    }
    $alleOU = $alleOU + 'OU=' + $_ + ','
  }
  $alleOU += $domene
  $nyOUNavn = Split-Path $_ -Leaf

  New-ADOrganizationalUnit -Name "$nyOUNavn" -Path "$alleOU" -ProtectedFromAccidentalDeletion $false
}

说明:

作为脚本文件名称的一部分的Fra_Fil是From_File的Norwegian。

DC = testdomene,DC = local是我自己的域名。

alleOU对于AllOU来说是挪威语,意思是所有的OU。

nyOUNavn是NewOUName的挪威语。

这对我有用,我希望它可以帮助那些寻找相同解决方案的人。我刚刚开始使用StackOverflow,所以如果有人觉得需要编辑我的帖子以使其更清晰,请这样做。我把文本文件信息放在代码引号中,因为我无法弄清楚如何分隔行。就个人而言,我从中学到了很多东西。我的问题是,我正在谷歌搜索解决方案,因为我应该谷歌搜索分裂和反向数组的目的。

答案 1 :(得分:1)

在ActiveDirectory模块或Quest ActiveRoles AD Snapin中没有内置支持递归创建。你必须手动完成。

您可以编写自己的函数来检查父项是否存在,或者使用陷阱或try / catch来捕获错误,然后自动创建父项。

答案 2 :(得分:1)

NEW-ADOrganizationalUnit“Nevada”-path“OU = Texas,OU = US,DC = testdomene,DC = local”

只需使用两次OU即可嵌套。

答案 3 :(得分:0)

# change value of domain mane to your domain
$MyDomain = "dc=myRMS,dc=local"

#Connect to your domain container
$connectionString = "LDAP://" + $MyDomain
$objDomain  = [ADSI]$connectionString

Get-Content OUStructure1.txt | Foreach-Object {
  $domain = 'DC=myRMS,DC=local'
  $newOU = ''
  $ous = (Split-Path $_ -Parent).Split('\')
  [array]::Reverse($ous)
  $ous | Foreach-Object {
    if ($_.Length -eq 0) {
      return
    }
    $newOU = $newOU + ',OU=' + $_
  }
  #$newOU += $domain

  $nyOUNavn = Split-Path $_ -Leaf
  $newOU = 'OU=' + $nyOUNavn + $newOU

  #Create new Organizational Unit
  $objOU = $objDomain.Create("organizationalUnit", "$newOU")
  $objOU.SetInfo()
}

这是上面提出的不同版本的代码。我使用过LDAP连接。