Remove-Item di errore: Impossibile rimuovere la voce [voce path & nome]: Accesso al percorso ‘[articolo del percorso & name]’ negato

Sono nuovo di PowerShell.

Sto cercando di automatizzare la distribuzione di componenti dll in una cartella su un server di origine a più cartelle sul server di destinazione. Questo sembra come dovrebbe essere abbastanza semplice: copia di componenti di origine (distribuzione) cartella sul server di origine per le cartelle sul server di destinazione, verificare copie e, infine, eliminare i componenti della distribuzione cartella sul server di origine.

La copia di file dal server di origine per il server di destinazione è lavoro senza alcun problema.
Tuttavia, quando lo script si muove su di eliminare i componenti dal server di origine, sono a intermittenza confrontarsi con il messaggio di errore:
“Remove-Item di errore: Impossibile rimuovere la voce [voce path & nome]: Accesso al percorso ‘[articolo del percorso & name]’ negato.”

Ho eseguito questo script più volte; a volte è completa senza problemi, a volte con l’errore. L’errore non si verifica per ogni file da eliminare e sembra avvenire su diversi componenti ogni volta che si presenta.

Sotto è la funzione che ho scritto per rimuovere i componenti e verificare le eliminazioni:

function DeleteSourceFiles($srcPath) {
    # Announce delete
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...")
    OutputToHostAndLog "Removing files..."

    # Deletes all file items (i.e. all except folders) in source folder
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]}
    ForEach($item in $filesToDelete) {
        Remove-Item $srcPath\$item -force

        # Verify deletions       
        if(Test-Path($srcPath+"\"+$item)) {
            OutputToHostAndLog ("Delete failed: "+$item.Name)        
            $fail++
        }
        else {
            OutputToHostAndLog ($item.Name+" deleted successfully...")
        }
    }
 }

L’uso della forza parametro con il cmdlet Remove-Item non sembrano avere alcun effetto sul problema. Il file (di nuovo, vari tipi di file di fallimento) non sembrano essere isReadOnly comunque.

Allo stesso modo, l’esecuzione di PowerShell come Amministratore sembra non avere effetto, anche se Get-Acl per la cartella di origine indica che l’Amministratore deve avere FullControl.

È questo un problema di autorizzazioni che mi manca?
Suggerimenti molto apprezzato…

MODIFICA:
Ho aggiornato il mio script così:

function DeleteSourceFiles($srcPath) {
    # Announce delete
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...")
    OutputToHostAndLog "Removing files..."
    OutputToHostAndLog $gap

    # Delete all file items (i.e. all except folders) in source folder
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]} | ForEach {
        Remove-Item $_.FullName -Force

        # Verify deletions
        if(Test-Path($srcPath+"\"+$_)) {
            OutputToHostAndLog ("Delete failed: "+$_.Name)        
            $fail++
        }
        else {
            OutputToHostAndLog ($_.Name+" deleted successfully...")
        }
    }
}

Questo sembra funzionare OK, anche se io non sono ancora sicuro del perché questo accordo dovrebbe produrre risultati diversi. Nell’interesse di apprendimento, intuizioni sarebbe molto apprezzato…

Ho un errore simile (PSv3). Ho il sospetto che sia lo script che è quello di mantenere il blocco. Il tuo script originale memorizza i file in una variabile (creazione di un blocco?). Il secondo elimina il file prima di memorizzare nella variabile. Sto avendo difficoltà a riorganizzare la mia script per dimostrare questo.

OriginaleL’autore The Furious Bear | 2014-04-08

2 risposte

  1. 7

    Intermittente errori di accesso negato probabilmente ad indicare che uno o più file che si sta tentando di rimuovere, è stato bloccato da un’altra applicazione. E ‘ davvero un problema comune quando si sta cercando di pulire le directory di registro.

    L’unica cosa mi consiglia di fare è attendere che l’applicazione con il fermo per rilasciare il file.

    Avevo preso in considerazione la possibilità che i file in questione sono stati forse in uso da un’altra applicazione, ma, anche se i file sono copie di effettiva applicazione .dll, I test creato le cartelle su ogni server di script di test. Questo non implica che queste copie non può essere in uso?
    Che certamente implica che non sono in uso. Stai dicendo la versione aggiornata dello script non avere problemi?
    Così lontano, così buono Jason. Sembra strano che con una piccola modifica alla struttura sintattica, lo script sembra funzionare in modo coerente quando l’originale ha presentato errori intermittenti.
    Grazie! I miei file sono stati bloccati da una PAUSA di google drive, che mi diceva il mio autorizzazioni negate, anche come amministratore, così ho iniziato a scavare nelle autorizzazioni, etc. Completo di red herring, e ho solo bisogno di uccidere Google Drive. Mi hai risparmiato un sacco di tempo.

    OriginaleL’autore Jason Morgan

  2. 1

    Ho risolto il problema impostando le autorizzazioni di protezione per gli utenti di avere ‘Modifica’ e ‘Controllo Completo’ aggiunto per la cartella che stavo cercando di eliminare dal

    OriginaleL’autore Ian Currie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *