Dowemo


Question:

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:Buildsbuild5


.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?


Best Answer:


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:Buildsbuild5'


                    # 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


    # 'DeployBotNODE_NAME.mof' directory/files in the current directory. The default 


    # directory when remoting is C:UsersUSERNAMEDocuments.


    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


}





Copyright © 2011 Dowemo All rights reserved.    Creative Commons   AboutUs