Procurando por um script powershell que pode puxar um arquivo de um conjunto de PCs e FTP

1

Eu estou olhando para escrever um script (de preferência powershell) que essencialmente copiará um arquivo de um monte de PC's e FTP para um servidor.

Portanto, a estrutura do ambiente é que temos um arquivo em vários PCs (cerca de 50 ou mais) que precisam ser colocados em um servidor. Às vezes, um dos PCs pode estar desativado para que o script primeiro precise garantir que o PC esteja funcionando (talvez um resultado de ping), então ele precisaria entrar em um diretório desse computador, extrair um arquivo dele, renomeie o arquivo, coloque em um diretório de origem e remova o arquivo. A convenção de nomenclatura não importa, mas o carimbo de data / hora seria mais fácil. Idealmente, seria melhor primeiro mover todos os arquivos para um diretório de origem para economizar largura de banda de FTP, mas como os arquivos serão nomeados da mesma forma, os arquivos devem ser renomeados durante o processo de movimentação. Mover não copiar porque o diretório precisa estar vazio para que o arquivo possa ser recriado no dia seguinte. Então, uma vez movido para o diretório de origem, agora todos os arquivos precisam ser FTP'd para um servidor para processamento.

Depois de tudo isso, precisamos saber quais PCs da lista não responderam para que possamos recuperar manualmente o arquivo, para que o script exiba um arquivo (txt é bom) que mostrará quais PCs estavam offline.

Tudo é um domínio e o script será executado em um servidor com credenciais de administrador.

Obrigado!

    
por DangeRuss 07.08.2014 / 19:27

1 resposta

3

Editado:

$down = "C:\Script\log\down-hosts.log"
$nofile = "C:\Script\log\no-file.log"
$computers = Get-Content "C:\Script\list\Computers.txt"
$TargetPath = "\server\directory\directory\"
$SourceFileName = "file_name.csv"
foreach ($computer in $computers) {
  if ( Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue 
{
    $sourcefilePath = "\$computer\c$\UPS CSV Exports\$SourceFileName"
    Write-Host "$computer is up"
    Write-Host "Copying $SourceFilePath ..."
    Try {
      If (Test-Path $SourceFilePath) {
         Move-Item $SourceFilePath "$TargetPath\$computer'_$SourceFileName" -force
      } Else {
        #Throw "$SourceFilePath does not exist"
        Write-Host "$computer file does not exist"
        "$computer $SourceFileName file does not exist" | Out-File $nofile -append
      }
    } Catch {
       Write-Host "Error: $($Error[0].Exception.Message)"
    }
  } Else {
    Write-Host "$computer is down"
    "$computer is down $(get-date)" | Out-File $down -append 
  }
}

Algumas novas explicações:

  • Uso de Test-Connection para testar se o host está ativo (sem ping). - Manteve isso como funcionou bem

  • O uso de New-Item não é necessário.

  • Uso de Move-Item em vez do protocolo FTP.

  • Adicionado novos recursos de log: "$computer $SourceFileName file does not exist" | Out-File $nofile -append , que oferece um segundo log mostrando que o arquivo não existe.

  • Adicionado novo recurso de log: "$computer is down $(get-date)" | Out-File $down -append , que mostra que o computador está inativo, mas também o imprime com uma data / hora.

por 07.08.2014 / 22:33