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) 收藏
整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...
随机推荐
- Android stdio打开特定网页
博主懒不想打字,直接上程序 package com.example.testopen; import android.app.Activity; import android.os.Bundle; ...
- javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)
Servlet总结01——servlet的主要接口.类 (一)servlet类 Servlet主要类.接口的结构如下图所示: 要编写一个Servlet需要实现javax.servlet.Servlet ...
- Zepto源码分析-zepto模块
源码 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT lic ...
- bug 修复:上传库存时前端回发file_name参数丢失;
# tmp_file = os.path.join(os.path.abspath('youcart/tmp'), json.loads(request.data).get('file_name')) ...
- Python教程(1.2)——Python交互模式
上一节已经说过,安装完Python,在命令行输入"python"之后,如果成功,会得到类似于下面的窗口: 可以看到,结尾有3个>符号(>>>).>&g ...
- QUICK-AP + BETTERCAP 替换局域网内其他用户的下载文件为自定义文件
环境需求 :kali系统 , .0版本 :quick-ap :bettercap :bettercap-proxy-modules :...... 主要环境搭建 目的:替换局域网用户的下载文件,变为我 ...
- TreeSet集合排序方式二:定制排序Comparator
Comparator有两种实现方式: 1,匿名内部类 2,创建一个类用于实现Comparator,该类创建的对象就是比较器 Person类 public class Person implements ...
- SQL数据库的多表查询
多表查询分为 内.外连接 外连接分为左连接(left join 或left outer join).右连接(right join 或者 right outer join).和完整外部连接 (full ...
- 框架和css基础
框架:一.框架集:1.<frameset></frameset>不能有<body>标签 属性:1)cols:把网页拆分成几列(左右拆分)eg:<framese ...
- java基础(三章)
java基础(三章) 一.基本if结构 1.流程图 l 输入输出 l 判断和分支 l 流程线 1.1 简单的if条件判断 if(表达式){ //表 ...