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) 收藏
整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...
随机推荐
- 深度解析PHP数组函数array_slice
看到array_slice()这个函数让我想起了VFP中的range这个范围取值的子句 这个函数一共有四个参数: 被取值的数组(必需) 取值的起始位置(必需) 取值的终止位置,如果不填写默认到数组最后 ...
- Win95+IE3 – Win10+IE11全版本执行漏洞(含POC)
微软本月安全更新修复了一个潜藏了18年的IE远程代码执行漏洞(CVE-2014-6332),可以说是给windows吃了一颗大补丸.缺陷出现在VBScript的代码中,自Windows 95首次发布( ...
- 【2017-06-02】Jquery基础
Jquery就是Js集成的一些方法包. 注意:Jquery的引入位置在<head></head>里. 一.选择器 1.Id选择器 $("#div1") 2. ...
- 一天搞定CSS---终篇CSS总结
虽然说是一天搞定CSS,实际上也没有那么简单.只能说让你快速了解常见的CSS知识,解决基本的页面样式布局和设置. 每个独立的CSS知识点都比较简单,但是它们的应用非常灵活,特别是在综合应用中. 粗略说 ...
- python中文字符串编码问题
接口测试的时候,发现接口返回内容是uncodie类型但是包含中文.在使用print进行打印时输出提示错误: UnicodeEncodeError: 'ascii' codec can't encode ...
- 多线程异步编程示例和实践-Task
上篇博文中,我们介绍了Thread和ThreadPool: 多线程异步编程示例和实践-Thread和ThreadPool 本文中我们继续,说一下TPL(Task Parallel Library, 简 ...
- 为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?
首先介绍一下dojo的特性: 1.Dojo是一个符合AMD规范的企业级框架(dojo是一个重量级框架) 2.Dojo全面支持异步加载JS机制(即:支持通过require异步加载JS模块,通过defin ...
- 定期清空log文件
# auto-del-log.sh #!/bin/shfor i in `find . -name "*.out" -o -name "*.log"`do c ...
- vue-cli创建自己的项目
vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一. ...
- Nginx——在Windows环境下安装
下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...