【问题标题】:Move files matching specific date from array of servers/folders to a local folder (Powershell)将匹配特定日期的文件从服务器/文件夹数组移动到本地文件夹(Powershell)
【发布时间】:2020-01-17 13:19:16
【问题描述】:

我正在尝试从与特定用户输入的日期匹配的生产服务器数组中复制所有文件(以便在必要时准备回滚)...这是我尝试过的:

[string[]]$ProdServerArray = "prdserver1", "prdserver2", "prdserver3"
[string[]]$InterfaceArray = "interfacefolder1", "interfacefolder2", "interfacefolder3", "interfacefolder4", "interfacefolder5"

New-Item -ItemType "directory" -Path "C:\GetFilesResults\$($date.toshortdatestring().replace("/","-"))\$search" -Force
$LocalPath = "C:\GetFilesResults\$($date.toshortdatestring().replace("/","-"))\$search"

do
{
    $date = Read-host "Enter date (MM/DD/YYYY): "
}
while ($date -as [datetime] -isnot [datetime])
$date = $date -as [datetime]
$date

$search = foreach ($ProdServer in $ProdServerArray)
{
    foreach ($Interface in $InterfaceArray)
    {
        '\\{0}\InterfaceFiles\{1}\' -f $ProdServer, $Interface
        Get-ChildItem $search -File -Recurse | Where {$_.LastWriteTime -gt $date.date} | ForEach {
        $actualSource = Split-Path $_.FullName
        $actualDest = Split-Path $_.FullName.Replace($search,$LocalPath)
        robocopy $actualSource $actualDest $_.Name /SEC }
    }
}

我已成功获取所需的文件夹结构 - “\prdserver1\InterfaceFiles\interfacefolder1\”,但无法获取这些文件夹中文件的创建/修改日期并将它们复制到我的本地机器。我已经尝试过 Copy-Item、robocopy、batch 等,但还没有找到一种方法来运行所有这些循环,最好的情况是,如果它运行到一个文件或文件夹中,它似乎会爆炸。 t 符合条件...最坏的情况它什么也不做。

【问题讨论】:

    标签: arrays powershell date copy robocopy


    【解决方案1】:

    虽然我无法完全测试这一点,但 for-each 循环似乎为我做了这件事。 Copy-Item-Recurse 参数似乎是解决方案,以及其他一些逻辑和语法更改。让我知道这是否能解决您的问题。

    [string[]]$ProdServerArray = "prdserver1", "prdserver2", "prdserver3"
    [string[]]$InterfaceArray = "interfacefolder1", "interfacefolder2", "interfacefolder3", "interfacefolder4", "interfacefolder5"
    
    
    $LocalPath = New-Item -ItemType "directory" -Path "C:\GetFilesResults\$($date.toshortdatestring().replace("/","-"))\$search" -Force | select -Property FullName
    
    do
    {
        $date = Read-host "Enter date (MM/DD/YYYY): "
    }
    while ($date -as [datetime] -isnot [datetime])
    [datetime] $date = $date -as [datetime]
    Write-Output $date
    
    
    foreach ($ProdServer in $ProdServerArray)
    {
        foreach ($Interface in $InterfaceArray)
        {
            $search = '\\{0}\InterfaceFiles\{1}\' -f $ProdServer, $Interface
    
              Get-ChildItem $search -File -Recurse | Where {$_.LastWriteTime -gt $date.date} |
              ForEach {
                    $actualSource = Split-Path $_.FullName
                    $actualDest = Split-Path $_.Replace($search,$LocalPath)
                    Copy-Item -Path $actualSource -Destination $actualDest -Recurse
    
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多