Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

973
Vistas
Ejecutando un script de Powershell desde C#

Estoy tratando de ejecutar un script de PowerShell desde el código C#, pero tengo algunos problemas (quizás ambientales):

En una máquina donde intento ejecutarlo, ocurre lo siguiente:

  1. PowerShell se inicia y se carga como administrador
  2. La ventana de PowerShell se cierra inmediatamente (aparentemente) sin error

Notas:

  • El guión funciona. Cuando lo ejecuto desde ISE, se ejecuta sin errores.
  • Si hago clic con el botón derecho en la secuencia de comandos y elijo Ejecutar con PowerShell, obtengo un error de Política de ejecución aunque no lo cambie en la secuencia de comandos.

Set-ExecutionPolicy: Windows PowerShell actualizó correctamente su política de ejecución, pero la configuración se anula con una política definida en un ámbito más específico. Debido a la anulación, su shell conservará su actual política de ejecución efectiva de RemoteSigned. Escriba "Get-ExecutionPolicy -List" para ver la configuración de su política de ejecución. Para obtener más información, consulte "Get-Help Set-ExecutionPolicy". En línea:1 char:46 + if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process ... + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + Información de categoría: Permiso denegado: (:) [Establecer política de ejecución], SecurityException + Id. de error totalmente calificado: ExecutionPolicyOverride, Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

  • Get-ExecutionPolicy-List

     Scope ExecutionPolicy ----- --------------- MachinePolicy Unrestricted UserPolicy Undefined Process Bypass CurrentUser Unrestricted LocalMachine Unrestricted
  • Creo que esto es ambiental porque:

    • andaba bien hace unos dias
    • Funciona bien en otras computadoras

Este es el código que uso para invocar el script:

 if (File.Exists("Start.ps1")) { string strCmdText = Path.Combine(Directory.GetCurrentDirectory(), "Start.ps1"); var process = System.Diagnostics.Process.Start(@"C:\windows\system32\windowspowershell\v1.0\powershell.exe ", strCmdText); process.WaitForExit(); }

El guión en sí es irrelevante, ya que lo he cambiado a un simple

 Write-Host "Hello" $d=Read-Host

y tengo el mismo problema.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema estaba en la ruta del script. Tenía espacios en esta máquina en particular y no había manejado eso.

La ventana se cerró demasiado rápido para ver cualquier error, pero la configuración

 process.StartInfo.RedirectStandardOutput = true;

me ayudó a atraparlo.

La política de ejecución no tuvo nada que ver con mi error.

Para solucionarlo, cambié la ruta en el código c# como se explica aquí: Ejecutar un script de Powershell en CMD.EXE desde una ubicación con "Caracteres ilegales en la ruta"

Código completo:

 if (File.Exists("Start.ps1")) { File.GetAttributes("Start.ps1"); string strCmdText = Path.Combine(Directory.GetCurrentDirectory(), "Start.ps1"); var process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe"; process.StartInfo.Arguments = "\"&'"+strCmdText+"'\""; process.Start(); string s = process.StandardOutput.ReadToEnd(); process.WaitForExit(); using (StreamWriter outfile = new StreamWriter("StandardOutput.txt", true)) { outfile.Write(s); } }
over 4 years ago · Santiago Trujillo Denunciar

0

A medida que enumera las políticas, aparentemente hay una política de grupo implementada contra su computadora (incluso si no está en el dominio, todavía hay un GP local vigente) que cambia MachinePolicy , que es sobre todas las políticas establecidas localmente a "RemoteSigned", que es política más fuerte que "Sin restricciones" en términos de ejecución de código. Si su PC está en un dominio, puede ejecutar el "Conjunto resultante de políticas (registro)" como administrador local y obtener la política de dominio que afecta a su PC. De lo contrario, ejecute la Política de seguridad local desde el Panel de control/Herramientas administrativas y navegue por "Configuración de la computadora - Plantillas administrativas - Componentes de Windows - Windows PowerShell" y verifique el valor de las políticas allí ("Habilitar ejecución de escenario" - traducido aproximadamente del localizado), y si necesario, puede cambiar el valor allí. Después de hacerlo, vuelva a cargar Powershell.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda