Я обнаружил, что мне нужно постоянно обновлять метаданные файла / даты, поэтому я поместил свое решение в функцию:
Function SingleItemCopyAttributes
{
[cmdletbinding()]
Param(
[Parameter(Mandatory=$true,Position=0)]
[string]$Source,
[Parameter(Mandatory=$true,Position=1)]
[string]$Dest,
[Parameter(Mandatory=$false,Position=2)]
[system.text.stringbuilder]$ErrorLog=$null
)
$S = Get-Item -LiteralPath $Source
$D = Get-Item -LiteralPath $Dest
Try
{
"CreationTime","LastWriteTime","LastAccessTime" | ForEach { $D.$_ = $S.$_ }
}
Catch
{
If ($ErrorLog -ne $null)
{
$ErrorLog.AppendLine("Error setting attributes for '$Dest' `$S.CreationTime=$($S.CreationTime) `$S.LastWriteTime=$($S.LastWriteTime) `$S.LastAccessTime=$($S.LastAccessTime)") | Out-Null
}
Write-Host "Error setting attributes for '$Dest'"
}
}
РЕДАКТИРОВАТЬ: функция помещается в файл SingleItemCopyAttributes.ps1
, который Я выполняю, чтобы загрузить его в память. Я также могу добавить эту функцию в начало моего скрипта, а затем вызвать ее ниже в l oop, где я сначала копирую элемент, а затем «копирую» атрибуты с помощью функции выше, например:
$SourceDir = #Define Source Dir here
$DestDir = #Define Dest Dir here
#Don't forget to create $DestDir if you need to with
#mkdir $DestDir
gci $SourceDir | % {
$sf = $_.FullName
$df = $_.FullName.Replace($SourceDir,$DestDir)
copy-item $sf $df
SingleItemCopyAttributes $sf $df
}
Если вы хотите скопировать все файлы / папки рекурсивно
Надеюсь, это вам поможет.