Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remote execute an ELEVATED remote script in PowerShell

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?

like image 970
Oscar Foley Avatar asked May 23 '12 17:05

Oscar Foley


People also ask

How do I run a remote PowerShell script on a remote computer?

To run a script on one or many remote computers, use the FilePath parameter of the Invoke-Command cmdlet. The script must be on or accessible to your local computer. The results are returned to your local computer.

How do I run an elevated script?

The easiest way to start elevated Powershell windows is by searching for the Powershell application. Press the Windows button to open the start menu and type Powershell. Select Run as administrator to launch run a Powershell window with full privileges. Press Yes in the UAC prompt, and you are good to go!

What are the two ways to execute commands in PowerShell on a remote machine?

And the Invoke-Command and New-PSSession commands are two ways to execute PowerShell cmdlets on remote systems.


1 Answers

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
}
like image 109
Aaron Jensen Avatar answered Sep 27 '22 16:09

Aaron Jensen