2012-02-20 17 views
6

guión simple:-ErrorAction parada no funcionar en 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 

tengo esta salida:

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 

¿Por qué me sale "hola" en la salida ?? -ErrorAction Stop no funciona ??

actualización:

este código:

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

funcionó como se esperaba. no hay "hola" en la salida.

Copy-Item ignora -ErrorAction y usa solo $ ErrorActionPreference ??

Respuesta

0

Extraño. Copié y pegué las dos líneas en un guión, lo ejecuté y todo funciona bien: no veo aparecer el "saludo". Su "-ErrorAction" debería tener prioridad sobre cualquier $ ErrorActionPreference que haya establecido a nivel de sesión.

+0

debe crear "C: \ existing_file.txt" en su computadora para reproducir mi ejemplo – Jack128

0

Debe tener ya sea correr:

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

o conjunto $ErrorActionPreference="continue" y ejecutar

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

Esas son las dos únicas formas en las que hubiera obtenido la salida que está mostrando. Así que asegúrese de hacer lo que dice hacer.

+0

no encentras entiende, o que se ha explicado mal. Quiero detener la ejecución de scipt si el error de devolución del elemento de copia. pero -ErrorAction Stop no detiene el script. La pregunta es "¿Por qué"? – Jack128

+0

@ Jack128 - eso es lo que estoy diciendo. Lo que has hecho debería funcionar. Asegúrate de hacer lo que dijiste que hiciste. – manojlds

+0

Sí. Estoy seguro. Abrí PowerShell ise, tipo "prueba" | Out-File "C: \ existing_file.txt" Elemento de copia "C: \ archivo_existente.txt" "C: \ NonExistingDir \ file.txt" -ErrorAction Stop "hola" | Out-Host y obtener "hola" en la salida – Jack128

5

Como lo indica la ayuda, el parámetro ErrorAction no tiene efecto en la terminación de errores, que es el tuyo.

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. 

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

+0

¿Está seguro de que es un error de terminación? No lo creo. Intenta esto: 'copia x y; copie x y' (suponiendo que el archivo "x" no existe). Verás que se ejecuta dos veces. Ahora intenta esto: 'copy -ErrorAction Stop x y; copia x y' solo ejecutará el primero. –

+0

Por lo general, las excepciones son errores de terminación. Pero desde 2012, powershell ha recibido tantos cambios que puede que ya no sea así. Por lo tanto, no voy a mirar más allá. También debo mencionar que esta pregunta no tiene una respuesta aceptada, por lo que la relevancia del hilo se reduce aún más. – Tom