2013-07-16 11 views
6

Ho uno script che viene eseguito in 2 parti. La prima parte richiede l'accesso amministrativo (aggiorna il file HOSTS e copia/sovrascrive). Al termine di quella parte, ho bisogno di mappare un'unità con l'alias hostname aggiornato la prima parte dello script.Esegui batch come Admin (auto-eleva) e quindi deseleziona

Ho capito come ottenere i privilegi elevati utilizzando questo SO Question. Ma mappare un'unità (mentre è in amministrazione) mappa un'unità nella sessione dell'amministratore. Ho bisogno di "de-elevare" di nuovo in modalità utente per eseguire il mio secondo script.

Questo è uno script che eseguo almeno una volta al giorno e forse più volte al giorno. Sto cercando di creare una soluzione che sia solo un file .bat, se possibile. Per ragioni, gli script sono scritti in perl.

Le cose che ho provato:

  1. Utilizzando il runas/user: il comando regular_user (questo non non lavoro)
  2. di file 1 bat Uso della chiamata per i 2 file batch (Questa "opere "ma per qualche motivo eseguono entrambi contemporaneamente)
  3. Esecuzione di 2 file bat separatamente e manualmente.
  4. Ricerca SO, ma non riuscivo a trovare Admin-> utente invece solo dall'utente> amministratore

TLDR:Come faccio de-elevare alla modalità utente dalla modalità amministratore in un file batch?

risposta

2

La soluzione migliore è utilizzare il miglior strumento di esecuzione remota/locale di terze parti: Windows Sysinternals PSEXEC. Puoi fornire le credenziali e ottenere ciò che ti serve utilizzando PSEXEC! Puoi inserire i comandi PSEXEC nel tuo file batch o vbs e farli funzionare senza intoppi. È anche possibile chiamare un comando con autorizzazione elevata PSEXEC e il successivo senza alcuna elevazione, mescolando le credenziali in un unico file batch unico.

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

+0

Cool, questo sembra promettente. Grazie. – Ishikawa91

0

fare prima la parte non elevata, quindi elevare e continuare.

+0

Non sono sicuro che sia possibile nello scenario dell'OP. OP dice che deve prima aggiornare il file HOSTS e quindi usare nuovi alias per eseguire la seconda parte. – user1071777

2

Se si utilizza 2 file batch, chiamare il lotto ElevatedBatch.cmd con elevazione utilizzando Main.cmd (che continua a fare le cose terra terra):

@ECHO OFF 
START /WAIT ElevatedBatch.cmd %1 %2 %3 %4 %5 %6 %7 %8 %9 
REM here you can do unelevated stuff: 
ECHO Running unelevated now 

Il parametro /WAIT assicura che lo script attenderà fino a quando si è concluso ElevatedBatch.cmd . Per ElevatedBatch.cmd è possibile utilizzare un modello come this per elevarlo.

Problemi correlati