2009-04-08 26 views
53

Estoy tratando de ejecutar un script de la carpeta compartida que confío:Ignorar advertencia de seguridad en ejecutar el script desde la línea de comandos

PowerShell -file "\\server\scripts\my.ps1" 

pero me da una advertencia de seguridad, y que tenga que pulsar 'R' para continuar

Advertencia de seguridad Ejecute solo las secuencias de comandos que confía. Si bien los scripts de Internet pueden ser útiles, este script puede dañar su computadora. ¿Desea ejecutar \ server \ scripts \ my.ps1? [?] [D] No plazo [R] Ejecutar una vez que [S] Suspender Ayuda (por defecto es "D"): d

¿Puedo ignorar este aviso? El pseudo código deseado que quiero es:

PowerShell -IGNORE_SECURITY_WARNING -file "\\server\scripts\my.ps1" 

Respuesta

72

Esto se toca en "PowerShell Execution Policies in Standard Images" on Lee Holmes' Blog y "PowerShell’s Security Guiding Principles" on the Windows Power Shell Blog .

Resumen Algunas máquinas tratan rutas UNC como el gran mal a internet, así que PowerShell los trata como archivos remotos. Puede deshabilitar esta característica en esos servidores (UncAsIntranet = 0,) o agregar las máquinas remotas a sus servidores de confianza.

Si usted quiere hacer tampoco, PowerShell v2 soporta un parámetro -ExecutionPolicy que hace exactamente lo que desea su pseudocódigo. PowerShell -ExecutionPolicy Bypass -File (...).

+3

¡Gracias! -ExecutionPolicy Bypass es exactamente lo que estaba buscando. – alex2k8

+1

@LeeHomes Estaba buscando algo más, pero '-ExecutionPolicy ByPass' solucionó mi problema. Me salvaste mucho Google y tiempo. Gracias – Suhas

+1

Solo para aclarar: "agregar a hosts de confianza" significa en las opciones de Internet del sistema, disponible a través del panel de control o en Internet Explorer. El nombre parece ser una coincidencia de cadena. mi nombre compartido es '\\ foo-files'. Agregar el nombre 'foo-files.example.com' a los servidores de confianza no funcionó, solo tuve que agregar el nombre' foo-files'. –

2

que desea establecer la directiva de ejecución de la máquina mediante Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted 

es posible que desee investigar las diversas políticas de ejecución para ver cuál es correcto para ti. Eche un vistazo a "help about_signing" para obtener más información.

+0

que cambiará la política de ejecución de forma permanente, lo que puede ni ser deseado para un uso único. – Joey

+3

configurando ExecutionPolicy to Unrestricted permite la ejecución de scripts de red, pero no omite el aviso. – Yevgeniy

+1

Desea utilizar "derivación" en lugar de "no restringido". "Bypass" es incluso MENOS restrictivo que "no restringido" y se deshace de las indicaciones de seguridad. –

3

Prueba de esto, editar el archivo con:

notepad foo.ps1:Zone.Identifier 

Y establecer 'idDeZona = 0'

+3

O, en V3, 'Desbloquear-Archivo' (aunque este comentario y esta respuesta no tienen nada que ver con la pregunta de IO) –

1

¿Te ha descargar el script desde Internet?

A continuación, elimine el flujo NTFS del archivo utilizando sysinternal streams.exe en la línea de comandos.

cmd> streams.exe .\my.ps1 

Ahora intente ejecutar el script de nuevo.

+2

O, en V3,' Desbloquear-Archivo' (aunque este comentario y esta respuesta no tienen nada que ver con hacer con la pregunta de IO) –

38

Para evitar las advertencias, puede:

Set-ExecutionPolicy bypass 
+3

Advertencia: Esto establece ExecutionPolicy en toda la máquina, lo que representa un gran riesgo de seguridad. La solución de @LeeHolmes anterior establece la Política de Ejecución solo para esa sesión, que es un riesgo menor. – JamesQMurphy

+0

Considero que las implicaciones de seguridad son atroces; sin embargo, esta es la única forma de editar un archivo remoto con PowerShell ISE y no tener una ventana emergente cada vez que se hace clic en el botón de ejecución ... al menos sin cambiar la configuración de seguridad de Internet que - en el caso del entorno de destino - rompería el contenido de ActiveX así como algunas configuraciones de seguridad entre dominios mal elegidas pero necesarias que solo funcionan en la Zona de Intranet Local predeterminada. – tresf

35

Si se está utilizando en este error de un script de PowerShell descargado, puede desbloquear el guión de esta manera:

  1. botón derecho del ratón en el archivo .ps1 en cuestión y seleccione Propiedades

  2. Haga clic Desbloquear en las propiedades del archivo

    enter image description here

  3. Haga clic en OK

+1

Gracias !! Esto funcionó para mí, me estaban pidiendo cada lanzamiento incluso con Set-ExecutionPolicy Sin restricciones –

+0

También puede usar el comando Desbloquear archivo – jhclark

+0

Al menos en mi máquina, 'Unblock-File' no parece ayudar con una ruta UNC como se muestra en la pregunta original, ni aparece el botón 'Desbloquear' en el diálogo de propiedades del archivo. Supongo que esto se debe a que su archivo está alojado localmente 'C: \ ...', lo que hace que esta respuesta no sea válida para la pregunta original (aunque útil para> = 28 otros) – tresf

0

Supongamos que usted necesita para poner en marcha la escritura ps de la carpeta compartida

copy \\\server\script.ps1 c:\tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:\tmp.ps1 && del /f c:\tmp.ps1 

P. S. Reducir googlear)

9

Basta con asignar 1 a SEE_MASK_NOZONECHECKS variable ENV

$env:SEE_MASK_NOZONECHECKS = 1 
Start-Process $msi_file_path /qn -Wait | out-null 
+1

'Start-Process' no admite' -ExecutionPolicy Bypass' por lo que estaba fallando en una ruta UNC, incluso con UAC deshabilitado. Pero con este truco funciona. Voto con todas mis manos. –

+0

Usted señor gane la noche. – ojblass

0

hice este script de PowerShell para desbloquear todos los archivos en un recurso compartido en mi servidor

Get-ChildItem "\\ServerName\e$\MyDirectory\" -Recurse -File | % { 
     Unblock-File -Path $_.FullName 
} 
+0

'Unblock-File' no funcionó en mis pruebas (Windows 10, PowerShell ISE). – tresf

Cuestiones relacionadas