none
Distribuir arquivos na para computadores da rede - Script RRS feed

  • Pergunta

  • Ola amigos novamente tenho o seguinte desafio e conto com a ajuda de todos:

    Cenario 720 maquinas onde tenho que copiar um unico arquivo de um servidor para todas estas maquinas, poderia colocar um script em uma GPO porém nem todas as maquina logam no DOMINIO.

    Pensei em um script que copie por range de IP ou seja se a maquina responder a um ping por exemplo copia é efetuada.

    Alguem conhece algum metodo que eu possa efetuar esta copia via script?

    Na minha GPO para as maquinas que logam no Dominio utilizo o seguinte script.

    copy /n \\server\netlogon\arquivo.exe C:\Windows\system32\arquivo.exe
    exit

    Obrigado a todos.

    quinta-feira, 25 de novembro de 2010 21:36

Respostas

  • Olá Alexandre

    Já usou o psexec da SysInternals ? use o seguinte

    psexec @maquinas.txt -u DOMINIO\CONTA-DE-REDE -p SENHA-REDE -c -d -e \\caminho_de_rede_com_ arquivo.exe /a /n

    crie um arquivo txt com os IPs ou nomes dos micros no domínio.

    teste o antes de pô-lo em produção.

     

    Abraço, Nassim



    Relação de Ajuda: Transitive e 2-way, A ajuda B ajuda C, então A ajudou C e C "deve" ajudar A.
    • Marcado como Resposta Alexandre_Costa sábado, 27 de novembro de 2010 10:21
    quinta-feira, 25 de novembro de 2010 23:23
  • Bom dia,

    eu tenho um script pronto que faz quase isso.

    Dim filesys
    Set filesys = CreateObject("Scripting.FileSystemObject") 
    
    Const ForWriting = 2
    Set FileLog = filesys.OpenTextFile("C:\Users\fabiano\Desktop\ScriptLog.txt", ForWriting)
    
    Dim CaminhoNovo
    Dim ip
    CaminhoNovo = "C:\Users\fabiano\Desktop\service.ini"
    
    
    For ip = 13 to 200
    
    	if pinghost("10.1.0." & ip) then	
    
    		filesys.MoveFile "\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.ini","\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.OLD"
    		filesys.CopyFile CaminhoNovo, "\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.ini"
    		FileLog.WriteLine("10.1.0." & ip & Chr(9) & " Arquivo copiado com sucesso.")
    
    	Else
    		FileLog.WriteLine("10.1.0." & ip & Chr(9) & " PC não localizado.")
    
    	End If 
    
    Next
    
    FileLog.Close
    
    MsgBox("Varredura executada.")
    
    
    Function pinghost(host)
    	Set WshShell = WScript.CreateObject("WScript.Shell")
    	Set WshExec = WshShell.Exec("ping -n 3 -w 2000 " & host)
    	strPingResults = LCase(WshExec.StdOut.ReadAll)
    		If InStr(strPingResults, "resposta de") <> 0 Then		
    			pinghost=TRUE
    		Else		
    			pinghost=FALSE
    	End If
    End Function
    
    

    Fabiano
    • Marcado como Resposta Alexandre_Costa sábado, 27 de novembro de 2010 10:21
    sexta-feira, 26 de novembro de 2010 11:38

Todas as Respostas

  • Olá Alexandre

    Já usou o psexec da SysInternals ? use o seguinte

    psexec @maquinas.txt -u DOMINIO\CONTA-DE-REDE -p SENHA-REDE -c -d -e \\caminho_de_rede_com_ arquivo.exe /a /n

    crie um arquivo txt com os IPs ou nomes dos micros no domínio.

    teste o antes de pô-lo em produção.

     

    Abraço, Nassim



    Relação de Ajuda: Transitive e 2-way, A ajuda B ajuda C, então A ajudou C e C "deve" ajudar A.
    • Marcado como Resposta Alexandre_Costa sábado, 27 de novembro de 2010 10:21
    quinta-feira, 25 de novembro de 2010 23:23
  • Bom dia,

    eu tenho um script pronto que faz quase isso.

    Dim filesys
    Set filesys = CreateObject("Scripting.FileSystemObject") 
    
    Const ForWriting = 2
    Set FileLog = filesys.OpenTextFile("C:\Users\fabiano\Desktop\ScriptLog.txt", ForWriting)
    
    Dim CaminhoNovo
    Dim ip
    CaminhoNovo = "C:\Users\fabiano\Desktop\service.ini"
    
    
    For ip = 13 to 200
    
    	if pinghost("10.1.0." & ip) then	
    
    		filesys.MoveFile "\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.ini","\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.OLD"
    		filesys.CopyFile CaminhoNovo, "\\10.1.0." & ip & "\c$\Arquivos de programas\OCS Inventory Agent\service.ini"
    		FileLog.WriteLine("10.1.0." & ip & Chr(9) & " Arquivo copiado com sucesso.")
    
    	Else
    		FileLog.WriteLine("10.1.0." & ip & Chr(9) & " PC não localizado.")
    
    	End If 
    
    Next
    
    FileLog.Close
    
    MsgBox("Varredura executada.")
    
    
    Function pinghost(host)
    	Set WshShell = WScript.CreateObject("WScript.Shell")
    	Set WshExec = WshShell.Exec("ping -n 3 -w 2000 " & host)
    	strPingResults = LCase(WshExec.StdOut.ReadAll)
    		If InStr(strPingResults, "resposta de") <> 0 Then		
    			pinghost=TRUE
    		Else		
    			pinghost=FALSE
    	End If
    End Function
    
    

    Fabiano
    • Marcado como Resposta Alexandre_Costa sábado, 27 de novembro de 2010 10:21
    sexta-feira, 26 de novembro de 2010 11:38
  • Grande Nassim muito bom fantastico não consegui parametrizar para ler do .txt mas separei os ips por virgula e rodou numa boa muito obrigado pela prestesa um grande abraço.
    sexta-feira, 26 de novembro de 2010 17:53
  • Amigão belo script vou estuda-lo, preciso aprender esta arte um grande abraço obrigado pela ajuda.
    sexta-feira, 26 de novembro de 2010 18:21
  • Olá Alexandre

    Já usou o psexec da SysInternals ? use o seguinte

    psexec @maquinas.txt -u DOMINIO\CONTA-DE-REDE -p SENHA-REDE -c -d -e \\caminho_de_rede_com_ arquivo.exe /a /n

    crie um arquivo txt com os IPs ou nomes dos micros no domínio.

    teste o antes de pô-lo em produção.

     

    Abraço, Nassim



    Relação de Ajuda: Transitive e 2-way, A ajuda B ajuda C, então A ajudou C e C "deve" ajudar A.

    Bom dia, estou com a mesma duvida do nosso amigo Alexandre, preciso copiar um arquivo para o C: das maquinas, pois elas estao no dominio e nao conseguem dar \\nomedoservidor, eu entendi o comando psexec so nao entendi onde esta referenciando o C: da maquina do cliente, em relacao ao maquinas.txt voce sabe  o formato que tenho que inserir? obrigado

    terça-feira, 10 de fevereiro de 2015 12:10
  • Através do Powershell é possível fazer esta tarefa. Crie um arquivo chamado C:\ServersList.txt no host onde o arquivo de origem está, insira o nome dos hosts de destino ou o endereço IP (um por linha), salve, copie o código abaixo, salve com o nome de sua preferência .PS1, abra o Windows PowerShell como administrator e execute-o.

    Set-ExecutionPolicy Unrestricted -Force
    $ServersList = Get-Content C:\ServersList.txt
    Foreach ($Server in $ServersList)
    { 
    	if (Test-Connection -Computername $Server -BufferSize 16 -Count 1 -Quiet)
    	{
    		If(Test-Path -Path \\$Server\c$\DestinationFolder)
    		{
    			Copy-Item -Path C:\SourceFileName.txt -Destination \\$Server\c$\DestinationFolder
    			Write-Host "The file C:\FileName.txt was copied to host folder \\$Server\c$\DestinationFolder"
    		}
    		Else
    		{
    			New-Item \\$Server\c$\DestinationFolder -Type Directory
    			Write-Host "The folder \\$Server\c$\DestinationFolder was created."
    			Copy-Item -Path C:\FileName.txt -Destination \\$Server\c$\DestinationFolder
    			Write-Host "The file C:\FileName.txt was copied to host folder \\$Server\c$\DestinationFolder"
    		}
    	}
    	Else
    	{
    		Write-Warning "The host $Server is unreachable or offline!"
    	}
    }

    PS: Teste antes com um ou mais hosts de destino. Leia, entenda o script/cmdlets e faça as adaptações que precisar.
    terça-feira, 10 de fevereiro de 2015 13:12
  • Através do Powershell é possível fazer esta tarefa. Crie um arquivo chamado C:\ServersList.txt no host onde o arquivo de origem está, insira o nome dos hosts de destino ou o endereço IP (um por linha), salve, copie o código abaixo, salve com o nome de sua preferência .PS1, abra o Windows PowerShell como administrator e execute-o.

    Set-ExecutionPolicy Unrestricted -Force
    $ServersList = Get-Content C:\ServersList.txt
    Foreach ($Server in $ServersList)
    { 
    	if (Test-Connection -Computername $Server -BufferSize 16 -Count 1 -Quiet)
    	{
    		If(Test-Path -Path \\$Server\c$\DestinationFolder)
    		{
    			Copy-Item -Path C:\SourceFileName.txt -Destination \\$Server\c$\DestinationFolder
    			Write-Host "The file C:\FileName.txt was copied to host folder \\$Server\c$\DestinationFolder"
    		}
    		Else
    		{
    			New-Item \\$Server\c$\DestinationFolder -Type Directory
    			Write-Host "The folder \\$Server\c$\DestinationFolder was created."
    			Copy-Item -Path C:\FileName.txt -Destination \\$Server\c$\DestinationFolder
    			Write-Host "The file C:\FileName.txt was copied to host folder \\$Server\c$\DestinationFolder"
    		}
    	}
    	Else
    	{
    		Write-Warning "The host $Server is unreachable or offline!"
    	}
    }

    PS: Teste antes com um ou mais hosts de destino. Leia, entenda o script/cmdlets e faça as adaptações que precisar.

    Muito obrigado amigo, deu super certo! E é bem rápido o Script!!! 

    Abraços,

    terça-feira, 18 de outubro de 2016 11:34
  • ótimo script
    quarta-feira, 22 de março de 2017 16:22
  • Podemos conversar.
    Gostaria de fazer unas perguntas.
    Me passa seu SKYPE ou Discord ou ate mesmo whatsApp.
    Me mande um e-mail marcosegito35@gmail.com
    terça-feira, 3 de dezembro de 2019 23:00