寻找可以从一组 PC 和 FTP 中提取文件的 powershell 脚本

寻找可以从一组 PC 和 FTP 中提取文件的 powershell 脚本

我正在编写一个脚本(最好是 powershell),它基本上是从一堆 PC 复制一个文件并通过 FTP 将其发送到服务器。

因此,环境的结构是,我们在多台 PC(大约 50 台左右)上有一个文件,需要将其放在服务器上。有时其中一台 PC 可能会关闭,因此脚本首先需要确保 PC 已启动并正在运行(可能是 ping 结果),然后需要进入该 PC 上的目录,从中取出文件,重命名文件,放入源目录,然后删除文件。命名约定并不重要,但日期/时间戳最简单。理想情况下,最好先将所有文件移动到源目录以节省 FTP 带宽,但由于文件将被命名为相同,因此必须在移动过程中重命名文件。移动而不是复制,因为目录需要为空,以便第二天可以重新创建文件。因此,一旦移动到源目录,现在需要将所有文件通过 FTP 发送到服务器进行处理。

完成所有这些后,我们需要知道列表中哪些 PC 没有响应,以便我们可以手动检索文件,因此脚本应该输出一个文件(txt 就可以),显示哪些 PC 处于离线状态。

一切都是一个域,并且脚本将从具有管理员凭证的服务器运行。

谢谢你!

答案1

編輯:

$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 
  }
}

一些新的解释:

  • 使用来Test-Connection测试主机是否启动(无 ping)。- 保留这个,因为它运行良好

  • New-Item没有必要使用。

  • 使用Move-Item代替 FTP 协议。

  • 添加了新的日志功能:"$computer $SourceFileName file does not exist" | Out-File $nofile -append提供第二个日志显示文件不存在。

  • 添加了新的日志功能:"$computer is down $(get-date)" | Out-File $down -append显示计算机已关闭,并标明日期/时间。

相关内容