Ok, lý do điều này không hoạt động là mô hình bảo mật trong Windows Vista và mới hơn. Một tài khoản trong nhóm quản trị viên vẫn chạy mọi thứ không được nâng cao rõ ràng là người dùng bị giới hạn. Ngoại lệ là Administrator
tài khoản, chạy mọi thứ nâng cao. Vì lý do này, việc sử dụng làm tài khoản đăng nhập của bạn thường bị coi là xấu và thường bị vô hiệu hóa.
Bạn có thể kích hoạt nó và sau đó runas
gọi tài khoản đó. Điều đó giới thiệu một vài vấn đề - hiện tại bạn đang chạy với môi trường của một người dùng khác, có thể có các biến môi trường khác nhau được đặt. 1
Cách tốt hơn để làm điều này sẽ thực sự nâng cao như người dùng hiện tại của bạn thông qua UAC. Thật không may, dấu nhắc lệnh tiêu chuẩn không bao gồm khả năng đó - nhưng cả chương trình của bên thứ ba và PowerShell và WSHell (VBScript) tích hợp đều có thể làm như vậy.
Mượn từ câu trả lời khác của tôi , bạn có thể gọi lệnh PowerShell trực tiếp bằng powershell -c
:
powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts
về cơ bản cho PowerShell chạy các phần sau ( start
được đặt bí danh Start-Process
):
Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts
Thủ thuật ở đây là chuyển động từ runas
, kích hoạt UAC.
Cả Start-Process -Verb runas
cmd tiêu chuẩn cũng không runas
vượt qua thư mục làm việc hiện tại , vì vậy hãy luôn sử dụng đường dẫn đầy đủ trong bất kỳ lệnh nào bạn nâng lên theo cách này.
Cũng lưu ý rằng một số đối số như -c
có thể xung đột với các Start-Process
đối số, vì vậy cách an toàn nhất là:
powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
1 Lưu ý: điều này chỉ áp dụng cho các biến môi trường của người dùng . Các biến môi trường bạn đặt trong quy trình cha không được truyền qua bởi UAC ! Điều này cũng áp dụng cho runas
, và nó thậm chí còn tồi tệ hơn bởi vì bạn thậm chí sẽ không nhận được bình chính xác của người dùng.