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) 收藏
整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...
随机推荐
- javaWeb学习总结(8)- JSP中的九个内置对象(4)
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- Java IO流学习总结(1)
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
- .Net Core应用搭建的分布式邮件系统设计
本篇分享的是由NetCore搭建的分布式邮件系统,主要采用NetCore的Api和控制台应用程序,由于此系统属于公司的所以这里只能分享设计图和一些单纯不设计业务的类或方法: 为什么要在公司中首例采用N ...
- 浅析Web缓存
在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度.其中提高网页反应速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并 ...
- Ultimus BPM 金融与证券行业应用解决方案
Ultimus BPM 金融与证券行业应用解决方案 行业应用需求 金融服务业的整合与全球化发展,带来高度竞争的国际市场,所牵涉的产业包括了商业.贷款.投资银行,以及保险公司和许多其它为企业和消费者提供 ...
- 在wamp下使用netbeans开启Xdbug
1.到http://www.xdebug.org 下载与PHP对应的xdebug版本,也可以把phpinfo源码粘贴到http://www.xdebug.org/find-binary.php,提交后 ...
- [原创]安全系列之端口敲门服务(Port Knocking for Ubuntu 14.04 Server)
Port Knocking for Ubuntu 14.04 Server OS:ubuntu 14.04 server 原理简单分析: 端口敲门服务,即:knockd服务.该服务通过动态的添加ipt ...
- 关于图的顶点染色问题的各种算法的C++实现之初探(一)——引言与简介
我是一个数学工作者,专业方向是图论.研究图论已经十年有余.一个月前,一个偶然的机会让我萌生了一个念头,那就是我想尝试用C++写出我所学过的图论方面的算法.作为一个数学工作者,过去一直是纸上谈兵,我之前 ...
- 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...
- 正则表达式入门案例C#
---恢复内容开始--- 在网上百度了好多关于正则表达式的,不过好多都是关于语法的,没有一个具体的案例,有点让人难以入门,毕竟我还是喜欢由具体到抽象的认识.所以我就在这先提供了一个入门小案例(学了了6 ...