我正在尝试从与特定用户输入日期相匹配的生产服务器阵列中复制所有文件(以在必要时进行回滚准备...这是我尝试过的事情:
[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符合条件...最坏的情况它什么也不做。
虽然我无法完全测试它,但是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
}
}