0

パイプラインから Test-Path を機能させるのに問題があります。何らかの理由で、コマンドは常に false と評価され、IF ステートメントに含まれるコマンドを実行します。

コードは次のようになります。

$BACKUPFOLDER = "F:\TEST\Old\"
Get-ChildItem "$SrcFolder\*.pgp" | Where-Object {!$_.PsIsContainer} | ForEach-Object {
        Add-Content -Path $LOGFILE -Value "`r`n - Decrypting file $_ -"
        Decrypt-Files $_ "$SrcFolder$($_.BaseName)" $Credential $DecryptionLogFile        

        if (!(Test-Path "$BackupFolder$($_.BaseName)")) {
            Add-Content -Path $LOGFILE -Value "`n`rMoving $_ to $BackupFolder"
            Move-Item $_ $BackupFolder
        }
        else {
            Add-Content -Path $LOGFILE -Value "`n`rCould not move $_ to $BackupFolder. Destination file already exists."
        }

私が得るエラーはMove-Itemコマンドにあります:

Move-Item : Cannot create a file when that file already exists.

At F:\Scripting\1-Dev\Modules\Include.ps1:505 char:26
+                 Move-Item <<<<  $_ $BackupFolder
+ CategoryInfo          : WriteError: (F:\TEST...201301.xlsx.pgp:FileInfo) [Move-Item], IOException
+ FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

ファイルが既にバックアップ フォルダーに存在するため、混乱していますが、何らかの理由で、スクリプトは引き続き IF ステートメントを通過し、move-item コマンドを実行します。私の構文は Test-Path にとって悪いですか?

復号化するファイルは VPAS-201301.xlsx.pgp のような名前になり、抽出するファイルは VPAS-201301.xlsx になります。

4

1 に答える 1