Nowe narzędzia Elevation PowerToys dla systemu Windows Vista

Opublikowano: 1 września 2008
Zawartość strony
Opcja Uruchom jako Administrator dla zewnętrznych narzędzi skryptowychOpcja Uruchom jako Administrator dla zewnętrznych narzędzi skryptowych
Funkcja PowerToy Run As another UserFunkcja PowerToy Run As another User
Opcja Prompt Here as System dla programu CMD oraz powłoki PowerShellOpcja Prompt Here as System dla programu CMD oraz powłoki PowerShell
Gadżet ElevationGadżet Elevation
PodsumowaniePodsumowanie

Kod do tego artykułu znajduje się pod adresem: Elevation2008_06.exe (197KB)

Witamy w nowej edycji narzędzi Elevation PowerToys dla systemu Windows Vista. Przyjrzeliśmy się im bliżej w wydaniu magazynu TechNet Magazine z czerwca 2007. Od tego czasu minął rok. Tym razem autor artykułu chciałby pokazać, w jaki sposób zaimplementowana została funkcja Uruchom jako Administrator dla kilku jego ulubionych zewnętrznych narzędzi skryptowych. Chciałby także zademonstrować, w jaki sposób można zastąpić poręczną funkcję Windows® XP, która została usunięta z systemu Windows Vista® oraz przyjrzeć się kilku przydatnym narzędziom, które zostały dołączone do oprogramowania Elevation PowerToys.

Opcja Uruchom jako Administrator dla zewnętrznych narzędzi skryptowych

Jednym z tematów omawianych w poprzednim artykule (dostępnym pod adresem technet.microsoft.com/magazine/cc162321.aspx) było włączanie opcji Uruchom jako Administrator (Run as Administrator) dla rodzimych narzędzi skryptowych systemu Windows. W tym artykule stworzona została funkcja PowerToy Run as Administrator dla narzędzi skryptowych dostarczanych przez zewnętrznych dostawców:

  •  AutoIt v3 (www.hiddensoft.com)

  •  AutoHotkey (www.autohotkey.com)

  •  ActivePerl (www.activestate.com)

  •  KiXtart 2010 (www.kixtart.org)

Kod dla każdego z nich został dołączony do materiałów pomocniczych dla tego artykułu, które można pobrać z witryny technetmagazine.com. Właściwe pliki noszą nazwy odpowiednio ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf oraz ElevateKiXtart.inf. W przypadku programów AutoIt v3, AutoHotkey oraz ActivePerl proces wdrażania jest dość prosty. Wystarczy pobrać odpowiednią aplikację i zainstalować ją w domyślnej lokalizacji. Po zainstalowaniu wybranych aplikacji można zainstalować odpowiednią funkcję PowerToys Run as Administrator dla każdego z narzędzi.

Niestety program KiXtart 2010 nie oferuje instalatora. W związku z tym w celu zagwarantowania, że program KiXtart zostanie zainstalowany w standardowej lokalizacji i funkcja PowerToy będzie działała prawidłowo, dostarczony został plik INF, który zainstaluje program KiXtart 2010 (v 4.60) w folderze Program Files\KiXtart i zarejestruje rozszerzenie pliku .kix.

Należy przejść do strony www.kixtart.org/?p=downloads, pobrać plik KiX2010_460.zip i rozpakować go do folderu. Do tego samego folderu trzeba skopiować plik Install_KiXtart.inf (znajdujący się w materiałach pomocniczych tego artykułu). Następnie należy kliknąć prawym przyciskiem myszy plik Install_KiXtart.inf i wybrać opcję Zainstaluj (Install). Później wystarczy po prostu zainstalować funkcję PowerToy ElevateKiXtart.inf.

Do początku stronyDo początku strony

Funkcja PowerToy Run As another User

Kontrola konta użytkownika (User Account Control - UAC) została stworzona z myślą o zmniejszeniu podatności systemu operacyjnego na działanie złośliwego oprogramowania w ten sposób, że wszyscy użytkownicy (nawet administratorzy) uruchamiają większość aplikacji z uprawnieniami zwykłego użytkownika. Funkcja UAC oferuje możliwość podnoszenia uprawnień dla zadań administracyjnych oraz innych funkcji aplikacji. Możliwość podnoszenia uprawnień jest zapewniana przez opcję Uruchom jako Administrator, dostępną po kliknięciu prawym przyciskiem myszy pliku wykonywalnego. Narzędzia Elevation PowerToys omawiane w artykule opublikowanym w czerwcu 2007 roku rozszerzały tę funkcjonalność o możliwość pracy z innymi plikami i typami obiektów.

Funkcjonalność wbudowana w system Windows Vista sprawdza się całkiem dobrze w przypadku większości zadań administracyjnych. Jednak jeden ważny scenariusz nie został uwzględniony w systemie Windows Vista. Wiele działów IT kieruje się regułami, zgodnie z którymi administratorzy sieci wykorzystują inne konto użytkownika do realizacji rutynowych zadań (obsługa poczty e-mail, tworzenie dokumentów itp.) oraz inne wyłącznie do administrowania siecią (lub komputerem lokalnym).

Ma to służyć obniżeniu ryzyka, że gdy administrator sieci przypadkowo uruchomi złośliwe oprogramowanie, realizując rutynowe zadania, uszkodzi cały system lub domenę. W systemie Windows XP cel ten osiągnięto przy pomocy opcji uruchom jako (Run as...) dostępnej pod prawym przyciskiem myszy. Jednakże opcja ta nie występuje w systemie Windows Vista, ponieważ została zastąpiona przez opcję Uruchom jako Administrator (Run as Administrator).

Niemniej jednak narzędzie wiersza polecenia runas nadal znajduje się w systemie Windows Vista. Niestety nie może być wykorzystywana do realizacji najbardziej typowego zadania, które wiąże się z użyciem innego konta, a mianowicie do uruchamiania przystawek programu Microsoft® Management Console (MMC). Powiedzmy na przykład, że oddelegowano nam pewne zadania zarządzania usługą Active Directory®. Codzienne zadania realizujemy jako standardowy użytkownik, a nasze konto do administracji sieci jest członkiem lokalnej grupy administratorów na komputerze Windows Vista z włączoną funkcją UAC (a zatem możemy instalować narzędzia do zarządzania siecią, gdy są one potrzebne). Chcemy uruchomić przystawkę Użytkownicy i komputery usługi Active Directory (Active Directory User & Computers - ADU&C) przy użyciu konta administratora w usłudze Active Directory, a zatem próbujemy wykonać następujące polecenie runas:

runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"

Niestety nie spowoduje to uruchomienia przystawki ADU&C. Zamiast tego otrzymamy błąd polecenia runas o następującej treści "Żądana operacja wymaga podniesienia uprawnień" (The requested operation requires elevation). Sytuacja ta wynika z faktu, iż plik wykonywalny MMC został wyznaczony do uruchamiania na poziomie uprawnień highestAvailable. Ponieważ poziomem highestAvailable dla konta administracji siecią jest administrator, uruchomienie przystawki ADU&C w ten sposób wymagałoby podniesienia uprawnień. A ponieważ polecenie runas nie wywołuje żądania podniesienia uprawnień, pojawia się błąd.

A zatem system Windows Vista utrudnia ten scenariusz, nie dostarczając elementu menu kontekstowego dla Run as... i nie oferując wbudowanych metod uruchamiania procesu w kontekście innego użytkownika, gdy konieczne jest podniesienie uprawnień.

Niniejszy artykuł byłby dość frustrujący, gdyby nie istniało rozwiązanie tego problemu, ale tak się składa, że jedno z oryginalnych narzędzi Elevation PowerToys stanowi klucz do rozwiązania drugiej kwestii. Natomiast my przedstawimy rozwiązanie pozwalające na rozprawienie się z pierwszym problemem (autor tego artykułu z przyjemnością pochwaliłby się, iż sam wpadł na rozwiązanie problemu podnoszenia uprawnień, lecz niestety podziw należy się Gov’owi Maharaj z zespołu Windows AppCompat).

Okazuje się, że funkcja Elevate Command PowerToy może zostać wykorzystana w połączeniu z poleceniem runas. Choć poprzednie polecenie nie zdołało się wywołać podniesienia uprawnień, poniższemu się to udaje:

runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"

Zaprezentowany kod powoduje, że polecenie runas uruchamia narzędzie elevate.cmd (z technicznego punktu widzenia, uruchamiany proces to cmd.exe) jako inny użytkownik, a polecenie elevate zajmuje się uruchomieniem programu mmc.exe z podniesionymi uprawnieniami.

Na zakończenie autor tego artykułu zastosował wspomniany trik, połączył go ze skojarzeniami dla plików .exe oraz .msc i dodał interfejs użytkownika aplikacji HTML w celu stworzenia narzędzia PowerToy, które tworzy opcję Run as Another User dostępną w menu ukrytym pod prawym przyciskiem myszy. Gdy wybierzemy opcję Run as Another User, zobaczymy okno aplikacji HTML, jak to zaprezentowane na Rysunku 1 .

Narzędzie Run as Another User

Rysunek 1: Narzędzie Run as Another User.

Wystarczy wpisać w nim nazwę użytkownika i domenę (dla konta na komputerze lokalnym należy zaznaczyć pole wyboru Use Local Account). Następnie można kliknąć przycisk Run, aby uruchomić aplikację w kontekście standardowego użytkownika lub kliknąć przycisk Run as Admin, aby uruchomić aplikację z wykorzystaniem podniesionych uprawnień. Po kliknięciu któregokolwiek tych przycisków uruchomiony zostanie program runas.exe , który poprosi o wpisanie hasła lub numeru PIN karty elektronicznej.

Ponieważ to narzędzie PowerToy wykorzystuje narzędzie Elevate Command PowerToy, trzeba je najpierw zainstalować. Później należy kliknąć prawym przyciskiem myszy plik RunAs.inf, wybrać opcję Zainstaluj (Install) i zatwierdzić podniesienie uprawnień. Do odinstalowania narzędzia należy użyć apletu Programy i funkcje (Programs and Features) dostępnego w Panelu sterowania (Control Panel).

Jak będzie można się przekonać, pewne skróty plików .msc w narzędziach administracyjnych, takich jak Zarządzanie komputerem (Computer Management), będą współpracowały z tym narzędziem PowerToy. Jednak należy mieć na uwadze, że w przypadku zainstalowania narzędzi administracyjnych Windows Server® 2003 przy użyciu pliku adminpak.msi, stworzone skróty nie są standardowymi skrótami plików .msc. Są to skróty Instalatora Windows i w związku z tym Eksplorator Windows nie wyświetli dla nich opcji Run as Another User.

W tej sytuacji trzeba albo znaleźć prawdziwy plik .msc i kliknąć go prawym przyciskiem myszy albo stworzyć nowe skróty do plików .msc. Ponadto funkcja runas nie współpracuje z przeglądarką Internet Explorer® ze względu na sposób, w jaki przeglądarka Internet Explorer została przeprojektowana dla trybu chronionego w systemie Windows Vista (dodatkowe informacje dotyczące tego problemu znaleźć można pod adresem support.microsoft.com/?id=922980).

Uwaga: w czasie między ukończeniem przez autora implementacji omawianych narzędzi PowerToys a publikacją tego artykułu zespół Windows Sysinternals udostępnił nowe narzędzie, którego funkcjonalność bardzo przypomina funkcjonalność narzędzia Run as Another User PowerToy. Nosi ono nazwę ShellRunas i można je znaleźć w witrynie Windows Systernals: technet.microsoft.com/sysinternals/cc300361.

Ponieważ specjaliści z zespołu Sysinternals zarabiają na życie, pisząc kod, prawdopodobnie czytelnicy będą woleli wykorzystywać ich narzędzie. Mimo to autor zdecydował się na pozostawienie własnego rozwiązania w tym artykule w roli przykładu, w jaki sposób można realizować to konkretne zadanie i inne rozszerzenia powłoki przy użyciu aplikacji HTML i kodu skryptu.

Do początku stronyDo początku strony

Opcja Prompt Here as System dla programu CMD oraz powłoki PowerShell

Czasem pojawia się konieczność uruchamiania programów w kontekście Systemu lokalnego (Local System). Na przykład wiele narzędzi do dystrybucji oprogramowania, takich jak System Center Configuration Manager (SCCM), wykorzystuje agenta klienckiego, który realizuje swoje zadania jako System lokalny.

Aby przetestować zachowanie programu do instalacji oprogramowania działającego w kontekście Systemu lokalnego przed rozpoczęciem procesu dystrybucji produktu, takiego jak SCCM, warto uruchomić instalator z wiersza polecenia działającego w kontekście konta System lokalny. A zatem rozpoczynamy tworzenie funkcji PowerToys Prompt Here as System dla konsoli CMD oraz PowerShell.

W systemie Windows XP możemy zrealizować ten cel przy pomocy następującej funkcji w skrypcie powłoki poleceń:

@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& 
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem

Jednak jeśli spróbujemy uruchomić je w z wiersza polecenia o podniesionych uprawnieniach w systemie Windows Vista, otrzymamy następujący komunikat o błędzie i wiersz polecenia działający w kontekście System nie pojawi się:

WARNING:  The service CmdAsSystem is configured 
as interactive whose support is being deprecated. 
The service may not function properly.

Problem wynika z tego, że skrypt próbuje stworzyć i uruchomić usługę interaktywną. Usługa interaktywna nie będzie działała prawidłowo ze względu na izolację sesji 0 w systemie Windows Vista (omówienie izolacji sesji 0 można znaleźć w dokumencie "Services in Windows Vista" dostępnym pod adresem microsoft.com/whdc/system/vista/Vista_Services.mspx.)

Do obejścia tego ograniczenia autor artykułu użył narzędzia Psexec, które zostało stworzone przez zespół Sysinternals (patrz technet.microsoft.com/sysinternals/bb897553.aspx). Narzędzie to pozwala na uruchamianie procesów w kontekście Systemu. Niestety większość narzędzi Sysinternals nie zawiera instalatora. W związku z tym dostarczony został plik INF (dostępny w kodzie do pobrania) służący do zainstalowania całego zestawu Sysinternals Suite (m.in. Psexec) w folderze Program Files\Sysinternals Suite. Dodatkową korzyścią jest to, że plik INF tworzy w menu Start skrót dla narzędzi graficznych zestawu.

Aby zainstalować wspomniany zestaw należy pobrać go spod adresu technet.microsoft.com/ sysinternals/bb842062.aspx i rozpakować do folderu. Następnie skopiować do tego folderu nasz plik INF (Install_SysinternalsSuite.inf), kliknąć prawym przyciskiem myszy plik Install_SysinternalsSuite.inf i wybrać opcję Zainstaluj (Install). Ponieważ te nowe narzędzia PowerToys wykorzystują narzędzie Elevate Command PowerToy, ono również musi zostać zainstalowane. Po zakończeniu tych czynności można zainstalować pliki CmdHereAsSystem.inf oraz PowerShellHereAsSystem.inf. Gdy te narzędzia PowerToys zostaną zainstalowane, opcje CMD Prompt Here as System oraz PowerShell Prompt Here as System staną się dostępne po kliknięciu prawym przyciskiem myszy elementów folderów oraz napędów w Eksploratorze Windows, jak pokazano na Rysunku 2.

Opcje CMD Prompt Here as System oraz PowerShell Prompt Here as System

Rysunek 2: Opcje CMD Prompt Here as System oraz PowerShell Prompt Here as System.

Rysunek 3 prezentuje wiersz polecenia uruchomiony w kontekście systemu. Wyraziste kolory mają służyć jako przypomnienie, że ten wiersz polecenia jest uruchomiony w kontekście Systemu i że wpisanie nieodpowiednich poleceń może powodować nieoczekiwane (a nawet katastrofalne) konsekwencje w systemie.

Opcja CMD Prompt as System musi być wykorzystywana z rozwagą

Rysunek 3: Opcja CMD Prompt as System musi być wykorzystywana z rozwagą.

Na zakończenie te narzędzia PowerToys dodają polecenia do systemu, aby monity mogły być uruchamiane w oknie dialogowym Uruchom (Run) lub oknie wiersza polecenia. Na przykład wykonanie poniższego polecenia z okna Uruchom spowoduje uruchomienie monitu CMD w kontekście konta System w folderze Windows:

cmdassystem "c:\windows"

Odpowiednikiem tego polecenia w powłoce Windows PowerShellTM jest psassystem. Trzeba zaznaczyć, że autor zmodyfikował również funkcje Prompt Here as Administrator dla programów CMD oraz PowerShell w celu instalacji podobnych poleceń, odpowiednio cmdasadmin oraz psasadmin.

Do początku stronyDo początku strony

Gadżet Elevation

Większość narzędzi PowerToys wymaga kliknięcia prawego przycisku myszy, lecz jako dodatek do tej aktualizacji autor artykuły dołączył coś bardziej efekciarskiego. Jest to gadżet paska bocznego systemu Windows o nazwie Elevation Gadget (pokazany na Rysunku 4 ). Jest to lokalizacja docelowa interakcji typu "przeciągnij i upuść". Wystarczy przeciągnąć z Eksploratora Windows plik wykonywalny lub skrypt, w którym zdefiniowana jest akcja runas, aby zostanie on uruchomiony przy użyciu podniesionych uprawnień.

Gadżet przeciągnij i upuść z mechanizmem podnoszenia uprawnień

Rysunek 4: Gadżet przeciągnij i upuść z mechanizmem podnoszenia uprawnień.

Jeśli na komputerze zainstalowane są poprzednie narzędzia Elevation PowerToys, mechanizm ten będzie wspierał skrypty Windows Script Host, skrypty Windows PowerShell, aplikacje HTML oraz pakiety i poprawki Instalatora Windows (jak również pliki wykonywalne oraz skrypty powłoki poleceń, w których w systemie Windows Vista domyślnie zdefiniowana jest akcja runas). Można także przeciągać więcej niż jeden element jednocześnie. Warto przeciągnąć na obszar gadżetu folder i zobaczyć, co się stanie.

Aby zainstalować gadżet, należy dwukrotnie kliknąć plik Elevation.gadget (dostępny w pobranym kodzie). Aby przejrzeć kod gadżetu, wystarczy dodać do nazwy pliku rozszerzenie .cab, co pozwoli rozpakować zawartość pliku Cab.

Do początku stronyDo początku strony

Podsumowanie

Dostępne do pobrania materiały pomocnicze do tego artykułu zawierają zarówno nowe narzędzia PowerToys, jak i te omówione w poprzednim artykule. Autor dokonał pewnych drobnych poprawek starszych wersji. Na przykład oryginalne wersje narzędzi Windows PowerShell Prompt Here as Administrator oraz Elevate WSH Script instalowały własne kopie plików elevate.cmd oraz elevate.vbs. Ponieważ kilka nowych narzędzi PowerToys również zależy od tych plików, narzędzia te zostały zmodyfikowane tak, aby wymagać instalacji narzędzia Elevate Command PowerToy (w ten sposób dzielą one kopię między sobą). Aby sprawdzić, czy PowerToy wymaga instalacji narzędzia Elevate Command PowerToy, należy sprawdzić nagłówek pliku INF.

W pewnych oryginalnych narzędziach PowerToys zaszły również niewielkie zmiany inne niż funkcjonalne. Przed zainstalowaniem najnowszej wersji narzędzia PowerToy należy zawsze odinstalować straszą. Ponieważ kolekcja ta rozszerzyła się obecnie do 17 narzędzi, dołączone zostały skrypty powłoki poleceń, które służą do instalowania i odinstalowania całej kolekcji (odpowiednio InstallAllPowerToys.cmd oraz UninstallAllPowerToys.cmd). Można dostosować je tak, aby instalować i odinstalowywać tylko wykorzystywane narzędzia.

Należy pamiętać, że plik InstallAllPowerToys.cmd domyślnie nie instaluje funkcji Run as Administrator PowerToys dla narzędzi skryptowych dostarczanych przez zewnętrzne firmy. Można zmodyfikować ten skrypt tak, aby instalowane były jedynie te narzędzia PowerToys, dla których zainstalowane zostało oprogramowanie. Uruchomienie któregokolwiek z nich spowoduje automatyczne przyznanie mu podwyższonych uprawnień. Plik UninstallAllPowerToys.cmd powinien usunąć wszystkie starsze wersje narzędzi.

Podobnie jak pozostałe narzędzia PowerToys tworzone przez autora tego artykułu funkcje te nie są wspierane i mogą być stosowane jedynie na własne ryzyko. Nie stanowią one oficjalnych produktów firmy Microsoft, są to osobiste efekty pracy autora. Były one testowane jedynie przeze niego i kilku innych ochotników w 32-bitowym systemie Windows Vista z ustawieniem domyślnego języka US English. Co więcej istnieje możliwość, że niektóre lub wszystkie narzędzia PowerToys przestaną współpracować z przyszłymi aktualizacjami systemu Windows, dodatkami Service Pack lub wersjami systemu operacyjnego.

O autorze

Michael Murgolo piastuje stanowisko Senior Infrastructure Consultant w Microsoft Consulting Services. Specjalizuje się w systemach operacyjnych, rozmieszczaniu, usługach sieciowych, Active Directory, zarządzaniu systemami, automatyzacji i zarządzaniu aktualizacjami. Jest ekspertem w dziedzinie zarządzania oraz migracji maszyn typu desktop.


Do początku stronyDo początku strony