Я полный новичок, когда дело доходит до powershell, но мне дали скрипт, который мне нужно улучшить, чтобы мы могли перемещать обновленные или новые файлы с одного сервера на другой. Мне удалось разобраться с текущим скриптом, но я изо всех сил пытаюсь найти правильные командлеты и параметры для достижения желаемого поведения.
Сценарий, который у меня есть, успешно обнаруживает измененные файлы и перемещает их в место, готовое для передачи на другой сервер, но не обнаруживает новые файлы.
Может ли кто-нибудь дать мне некоторые рекомендации относительно того, как я смогу добиться обоих вариантов поведения?
$CurrentLocation = "C:\current"
$PreviousLocation = "C:\prev"
$DeltaLocation = "C:\delta"
$source = @{}
#
# Get the Current Location file information
#
Get-ChildItem -recurse $CurrentLocation | Foreach-Object {
if ($_.PSIsContainer) { return }
$source.Add($_.FullName.Replace($CurrentLocation, ""), $_.LastWriteTime.ToString())
}
Write-Host "Content of Source"
$source
$changesDelta = @{}
$changesPrevious = @{}
#
# Get the Previous Directory contents and compare the dates against the Current Directory contents
#
Get-ChildItem -recurse $PreviousLocation | Foreach-Object {
if ($_.PSIsContainer) { return }
$File = $_.FullName.Replace($PreviousLocation, "")
if ($source.ContainsKey($File)) {
if ($source.Get_Item($File) -ne $_.LastWriteTime.ToString()) {
$changesDelta.Add($CurrentLocation+$File, $DeltaLocation+$File)
$changesPrevious.Add($CurrentLocation+$File, $PreviousLocation+$File)
}
}
}
Write-Host "Content of changesDelta:"
$changesDelta
Write-Host "Content of changesPrevious:"
$changesPrevious
#
# Copy the files into a temporary directory
#
foreach ($key in $changesDelta.Keys) {
New-Item -ItemType File -Path $changesDelta.Get_Item($key) -Force
Copy-Item $key $changesDelta.Get_Item($key) -Force
}
Write-Host $changesDelta.Count "Files copied to" $DeltaLocation
#
# Copy the files into the Previous Location to match the Current Location
#
foreach ($key in $changesPrevious.Keys) {
Copy-Item $key $changesDelta.Get_Item($key) -Force
}
Get-ChildItem -Path
или-LiteralPath
, если вы не хотите, чтобы подстановочные знаки проходили. Кроме того, в вашем предложенииIf ($_
вы должны использоватьContinue
вместоReturn
, чтобы он продолжал обрабатывать остальную часть конвейера. Просто некоторые наблюдения, поскольку я не понимаю вашей конечной цели. Изменился по сравнению с чем? - person Maximilian Burszley   schedule 19.09.2017