7

Ho due assistenti:Come eseguire a distanza uno script remoto elevata in PowerShell

  • serverA (Windows Server 2003)
  • serverB (Windows 7)

Servera contiene una cartella con un file batch (deploy.bat) che deve essere eseguito da un prompt di PowerShell con privilegi elevati. In ServerA, se lo eseguo da un prompt normale o dal prompt di PowerShell fallisce. Se lo eseguo da un prompt elevato funziona. (Esegui come amministratore).

Il problema che si verifica è quando si tenta di eseguire il file batch dal server B utilizzando un'esecuzione PowerShell remota. Sono in grado di eseguire con questo comando:

Invoke-Command -computername serverA .\remotedeploy.ps1 

Il contenuto di remotedeploy.ps1 è:

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

Ho guardato un sacco di domande in su StackOverflow:

  • Esegui un powershell remoto (Questo funziona per me)
  • Esecuzione di un powershell locale con prompt elevato (posso farlo)

Questa domanda riguarda entrambi allo stesso tempo. Quindi la domanda esatta è:

È possibile eseguire uno script REMOTE ELEVATO in PowerShell?

risposta

1

fare si tenta di modificare remoteDeploy.ps1 per iniziare CMD.EXE con diritti elevati:

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

Penso di aver provato questo, ma mi ha chiesto una password (non un'opzione in quanto ho bisogno di eseguire in uno script di build) e sembra che non ci sia alcuna opzione per inserire una password. Proverò di nuovo ora solo per essere sicuro. –

+0

Non funziona. Quando lo si esegue localmente, un prompt di Windows richiede il permesso e quando lo eseguo da remoto, si blocca a causa dello stesso prompt del modulo di Windows. –

+1

Sembra funzionare da me, ma utilizzo le credenziali di amministratore reali, quando creo la mia PSSession. – JPBlanc

1

Se stai usando PowerShell 4, è possibile eseguire il comando utilizzando desiderata configurazione Stato, che corrono come 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 
} 
Problemi correlati