Перемещение файлов, соответствующих определенной дате, из массива серверов / папок в локальную папку (Powershell)

Я пытаюсь скопировать все файлы из массива производственных серверов, которые соответствуют определенной дате, введенной пользователем (при необходимости, для подготовки к откату) ... вот что я пробовал:

[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 соответствует критериям ... в худшем случае ничего не делает.


person Phydeaux86    schedule 17.01.2020    source источник


Ответы (1)


Хотя я не смог полностью протестировать это, казалось, что цикл for-each делает это за меня. Параметр -Recurse для Copy-Item, похоже, является решением, наряду с некоторыми другими изменениями логики и синтаксиса. Сообщите мне, если это решит вашу проблему.

[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

    }
}

person LogRhythm    schedule 17.01.2020