none
Trocar nomes da rede 300 maquinas (urgente) RRS feed

  • Pergunta

  •  

    Pessoal,

     

    Estou com o seguinte problema, preciso alterar os nomes de aproximadamente 300 maquinas e o problema eh o seguinte:

     

    os nomes das maquinas estão:

    Exemplo

    Usuario do Rh: SBC-RH1, SBC-RH2 e assim sucessivamente.

     

    O que tenho que fazer:

    Alterar o nome de todas as maquinas e todos os departamentos da empresa para SBC-NOME DO USUARIO

    Exemplo:

    Minha maquina, nome atual SBC-TI2 tem que trocar para SBC-VDOSBC (no caso eh meu usuario de rede)

     

    queria saber se tem algum jeito mais facil do que ir de maquina em maquina anotando o nome antigo e renomear para o nome novo, atravez de scripts.

    Observações:

    Tem 3 maquinas que os nomes não podem ser por nome de usuario pq diversos usuarios utilizam a maquina, Então continuara com o nome antigo.

    Preciso de pegar o nome antigo para deletar no AD e criar os nomes novos.

     

    sexta-feira, 10 de agosto de 2007 18:34

Respostas

  • Só um detalhe: O script não vai funcionar. Até funciona, mas vai deixar todos os computadores com o nome do usuário que executar o script (nesse caso, o admin).

    Alterei somente a parte que vocês capturam o nome do usuário:


    '//---------------RETORNA TODOS OS PCs DO AD. -----------/ /
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://DC=hd,DC=local' Where objectClass='computer'" 
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    exclude = "pc01, pc02, pc03"

    Do Until objRecordSet.EOF

        strComputer = objRecordSet.Fields("Name").Value
        arrComputer = split(objRecordSet.Fields("Name").Value, "-")
        strComputer2 = arrComputer(0) & "-"

        if instr(exclude, strComputer)=0 then

            On Error Resume Next
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            if err=0 then
                Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
                For Each objComputer in colComputers

                tmpArray = split(objComputer.username,"\")
                username = tmpArray(1)
                For Each objComputer in colComputers
                    objComputer.Rename("strComputer2 & Username")
                    Wscript.Echo "Computer Renamed, OLD: " & strComputer & " NEW: " & strComputer2 & Username
                Next
            end if
        end if

        objRecordSet.MoveNext
        err.clear
    Loop


    []s,

    Vinicius Canto
    MVP Windows Server - Admin Frameworks
    Blog sobre scripting e Windows Powershell: http://viniciuscanto.blogspot.com

    terça-feira, 14 de agosto de 2007 11:46
    Moderador
  • //---------------RETORNA TODOS OS PCs DO AD. -----------/ /
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://DC=hd,DC=local' Where objectClass='computer'" 
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    exclude = "pc01, pc02, pc03"

    Do Until objRecordSet.EOF

        strComputer = objRecordSet.Fields("Name").Value
        arrComputer = split(objRecordSet.Fields("Name").Value, "-")
        strComputer2 = arrComputer(0) & "-"

        if instr(exclude, strComputer)=0 then

            On Error Resume Next
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            if err=0 then
                Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
                For Each objComputer in colComputers

                tmpArray = split(objComputer.username,"\")
                Username = tmpArray(1)

                    objComputer.Rename("strComputer2 & Username")
                    Wscript.Echo "Computer Renamed, OLD: " & strComputer & " NEW: " & strComputer2 & Username
                Next
            end if
        end if

        objRecordSet.MoveNext
        err.clear
    Loop


    Corrigido.. tinha 2 For each....

    Testa ao agora.....

    A parte vermelha ali é onde vc muda pra fazer o testa na OU.

    o.0
    sexta-feira, 17 de agosto de 2007 17:03
    Moderador

Todas as Respostas

  •  

    Vinicius, to testando ainda, mas é mais ou menos isso......

    Precisa de uns ajustes, depois eu posto o resto, mas já dá pra ter uma idéia.

     

     

    Code Snippet
    '//---------------RETORNA TODOS OS PCs DO AD. -----------/ /
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://DC=hd,DC=local' Where objectClass='computer'"  
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    exclude = "pc01, pc02, pc03"

    Do Until objRecordSet.EOF

    strComputer = objRecordSet.Fields("Name").Value
    arrComputer = split(objRecordSet.Fields("Name").Value, "-")
    strComputer2 = arrComputer(0) & "-"

    if instr(exclude, strComputer)=0 then


    On Error Resume Next
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    if err=0 then

    Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")

    Set wsNet = CreateObject("WSCript.Network")
    Username = wsNet.Username
    For Each objComputer in colComputers
       objComputer.Rename("strComputer2 & Username")
       Wscript.Echo "Computer Renamed, OLD: " & strComputer & " NEW: " & strComputer2 & Username
    Next
    end if
    end if

        objRecordSet.MoveNext
    err.clear
    Loop

     

     

    o.0

    Post editado.. corrigido script e adicionadas as linhas abaixo....

     

    Vinicius, salve o arquivo como .vbs e substitua a linha em VERDE pelo dn do seu domínio, ex.: casa.com.br, a linha verde será:  dc=casa,dc=com,dc=br .....

    Substitua também a linha em laranja, pelos nome dos pcs que vc não quer alterar o nome.


    Basta roda o script uma vez apenas do seu pc, ele vai alterar o nome de todos os pcs do domínio (que estiverem ligados na hora que vc rodar o script), menos os que estão no exclude.


    Testa e diz ae se foi...

    sexta-feira, 10 de agosto de 2007 21:55
    Moderador
  •  

    E ae Felipe,

     

    Valeu cara, mais so bem leigo nessa parte rss...esse script eu rodo no servidor ou nas estaçoes??

    sábado, 11 de agosto de 2007 18:22
  •  

    Bom soh mais umas duvidas...

    Meu dominio aqui na espresa no caso é CORPORATE, mesmo sendo CORPORATE vai ficar SBC-Nome do Usuario??

    Seria interessante eu fazer um teste com algum setor ou grupo tipo informatica antes de rodar em toda empresa...

     

     

    Valeu pela atenção Filipe...

     

    Abraço

    terça-feira, 14 de agosto de 2007 10:22
  • Só um detalhe: O script não vai funcionar. Até funciona, mas vai deixar todos os computadores com o nome do usuário que executar o script (nesse caso, o admin).

    Alterei somente a parte que vocês capturam o nome do usuário:


    '//---------------RETORNA TODOS OS PCs DO AD. -----------/ /
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://DC=hd,DC=local' Where objectClass='computer'" 
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    exclude = "pc01, pc02, pc03"

    Do Until objRecordSet.EOF

        strComputer = objRecordSet.Fields("Name").Value
        arrComputer = split(objRecordSet.Fields("Name").Value, "-")
        strComputer2 = arrComputer(0) & "-"

        if instr(exclude, strComputer)=0 then

            On Error Resume Next
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            if err=0 then
                Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
                For Each objComputer in colComputers

                tmpArray = split(objComputer.username,"\")
                username = tmpArray(1)
                For Each objComputer in colComputers
                    objComputer.Rename("strComputer2 & Username")
                    Wscript.Echo "Computer Renamed, OLD: " & strComputer & " NEW: " & strComputer2 & Username
                Next
            end if
        end if

        objRecordSet.MoveNext
        err.clear
    Loop


    []s,

    Vinicius Canto
    MVP Windows Server - Admin Frameworks
    Blog sobre scripting e Windows Powershell: http://viniciuscanto.blogspot.com

    terça-feira, 14 de agosto de 2007 11:46
    Moderador

  • Ih caraca... é verdade...

    Nem tinha pensado nisso.... vlw Vinicius =D


    terça-feira, 14 de agosto de 2007 19:34
    Moderador
  •  

    Rsss...

    no que vc nao tinha pensado??na questao do dominio ou na de rodar em um grupo antes de rodar na empresa....

    Vlw vc cara...

    quarta-feira, 15 de agosto de 2007 02:10
  • O script original que ele havia enviado tinha um pequeno erro. A versão mais atual é a que eu mandei. Não testei, mas deve estar certinho, o script é muito bom.

    []s,

    --
    Vinicius Canto <scripterbr_at_gmail_dot_com>
    MVP Windows Server - Admin Frameworks
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Bacharelando em Ciências da Computação - USP

    Blog sobre Scripting e Windows Powershell: http://viniciuscanto.blogspot.com
    quarta-feira, 15 de agosto de 2007 02:40
    Moderador
  • e ae vinicius td blz cara??

    intaum, a minha duvida eh o seguinte, sobre o nome da maquina, vai ficar corporate-nome do usuario ou sbc-nome do usuario, pq o meu dominio na empresa eh CORPORATE...

     

    a outra duvida é sobre a condiçao de rodar esse script apenas para alguns usuarios ou grupo soh para fazer um teste antes de rodar na empresa inteira...pq se naum der certo, vou ter q muda na mao de qualquer jeito....

    Apareceu mais uma duvida rss...

    sobre o AD, esse script ja deleta o computador antigo e cria o outro???

    quarta-feira, 15 de agosto de 2007 02:45

  • HEHE..Eu não tinha reparado que iam ficar todos com o mesmo nome de usuário, normal, de vez em quando dá umas leseiras mesmo...

    Mas vamos às dúvidas...

    O nome do pc vai ficar assim,..... nome atual: sbc-recursos,  novo nome: sbc-nome do usuário logado.
    Ele vai utilizar o nome atual do pc, e alterar só o contúdo depois do hífen   "-" .

    Pra testar só com um grupo, é só vc mudar a linha que tem "cn=my,cn=com"... vc coloca assim para testar na OU OUTeste, por exemplo.....  "ou=OUTeste,cn=CORPORATE,cn=com", e coloca nela os pcs que vc quer testar...

    Sobre o AD, ele não deleta nem cria outro, ele vai renomear o pc.

    o.0
    quarta-feira, 15 de agosto de 2007 19:04
    Moderador
  • Deu um erro na linha 36 carct 34 "variavel de controle de loop "for" invalida"

     

    Não achei essa linha

    "cn=my,cn=com"

    quinta-feira, 16 de agosto de 2007 11:13
  • //---------------RETORNA TODOS OS PCs DO AD. -----------/ /
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "Select Name, Location from 'LDAP://DC=hd,DC=local' Where objectClass='computer'" 
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    exclude = "pc01, pc02, pc03"

    Do Until objRecordSet.EOF

        strComputer = objRecordSet.Fields("Name").Value
        arrComputer = split(objRecordSet.Fields("Name").Value, "-")
        strComputer2 = arrComputer(0) & "-"

        if instr(exclude, strComputer)=0 then

            On Error Resume Next
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            if err=0 then
                Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
                For Each objComputer in colComputers

                tmpArray = split(objComputer.username,"\")
                Username = tmpArray(1)

                    objComputer.Rename("strComputer2 & Username")
                    Wscript.Echo "Computer Renamed, OLD: " & strComputer & " NEW: " & strComputer2 & Username
                Next
            end if
        end if

        objRecordSet.MoveNext
        err.clear
    Loop


    Corrigido.. tinha 2 For each....

    Testa ao agora.....

    A parte vermelha ali é onde vc muda pra fazer o testa na OU.

    o.0
    sexta-feira, 17 de agosto de 2007 17:03
    Moderador
  •  Vinicius Canto - MVP wrote:
    O script original que ele havia enviado tinha um pequeno erro. A versão mais atual é a que eu mandei. Não testei, mas deve estar certinho, o script é muito bom.

    []s,

    --
    Vinicius Canto <scripterbr_at_gmail_dot_com>
    MVP Windows Server - Admin Frameworks
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Bacharelando em Ciências da Computação - USP

    Blog sobre Scripting e Windows Powershell: http://viniciuscanto.blogspot.com

     

    Vinicius blz?

     

    Cara estou passando pelo mesmo dilema. Porém, preciso alterar o nome das máquinas. Como faço para alterar no script a opção de renomear as máquinas?? Por ex: De - PCxxxxx Para: PC001

     

    Valeu!!

    terça-feira, 25 de novembro de 2008 20:42