将匹配特定日期的文件从服务器/文件夹阵列移动到本地文件夹(Powershell)

问题描述 投票:0回答:1

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

[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个回答
0
投票

虽然我无法完全测试它,但是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

    }
}

© www.soinside.com 2019 - 2024. All rights reserved.