linux - tutorial - powershell windows 10
¿Firma la secuencia de comandos de PowerShell en una plataforma que no es de Windows? (1)
¿Qué hay de compilar su script para .exe?
ps2exe, o incluso algunas llamadas internas de .net pueden hacer eso por ti.
Estoy trabajando en un proyecto en el que estamos implementando software de forma remota utilizando una administración de configuración, parte de la cual entrega scripts de PowerShell a los servidores de Windows, que luego se ejecutan para realizar partes de nuestra configuración y / o configuración.
El método de implementación actual escribe los scripts en el disco, pero no cierra el manejador del archivo. Esto se hizo para hacer que el script sea más "seguro" al evitar que cualquier otro proceso altere el archivo antes de que se ejecute. Para ejecutar el script, PowerShell debe leerlo desde stdin, ya que no ejecuta un script si no puede obtener acceso exclusivo. La invocación se ve así:
powershell.exe -Command - < C:/temp/some_name.ps1
Esto tiene una serie de inconvenientes, principalmente que no puedo pasar parámetros al script. Además, la lectura de grandes scripts de stdin se vuelve funky con malos caracteres, retornos de línea, etc.
Me gustaría invocar las secuencias de comandos en un método más tradicional, por ejemplo
powershell.exe -File C:/temp/some_name.ps1 -Param value ...
pero también manténgase en el espíritu de asegurarse de que nada pueda alterar el guión antes de que se ejecute. Para ello, quiero firmar el script de powershell y ejecutar powershell con la política de ejecución "AllSigned".
El problema radica en que realmente no puedo firmar el script en el servidor de destino, ya que tiene el mismo problema que PowerShell ejecutando el script ... Tengo que liberar el bloqueo exclusivo para permitir que PowerShell firme el archivo, pero podría serlo manipulado.
Luego decidí que si podía firmar el script en el servidor que lo entrega a la máquina de destino, funcionaría mucho mejor. Sin embargo, nuestros servidores de software de gestión de configuración son todos Linux, y me he quedado perplejo al intentar encontrar alguna manera de firmar scripts de PowerShell en Linux. Mono tiene soporte para Authenticode, pero fuera de la caja solo es para exes y dlls. Intenté profundizar en las funciones .Net de PowerShell pero descubrí que usan Cryptui.dll, que es específico de Windows.
En este punto estoy buscando de todos modos puedo obtener la firma agregada a los guiones, o tendré que recurrir a alguna otra forma de ejecutar los guiones que no son realmente nativos. Si es posible, me gustaría poder calcular la firma en la memoria en una representación de cadena del script, pero tomaré un método basado en archivos si eso es todo lo que puedo obtener.