首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大容量主机名移动到所需的OU

大容量主机名移动到所需的OU
EN

Stack Overflow用户
提问于 2021-04-14 09:14:17
回答 2查看 273关注 0票数 0

我有一个将主机名移到特定OU的脚本。

gc .\list.txt \ForEach-Object{ Get-ADComputer $_ \ move-adobject -targetpath "“}

在上面的脚本中,实际上有150个主机名,需要移动不同的ou。我们怎么能做到这一点。

举例说明。

代码语言:javascript
运行
复制
masuadfl01  --   move to  masu/branches/laptops
masufgd002  --   move to  masu/branches/desktops
abdufghd001  --  move to  abdu/branches/desktops

就像上面一样,所有的东西都应该自动移动,修正OU。我们如何创建这样的脚本。

如果它是桌面,在数字D出现之前是最后一个。对于笔记本电脑L将是。

EN

Stack Overflow用户

发布于 2021-04-14 10:10:15

与其使用只列出计算机名称的文本文件,我将创建一个带有两列的CSV文件。

第一列具有计算机名称,第二列包含要将计算机移动到的OU的DistinguishedName

代码语言:javascript
运行
复制
"ComputerName","Destination"
"masuadfl01","OU=laptops,OU=branches,OU=masu,DC=Contoso,DC=com"
"masufgd002","OU=desktops,OU=branches,OU=masu,DC=Contoso,DC=com"
"abdufghd001","OU=desktops,OU=branches,OU=abdu,DC=Contoso,DC=com"

那么您的代码可以是这样的:

代码语言:javascript
运行
复制
Import-Csv -Path 'Path\To\The\File.csv' | ForEach-Object {
    Get-ADComputer $_.ComputerName | Move-ADObject -TargetPath $_.Destination
}

编辑

如果计算机名中包含一定的常量策略,则可以利用该策略来确定目标OU,而不必创建CSV文件。

例如:如果所有计算机名都以masu od abdu开头,而这是其中一个子OU的名称,则可以将其作为变量使用。

至于台式机或膝上型电脑,每个名称都有一个ld字符作为最终数字,如果它确实表示它是一台笔记本电脑或一台台式计算机,我们可以使用它来完成OU的未命名名称:

代码语言:javascript
运行
复制
# create a template OU distinguished name string
$targetOU = "OU={0},OU=branches,OU={1},DC=Contoso,DC=com"

Get-Content -Path 'Path\To\The\ComputerNamesFile.txt' | ForEach-Object {
    $subOU = $_.Substring(0,4)
    if ($_ -match '([ld])\d+$') { 
        $type = switch ($matches[1]) {
            'l'  { 'laptops'; break }
            'd'  { 'desktops' }
        }
        $moveTo = $targetOU -f $type, $subOU
        Get-ADComputer $_ | Move-ADObject -TargetPath $moveTo
    }
    else {
        Write-Warning "Cannot determine the computertype for '$_'"
    }
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67088861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档