7

Tengo dos servidores:Cómo ejecución remota de una secuencia de comandos remota elevada en PowerShell

  • servidorA (Windows 2003 Server)
  • SERVERB (Windows 7)

ServidorA contiene una carpeta con un archivo por lotes (deploy.bat) que debe ejecutarse desde un indicador elevado de powershell. En ServerA, si lo ejecuto desde un indicador normal o un mensaje de PowerShell, falla. Si lo ejecuto desde un mensaje elevado, funciona. (ejecutar como administrador).

El problema que tengo es cuando trato de ejecutar el archivo por lotes desde el servidor con el servidor usando una ejecución remota de PowerShell. Soy capaz de ejecutar con este comando:

Invoke-Command -computername serverA .\remotedeploy.ps1 

El contenido de remotedeploy.ps1 es:

cd D:\Builds\build5 
.\Deploy.bat 

he parecía mucho a preguntas acerca de stackoverflow:

  • Ejecutar un powershell remoto (Esto funciona para mí)
  • Ejecutar un powershell local con solicitud elevada (puedo hacerlo)

Esta pregunta trata de ambas cosas al mismo tiempo. Entonces la pregunta exacta es:

¿Es posible ejecutar un script ELEVATED REMOTE en PowerShell?

Respuesta

1

Haz intenta cambiar remoteDeploy.ps1 para comenzar cmd.exe con derechos elevados:

cd D:\Builds\build5 
start-process CMD.EXE -verb runas -argumentlist "-C",".\Deploy.bat" 
+0

Creo que he intentado esto pero me ha pedido una contraseña (no es una opción porque la necesito ejecutar en un script de compilación) y parece que no hay ninguna opción para poner una contraseña. Lo intentaré de nuevo ahora solo para estar seguro. –

+0

No funciona. Al ejecutarlo localmente, un indicador de Windows me solicita permiso y cuando lo ejecuto remotamente, se congela debido a la misma ventana del formulario, supongo. –

+1

Parece que me funciona, pero uso las credenciales de administrador reales cuando creo mi PSSession. – JPBlanc

1

Si está utilizando PowerShell 4, se puede ejecutar el comando utilizando Configuración del estado deseado, que se ejecuta como SYSTEM:

Invoke-Command -ComputerName ServerA -ScriptBlock { 
    configuration DeployBat 
    { 
     # DSC throws weird errors when run in strict mode. Make sure it is turned off. 
     Set-StrictMode -Off 

     # We have to specify what computers/nodes to run on. 
     Node localhost 
     { 
      Script 'Deploy.bat' 
      { 
       # Code you want to run goes in this script block 
       SetScript = { 
        Set-Location 'D:\Builds\build5' 
        # DSC doesn't show STDOUT, so pipe it to the verbose stream 
        .\Deploy.bat | Write-Verbose 
       } 

       # Return $false otherwise SetScript block won't run. 
       TestScript = { return $false } 

       # This must returns a hashtable with a 'Result' key/value. 
       GetScript = { return @{ 'Result' = 'RUN' } } 
      } 
     } 
    } 

    # Create the configuration .mof files to run, which are output to 
    # 'DeployBot\NODE_NAME.mof' directory/files in the current directory. The default 
    # directory when remoting is C:\Users\USERNAME\Documents. 
    DeployBat 

    # Run the configuration we just created. They are run against each NODE. Using the 
    # -Verbose switch because DSC doesn't show STDOUT so our resources pipes it to the 
    # verbose stream. 
    Start-DscConfiguration -Wait -Path .\DeployBat -Verbose 
} 
Cuestiones relacionadas