2012-02-20 10 views
6

semplice script:-ErrorAction arresto non funziona in Copy-Item

"test" | Out-File "C:\existing_file.txt" 
$ErrorActionPreference = "Continue" 
Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Stop 
"hello" | Out-Host 

ho questa uscita:

Copy-Item : Could not find a part of the path "C:\NonExistingDir\file.txt". 
C:\Users\ESavin\AppData\Local\Temp\d3d410e0-79b3-4736-b7e7-5aba1ab11a12.ps1:1 знак:10 
+ Copy-Item <<<< "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Stop 
    + CategoryInfo   : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException 
    + FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand 

hello 

Perché ottengo "ciao" in uscita ?? -ErrorAction Stop non funziona ??

aggiornamento:

questo codice:

"test" | Out-File "C:\existing_file.txt" 
$ErrorActionPreference = "Stop" 
Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" 
"hello" | Out-Host 

ha funzionato come previsto. non c'è "ciao" in uscita.

Copia-elemento ignore -ErrorAction e utilizzare solo $ ErrorActionPreference ??

risposta

0

Strano. Ho copiato le tue due righe in uno script, l'ho eseguito e tutto funziona bene: non vedo apparire il "ciao". Il tuo "-ErrorAction" dovrebbe avere la precedenza su qualsiasi $ ErrorActionPreference che avresti impostato a livello di sessione.

+0

È necessario creare "C: \ existing_file.txt" sul computer per riprodurre il mio esempio – Jack128

0

È necessario disporre di eseguire:

Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Continue 
"hello" | Out-Host 

o impostare $ErrorActionPreference="continue" ed eseguire

Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" 
"hello" | Out-Host 

Questi sono gli unici due modi Si ottiene l'uscita si sta mostrando. Quindi assicurati di fare ciò che stai sostenendo di fare.

+0

È don'n capito, o io spiegato male. Voglio FERMARE l'esecuzione di scipt se errore di ritorno copia-oggetto. ma -ErrorAction Stop non interrompe lo script. La domanda è "Perché" ?? – Jack128

+0

@ Jack128 - questo è quello che sto dicendo. Quello che avevi fatto dovrebbe funzionare. Assicurati di aver fatto quello che hai detto che hai fatto. – manojlds

+0

Sì. Sono sicuro. Ho aperto powershell ise, digitare "test" | File esterno "C: \ existing_file.txt" Copia-Elemento "C: \ existing_file.txt" "C: \ NonExistingDir \ file.txt" -ErrorAction Stop "ciao" | Out-Host e ricevi "ciao" in uscita – Jack128

5

Come indicato dall'help il parametro ErrorAction non ha alcun effetto sulla risoluzione degli errori, che sono i vostri.

The ErrorAction parameter has no effect on terminating errors (such as 
    missing data, parameters that are not valid, or insufficient 
    permissions) that prevent a command from completing successfully. 

Fonte: Get-Help about_commonparameters e http://technet.microsoft.com/en-us/library/dd315352.aspx

+0

Sei sicuro che si tratta di un errore di chiusura? Io non la penso così Prova questo: 'copia x y; copia x y' (assumendo che il file "x" non esista). Vedrai che viene eseguito due volte. Ora prova questo: 'copia -ErrorAction Stop x y; copia x y 'eseguirà solo il primo. –

+0

Di solito le eccezioni sono errori di chiusura. Ma dal 2012 PowerShell ha ricevuto così tanti cambiamenti che questo potrebbe non essere più vero. Quindi non guarderò oltre. Devo anche menzionare che questa domanda non ha una risposta accettata, quindi la rilevanza del thread è ridotta ulteriormente. – Tom