2013-11-27 11 views
7

Quando si utilizza PowerShell di Remove-Item per rimuovere una directory che non è vuota, verrà richiesto per la conferma:Come scegliere automaticamente "No" quando Remove-Item richiede conferma?

PS C:\Users\<redacted>\Desktop\Temp> Remove-Item .\Test 

Confirm 
The item at C:\Users\<redacted>\Desktop\Temp\Test has children and the Recurse parameter was not specified. If you 
continue, all children will be removed with the item. Are you sure you want to continue? 
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): 

Se corro PowerShell in modalità non interattiva, ottengo un errore invece:

Remove-Item : Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available. 
At line:1 char:1 
+ Remove-Item .\Test 
+ ~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Remove-Item], PSInvalidOperationException 
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RemoveItemCommand 

So che posso usare -Recurse per avere Remove-Item procedere come se avessi scelto l'opzione "Sì". Posso in qualche modo procedere come se avessi scelto l'opzione "No"?

(Solo per chiarezza: -Force e -Confirm:$false non sono quello che voglio qui.)

risposta

1

Questo ha funzionato per me. I file non vengono rimossi e lo script procede. Si continua a vedere l'errore relativo alla modalità Non interattiva, ma il comando si sposta come se non ci fosse risposta.

remove-item c:\test\test 

Write-host "Files are still there, script still going" 

Se si desidera solo per sopprimere quel messaggio di errore avvolgerla in un try \ Cattura

Try 
{ 
remove-item c:\test\test 
} 
Catch 
{ 

} 

Write-host "Files are still there, script still going" 
+1

Non voglio che venga visualizzato il messaggio di errore relativo alla modalità non interattiva, quindi sceglierò la seconda opzione. Pensandoci, prendere l'eccezione lanciata da Remove-Item è probabilmente la strada da percorrere comunque. (È strano che il messaggio di eccezione si stia lamentando della modalità non interattiva, non di una cartella non cancellabile.) –

2

È possibile utilizzare test-percorso per determinare se la directory è vuota prima di tentare di eliminarlo:

if (-not (Test-Path .\Test\*.*)) 
    { Try 
    { Remove-Item .\Test -ErrorAction Stop } 
    Catch { Continue } 
    } 

The Try Catch gestirà eventuali errori

+0

Sì, ho potuto testare la directory prima di tentare di rimuoverlo. Tuttavia, questo genererebbe una condizione di competizione se un file è stato aggiunto alla directory tra il test e l'invocazione di Remove-Item. In tutte le situazioni, voglio che lo script continui a essere eseguito anche se non è possibile eliminare la cartella. –

+0

Aggiornato per requisiti aggiuntivi. – mjolinor

Problemi correlati