Ok, la ragione per cui questo non funziona è il modello di sicurezza in Windows Vista e versioni successive. Un account nel gruppo amministratori esegue comunque tutto ciò che non è esplicitamente elevato come utente limitato. L'eccezione è l' Administrator
account, che esegue tutto elevato. Per questo motivo, è considerato generalmente errato utilizzare come account di accesso ed è normalmente disabilitato.
È possibile abilitarlo e quindi runas
invocare come tale account. Ciò introduce alcuni problemi: ora stai funzionando con l'ambiente di un altro utente, che potrebbe avere diverse variabili d'ambiente impostate. 1
Il modo migliore per farlo sarebbe effettivamente elevare come utente corrente tramite UAC. Sfortunatamente, il prompt dei comandi standard non include questa funzionalità, ma sia i programmi di terze parti che PowerShell e WSHell (VBScript) integrati possono farlo.
Prendendo in prestito dall'altra mia risposta , puoi invocare il comando PowerShell direttamente con powershell -c
:
powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts
che sostanzialmente dice a PowerShell di eseguire quanto segue ( start
è alias Start-Process
):
Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts
Il trucco qui è passare il verbo runas
, innescando UAC.
Né Start-Process -Verb runas
il cmd standard runas
passerà la directory di lavoro corrente , quindi usa sempre il percorso completo in tutti i comandi che elevi in questo modo.
Si noti inoltre che alcuni argomenti come -c
potrebbero essere in conflitto con Start-Process
argomenti, quindi il modo più sicuro è:
powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
1 Nota: questo vale solo per le variabili d'ambiente dell'utente . Le variabili d'ambiente impostate in un processo parent non vengono trasmesse da UAC ! Questo vale anche per runas
, ed è anche peggio lì perché non otterrai nemmeno i vars dell'utente corretto.