Тема: HTA: "Run as Administrator"
<html>
<head>
<hta:application id="App" />
<script type="text/javascript">
function RunAs(){
var Shell = new ActiveXObject("Shell.Application");
Shell.ShellExecute ('mshta', App.commandLine, "", "runas", 1);
self.close();
}
</script>
</head>
<body>
<input type="button" value="Run as Administrator" onclick="RunAs()" />
<script type="text/javascript">
var oSWbemLocator = new ActiveXObject("WbemScripting.SWbemLocator");
var oWMIService = oSWbemLocator.ConnectServer('.', 'ROOT\\CIMV2');
colItems = oWMIService.ExecQuery ('SELECT * FROM Win32_Process');
var enumItems = new Enumerator(colItems);
document.write('<table border="1"><tr><th>Name<th>Owner<th>Command Line');
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var oItem = enumItems.item();
document.write('<tr><td>' + oItem.Name);
document.write('<td> ');
try {
var oOwner = oItem.ExecMethod_("GetOwner", null);
if (oOwner.User) document.write(oOwner.Domain + '\\' + oOwner.User);
} catch(e) {}
document.write('<td>' + oItem.CommandLine);
}
document.write('</table>');
</script>
</body>
</html>
Вот такой демонстрационный скрипт выводит список процессов (имя, владелец, ком.строка).
Кнопочка сверху "Run as Administrator" перезапускает приложение с повышением прав.
Хочу быть точным. Действие "Run as Administrator" не соответствует действительности, как не соответствует действительности одноименный пункт контекстного меню Windows, поскольку при выборе данного действия, фактически происходит запуск приложения не под учеткой локального администратора, а под учетной записью текущего пользователя, но в режиме повышенных прав.
Результат этого действия в представленном скрипте виден налицо. Если со своей учеткой (пусть даже обладающей админскими правами) вы видели детали только ваших процессов, то после перезапуска с повышенными привилегиями вы можете видеть детали практически всех процессов в системе.
Мысль о добавлении функции "Run as Administrator" в свои скрипты пришла ко мне вместе с установкой Windows 10. Если в прежних операционках пользователь с правами администратора имел все положенные администратору права, то в Windows 10 (возможно и в Windows 8 - я с ней мало занимался) администратор фактически почти такой же бесправный юзер как и все остальные и лишь запуск "Run as Administrator" делегирует ему положенное.
Остался нерешенным лишь один вопрос:
Как из скрипта однозначно определить с какими правами он запущен (с обычными или повышенными)? (Не хочется тупо проверять есть или нет доступ к свойствам какого нибудь системного процесса и на этом строить вывод. Может есть какой то системный признак?).
Кстати, вот Total Commander, будучи запущен в режиме повышенных прав покаывает в заголовке имя пользователя со значком ^.
Cmd.exe тоже "показывает", но вместо имени пользователя тупо пишет в заголовке "Администратор".
Ну что, уважаемые господа скриптописатели, может и вам пришла пора все свои скрипты дописывать?