Это похоже на ошибку / недосмотр в командлете Compress-Archive
.Поскольку командлет не предоставляет параметра «включить скрытые файлы», но принимает коллекцию исходных файлов с помощью параметров -Path
или -LiteralPath
, я бы ожидал, что это будет ...
Compress-Archive -Path (
Get-ChildItem -Path '...' -Force `
| Select-Object -ExpandProperty 'FullName' `
) -DestinationPath '...'
...или это ...
Get-ChildItem -Path '...' -Force | Compress-Archive -DestinationPath '...'
... чтобы работать как способ передачи скрытых файлов в командлет;ключ указывает параметр -Force
для Get-ChildItem
.Однако оба этих вызова выдают эти ошибки ...
Get-Item : Could not find item ....
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:814 char:63
+ ... Entry.LastWriteTime = (Get-Item -LiteralPath $currentFilePath).LastWr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (...:String) [Get-Item], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetItemCommand
Exception setting "LastWriteTime": "Cannot convert null to type "System.DateTimeOffset"."
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:814 char:25
+ ... $currentArchiveEntry.LastWriteTime = (Get-Item -LiteralPa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
... для первого скрытого файла в списке ввода.(Обратите внимание, что при вызове первого фрагмента без Select-Object -ExpandProperty 'FullName'
вместо этого выдается Compress-Archive : The path '...' either does not exist or is not a valid file system path.
.)
В моей системе ссылочные строки 812-814 из Microsoft.PowerShell.Archive.psm1
являются ...
# Updating the File Creation time so that the same timestamp would be retained after expanding the compressed file.
# At this point we are sure that Get-ChildItem would succeed.
$currentArchiveEntry.LastWriteTime = (Get-Item -LiteralPath $currentFilePath).LastWriteTime
Итак, даже если мы передадим -Force
в Get-ChildItem
, чтобы получить пути к скрытым файловым объектам для передачи в Compress-Archive
, внутренний командлет снова извлекает эти файловые объекты, используя Get-Item
...но это не проходит -Force
, что, конечно, не удастся (несмотря на то, что говорится в комментарии к предыдущей строке).Таким образом, я не думаю, что есть какой-либо способ заставить Compress-Archive
работать со скрытыми файлами без редактирования сценария вами или Microsoft.