Move-Item -exclude lançando erro redundante

2

Estou movendo um grupo de arquivos de um diretório e estou usando o modificador -exclude para excluir arquivos com extensão .gpg:

Move-Item -path $encrypted_folder\*.* -EXCLUDE *.gpg -destination $final_dir

E enquanto isso funciona bem movendo cada arquivo não-.gpg, recebo o seguinte erro toda vez que Move-Item encontra um arquivo .gpg:

Move-Item : Cannot move item because the item at 'C:\Users\ThisUser\Documents\PGP Encryption test\UUID\xxxx.gpg' does not exist.
At C:\Users\ThisUser\Documents\PGP Encryption test\yyyy.ps1:41 char:1
+ Move-Item -path $encrypted_folder\*.* -EXCLUDE *.gpg -destination $final_dir
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

Por que está reclamando que não é possível mover um item .gpg porque ele não existe, quando eu defini o comando para excluir itens .gpg? (que definitivamente existem). A exclusão está ocorrendo e um comando subsequente para -include .gpg funciona bem, mas não estou satisfeito com os erros no comando -exclude .

    
por duney 17.08.2017 / 16:10

1 resposta

1

Como observado nos comentários, esse erro é relatado aqui: link
Eu também posso replicar na PS 4:

$psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.18728
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

New-Item -Name "foo.txt" -ItemType File
New-Item -Name "bar.txt" -ItemType File
Move-Item -Path ".\*" -Destination "move.txt" -Exclude "bar*"

Move-Item : Cannot move item because the item at 'C:\temp\test\bar.txt' does not exist.
At line:1 char:1
+ Move-Item -Path ".\*" -Destination "move.txt" -Exclude "bar*"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

Como a correção para isso ainda está na versão 6 ( link ), Eu iria reescrever a expressão como: gci $encrypted_folder\*.* -exclude *.gpg | move-item -destination $final_dir

Você também pode criar filtros mais sofisticados usando where-object e -match/notmatch , por exemplo, excluir apenas aqueles com 4 ou mais caracteres antes da extensão :

gci |? name -notmatch '^.{4,}\.gpg$' | [rest of processing here]

    
por 17.08.2017 / 21:05

Tags