How to remote execute an ELEVATED remote script in PowerShell

24,728

Solution 1

Do you try to change remoteDeploy.ps1 to start CMD.EXE with elevated rights :

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

Solution 2

If you're using PowerShell 4, you can execute the command using Desired State Configuration, which run as 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
}
Share:
24,728
Oscar Foley
Author by

Oscar Foley

Founder & director of Anedum Ltd, working as Big Data & DevOps contractor, currently in a contract for Reed Business Information in ProAgrica project using HPCC, ECL, Jenkins, Bash & PowerShell.

Updated on January 05, 2020

Comments

  • Oscar Foley
    Oscar Foley over 4 years

    I have two servers:

    • serverA (windows 2003 server)
    • serverB (windows 7)

    ServerA contains a folder with a batch file (deploy.bat) that needs to be executed from an elevated powershell prompt. In ServerA, if I run it from a normal prompt or powershell prompt it fails. If I run it from an elevated prompt it works. (run as administrator).

    The problem I have is when I try to execute batch file from serverB using a remote powershell execution. I am able to execute with this command:

    Invoke-Command -computername serverA .\remotedeploy.ps1
    

    The content of remotedeploy.ps1 is:

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

    I have looked a lot questions in stackoverflow about:

    • Execute a remote powershell (This works for me)
    • Execute a local powershell with elevated prompt (I can do it)

    This question is about both at the same time. So the exact question is:

    Is possible to execute an ELEVATED REMOTE script in PowerShell?