zoukankan      html  css  js  c++  java
  • POWERSHELL将域中的计算机移动到指定OU

    POWERSHELL处理域中计算机的过程

    由于集团公司规模较大,存在几个分公司并处在不同地理位置。采用域集中管理,各分公司都有自己的域控制器,分别负责各分公司的DNS解析,DHCP地址分配,及客户端登录。

     现在有这样一个需求:

     将各分公司计算机按操作系统类型归类存放到指定OU中,以便于部署域策略。

    在没有SCCM的情况下,听说POWERSHELL可以做到,于是就试了一下,觉得可行。并将操作思路和执行过程记录下来。

    1. 通过各分公司的DHCP服务器导出各网段中的所有计算机输出到EXCEL中处理只保留计算机名即可。

     

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

      

    2. 导出域中所有的计算机名和操作系统类型

    a)         以管理员运行POWERSHELL,并导入域模块

    PS C:Windowssystem32> Import-Module activedirectory

    b)        运行如下代码:

     PS C:Windowssystem32> 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:Windowssystem32> Set-ExecutionPolicy UnRestricted

    执行策略更改

    执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies

    帮助主题中所述的安全风险。是否要更改执行策略?

    [Y] 是(Y)  [N] 否(N)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”): y

    PS C:Windowssystem32>

    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:pszj_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移动操作完毕**************************************************"
  • 相关阅读:
    shell 之awk 关联数组高级应用
    Just do it!!!
    windows 环境下搭建django 错误分析总结
    webpy 开发环境搭建问题之Mysql-python安装
    Python 文本处理的应用
    利用python httplib模块 发送Post请求测试web服务是否正常起来!
    Ncurses
    Ncurses-窗口
    使用 curses 函数库管理基于文本的屏幕
    vector的 []
  • 原文地址:https://www.cnblogs.com/mfyang/p/7147757.html
Copyright © 2011-2022 走看看