POWERSHELL将域中的计算机移动到指定OU
POWERSHELL处理域中计算机的过程
由于集团公司规模较大,存在几个分公司并处在不同地理位置。采用域集中管理,各分公司都有自己的域控制器,分别负责各分公司的DNS解析,DHCP地址分配,及客户端登录。
现在有这样一个需求:
将各分公司计算机按操作系统类型归类存放到指定OU中,以便于部署域策略。
在没有SCCM的情况下,听说POWERSHELL可以做到,于是就试了一下,觉得可行。并将操作思路和执行过程记录下来。
1. 通过各分公司的DHCP服务器导出各网段中的所有计算机输出到EXCEL中处理只保留计算机名即可。

导出列表以后是TXT文件格式,至于导入到EXCEL当中如何分列这里就不讲了。

2. 导出域中所有的计算机名和操作系统类型
a) 以管理员运行POWERSHELL,并导入域模块
PS C:\Windows\system32> Import-Module activedirectory
b) 运行如下代码:
PS C:\Windows\system32> Get-ADComputer -filter * -properties name,operatingsystem | FT name,operatingsystem >d:\allpc.txt
命令说明:
Get-ADComputer 获取域中的计算机
-filter 过滤参数,*表示域中所有计算机,如果要在指定OU中查找可以将*改成 “ou=xxx,ou=xxx,dc=xxx,dc=com”
-properties 属性过滤或显示,
Name 表示计算机名
OperatingSystem 表示操作系统的类型
FT 表示输出格式
最后就是重定向到一个文件,经过以上2步就把域中所有的计算机名和对应的操作系统类型输出到了TXT文件中,接着再导入到EXCEL。
3. 用EXCEL将从DHCP导出的计算机名和从域中导出的计算机作比较,找出所有操作系统类型是xp或win7,win8的计算机,这样就很容易得出属于各分公司的各类型的计算机名,将它们分别保存为xp.txt,win7.txt,win8.txt。
4. 使用POWERSHELL脚本读取TXT文件 并将文件中的计算机移动到相应的OU
脚本如下:
$a = Get-Content D:\citrix_Ctrl_test.txt #存放计算机名的文本文件
foreach($i in $a)
{
dsquery computer -name $i | dsmove -newparent "OU=citrix_other,OU=Servers,OU=Citrix,DC=cicdev,DC=com" #将计算机名移动到citrix_other OU下
}
5. Powershell默认情况下不允许任何脚本执行(安全考虑)可以通过如下修改:
PS C:\Windows\system32> Set-ExecutionPolicy UnRestricted
执行策略更改
执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies
帮助主题中所述的安全风险。是否要更改执行策略?
[Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y
PS C:\Windows\system32>
6. 执行脚本
D:\ps> .\mpc_to_ou.ps1
7. 刷新一下域目录就可以看到相应的计算机都被移动到了新的OU当中
网上还有一个脚本在此转载过来供参考
#//*************************************************************
#//编辑人:
#//编辑单位:
#//编辑作用:移动计算机到对应的OU下
#//编制时间:2016.01.05
#//*************************************************************
#************获取当前脚本执行的目录
$Location = $PSScriptRoot
#**********************创建以yyyy-MM-dd的日志文件夹
$folderName ="Log"
#*********************全路径
$folderPath = $Location + "\" + $folderName
#*********************如果根文件夹不存在。则创建根文件夹
If((Test-Path $folderPath) -eq $False) {
Write-Host "开始创建日志文件夹...---------------" -ForegroundColor Green
New-Item -path $Location -name $folderName -itemType "directory"
Write-Host "创建日志文件夹完毕...---------------" -ForegroundColor Green
}
#**************************创建一个日志文件yyyy-MM-dd.txt
$DateTimeNow = Get-Date -Format 'yyyy-MM-dd'
$logFileName = $DateTimeNow.ToString() +".txt"
#**************************创建日志文件
$logFilePath = $folderPath + "\" + $logFileName;
If((Test-Path $logFilePath) -eq $False) {
Write-Host "开始创建日志文件...---------------" -ForegroundColor Green
New-Item -path $folderPath -name $logFileName -itemType "File"
Write-Host "创建日志文件完毕...---------------" -ForegroundColor Green
}
#**************导入AD的PowerShell执行模块
Import-Module ActiveDirectory
#**************读取计算机文件TXT(格式一行一个)
$computerObjects = Get-Content d:\ps\zj_xp.txt
#*************要移动的计算机到目标的所在的OU
$TargetOUPath = "OU=xp_zj,OU=Remote Desktop Users,DC=sh-real,DC=com"
#*************得到服务名称
$serverName = $env:COMPUTERNAME
#*************开始循环读取的计算机文件
Add-Content -Path $logFilePath -Value "******************************************开始执行PowerShell移动操作**************************************************"
#******************循环
ForEach($computerObject in $computerObjects)
{
#****************打印信息
$PrintStart = "正在移动计算机【" + $computerObject +"】操作!"
Write-Host $PrintStart -ForegroundColor Green
#***************开始分析执行
try
{
#********************得到源的OU
$SrcOUPath = Get-ADComputer $computerObject |select DistinguishedName -ExpandProperty DistinguishedName
#********************打印出信息
$PrintOk = "正在把计算机:【" + $computerObject + "】从原有OU:【" + $SrcOUPath + "】移动到目标OU:【" + $TargetOUPath +"】下"
Write-Host $PrintOk -ForegroundColor Green
#**********************得到要移动的计算机GUID,并移动到对应的OU下
Get-ADComputer $computerObject | Move-ADObject -TargetPath $TargetOUPath
#**********************记录移动的正确日志信息】
$logConent = (Get-Date).DateTime.ToString() +"成功:在计算机名为:【" + $serverName +"】电脑上,把AD里的计算机【" + $computerObject+ "】从原有OU:【"+ $SrcOUPath +"】成功移动到目标OU下:【" + $TargetOUPath +"】下"
#*********************写入日志
Add-Content -Path $logFilePath -Value $logConent
}
catch
{
#*************************打印错误信息
$PrintError = "移动的计算机【" + $computerObject +"】在AD不存在,请联系AD管理员核对!"
Write-Host $PrintError -ForegroundColor Red
#************************记录错误日志信息
$FailContent = (Get-Date).DateTime.ToString() +"失败:在计算机名为:【" + $serverName +"】电脑上进行获取操作,在AD中无法获取到计算机【"+ $computerObject +"】的信息,请与AD管理员联系!"
#************************写入失败日志
Add-Content -Path $logFilePath -Value $FailContent
}
}
#****************************************执行完毕
Add-Content -Path $logFilePath -Value "******************************************执行PowerShell移动操作完毕**************************************************"
POWERSHELL将域中的计算机移动到指定OU的更多相关文章
- powershell 统计AD中所有计算机及对应的操作系统信息
要想用powershell管理域,首先先加载activedirectory模块 PS C:\> import-module activedirectory 下面就可以利用get-adcomput ...
- 加入域的计算机重定向到指定的OU
在我曾经呆过一个企业里,我们使用的是AD环境,计算机加入域时,我们需要使用一个单独的加域工具,里面有需要将计算机加入到指定OU的选项.所以每次加域我们都需要找个这个工具,实现加域过程.最后我发现其实最 ...
- 使用PowerShell 修改DNS并加入域中
运行环境:Windows Server 2012 R2 此powershell脚本为自动修改本机DNS并加入到域中 但有的时候会提示[本地计算机当前不是域的一部分.请重新执行脚本!]错误,如遇到该错误 ...
- PowerShell工作流学习-4-工作流中重启计算机
关键点: a)工作流中重新启动计算机,请使用Restart-Computer的Wait参数,Wait参数不仅适用于本地计算机,也适用于远程计算机. b)重启运行工作流的计算机,手工恢复请使用Resum ...
- C#获取AD域中计算机和用户的信息
如果你的计算机加入了某个AD域,则可以获取该域中所有的计算机和用户的信息. 所用程序集,需要.Net Framework 4. 添加程序集引用 System.DirectoryServices.Acc ...
- 域内信息收集 powershell收集域内信息
POwershell收集域内信息 Powershell(你可以看做CMD的升级版 但是和cmd完全不一样) 原来的powershe是不能执行任何脚本的 更改执行策略 这个是一个绕过的脚本 接下来我们了 ...
- 如何将域中的AD数据导入SharePoint
转:http://www.cnblogs.com/wallis0922/archive/2010/09/29/1838292.html 最近刚装好sharepoint2010,想要研究一下,第一件想做 ...
- 获取AD域中SYSVOL和组策略首选项中的密码
这种方法是最简单的,因为不需要特殊的“黑客”工具.所有的攻击必须做的是打开Windows资源管理器,并搜索域名为SYSVOL DFS共享的XML文件.在大多数情况下,以下XML文件将包含凭据:grou ...
- windows server 2008 R2域中的DC部署 分类: AD域 Windows服务 2015-06-06 21:09 68人阅读 评论(0) 收藏
整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...
随机推荐
- SharePoint 无法删除搜索服务应用程序
在SharePoint的使用中,经常会遇到某些服务创建失败,某些服务删除不成功的情况.这里,我们就遇到了搜索服务创建失败,然后删除也不成功,使用管理中心的UI无法删除,PowerShell命令也无法删 ...
- hadoop2.7.2单机与伪分布式安装
环境相关 系统:CentOS 6.8 64位 jdk:1.7.0_79 hadoop:hadoop 2.7.2 安装java环境 详见:linux中搭建java开发环境 创建hadoop用户 # 以r ...
- 刨根究底字符编码之八——Unicode编码方案概述
Unicode编码方案概述 1. 前面讲过,随着计算机发展到世界各地,于是各个国家和地区各自为政,搞出了很多既兼容ASCII但又互相不兼容的各种编码方案.这样一来同一个二进制编码就有可能被解释成不 ...
- MysqlRouter 实现mysql5.6读写分离
下载,安装 [root@localhost src]# cd /usr/local/src/ [root@localhost src]# wget http://dev.mysql.com/get ...
- Python教程(1.1)——配置Python环境
在正式开始学习Python之前我们需要先配置好Python环境. Python Python可以从Python官方网站上,选择适合你的操作系统的版本下载.下载完之后,运行下载的可执行文件进行安装. 这 ...
- HashMap集合
HashMap集合特点(用法与特点类似于HashSet集合): 1.无序,不允许重复(无序指元素顺序与添加顺序不一致): 2.底层数据结构是哈希表 3.HashMap内部对"键"用 ...
- TreeSet集合排序方式二:定制排序Comparator
Comparator有两种实现方式: 1,匿名内部类 2,创建一个类用于实现Comparator,该类创建的对象就是比较器 Person类 public class Person implements ...
- 推荐五款Android 应用的自动化测试工具
如今自动化测试已经应用到每天的测试中.这不足为奇,因为自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏. 自动化测试工具选择很多.一些是开源的,一些非常贵.一些自动化工具是几 ...
- SQL中创建外键约束
alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)
- Linux 进程,线程 -- (未完)
系统调用 Linux 将系内核的功能接口制作成系统调用, Linux 有 200 多个系统调用, 系统调用是操作系统的最小功能单元. 一个操作系统,以及基于操作系统的应用,都不能实现超越系统调用的功能 ...