Centrum Skryptów - Systemy Operacyjne

Szybkie odpowiedzi Skrypciarzy

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Zawartość strony
 Co będzie z językiem VBScript i hostem skryptów systemu Windows?   Co będzie z językiem VBScript i hostem skryptów systemu Windows?
 Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell?   Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell?
 Czy pomożecie mi dostosować skrypt?   Czy pomożecie mi dostosować skrypt?
 Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?   Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?

Co będzie z językiem VBScript i hostem skryptów systemu Windows?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Czy w 2010 roku język VBScript i host skryptów systemu Windows są już całkowicie martwe? Czy istnieje jakiś sposób, aby korzystać z technologii IntelliSense w skryptach języka VBScript w programie Visual Studio 2008? Przy okazji: nie piszę skryptu na stronę internetową ASP. Na wszystkich stronach firmy Microsoft poświęconych pisaniu skryptów języka VBScript w programie Visual Studio zakłada się, że skrypt jest przeznaczony do Internetu. Chcę tylko korzystać z technologii IntelliSense i debugowania w zwykłych skryptach języka VBScript w systemie Windows XP. Nie chcę pisać skryptów w Notatniku.

Co więcej, mnóstwo stron w witrynie MSDN poleca korzystanie z narzędzia Windows Script Debugger, które już nie istnieje. Jednak nie odpowiadacie przecież za całą witrynę MSDN, nie będę więc podawać, o które strony chodzi. Będę wdzięczny za wszelkie wskazówki!

— DW

Cześć Skrypciarze! Odpowiedź

Cześć, DW!

Czołem, tutaj skrypciarz Ed Wilson. Zarówno język VBScript, jak i host skryptów systemu Windows znajdują się w trybie konserwacji. Oznacza to, że nie są w ich przypadku prowadzone już prace programistyczne. Ostatnie zmiany wprowadzone w języku VBScript były przeznaczone do systemu Windows XP. Wersja języka VBScript dostarczana z systemami Windows Vista, Windows Server 2008 i Windows 7 nie zawiera żadnych nowych funkcji. Wprowadzono jedynie kilka poprawek błędów. Nigdy nie lubiłem używania programu Visual Studio do pisania skryptów języka VBScript. Mam znajomego, który kiedyś pokazał mi, jak to robić. Jednak zapewnienie prawidłowego działania skryptów było bardzo męczące i wymagało pisania makr dodawanych do niestandardowych przycisków programu Visual Studio. Używam więc komercyjnie dostępnego edytora skryptów i bardzo to sobie chwalę. Dostępne są też bezpłatne edytory skryptów z obsługą języka VBScript.

Debuger języka VBScript nigdy tak naprawdę nie działał szczególnie dobrze. Korzystam z funkcji debugowania edytora skryptów — działa ona bardzo podobnie do debugera w programie Visual Studio. Szczerze mówiąc, rzadko potrzebuję bardziej zaawansowanych metod debugowania skryptów niż proste wywołanie instrukcji wscript.echo w celu wyświetlenia wartości zmiennej. Zwykle piszę skrypty z użyciem funkcji i procedur, co ułatwia programowanie i, w razie potrzeby, rozwiązywanie problemów.

Program Windows PowerShell 2.0 ma środowisko ISE (zintegrowane środowisko skryptów), udostępniające rozbudowaną funkcjonalność IntelliSense i debugowanie.

 Do początku strony Do początku strony

Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell? Chodzi o coś w rodzaju polecenia sudo lub su.

— DO

Cześć Skrypciarze! Odpowiedź

Cześć, DO!

Można zastosować takie rozwiązanie, jak w funkcji Elevate-Process poniżej.

Funkcja Elevate-Process

function elevate-process

{

                $file, [string]$arguments = $args;

                $psi = new-object System.Diagnostics.ProcessStartInfo $file;

                $psi.Arguments = $arguments;

                $psi.Verb = "runas";

                $psi.WorkingDirectory = get-location;

                [System.Diagnostics.Process]::Start($psi);

}

Set-Alias sudo elevate-process

Możesz też zapoznać się z rozbudowanymi narzędziami podwyższania uprawnień autorstwa Michaela (j.ang.).

 Do początku strony Do początku strony

Czy pomożecie mi dostosować skrypt?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Przeczytałam wasz artykuł Jak wyszukiwać i wyróżniać słowa w dokumencie programu Microsoft Word (j.ang.) i zastanawiam się nad pewną zmianą, która pozwoliłaby lepiej dostosować ten skrypt do moich potrzeb. Pobrałam kilka przykładowych pytań testowych z witryny FCC (j.ang.) i chciałabym wyróżnić wszystkie wiersze w dokumentu, które kończą się znakami „@@” (wskazują one wiersze z prawidłową odpowiedzią na dane pytanie). Mam kilka pytań:

  • Czy wasz skrypt można w taki sposób zmodyfikować?
  • Czy skrypt może pozwolić mi na wybór koloru, który ma zostać użyty?
  • Czy można dostosować wasz skrypt w taki sposób, aby działał w programach pakietu Office for Mac 2008 (lub napisać nowy skrypt)?

— ST

Cześć Skrypciarze! Odpowiedź

Cześć, ST!

Tak, sądzę, że skrypt można zmodyfikować. Musisz zmienić następujący wiersz kodu:

arrWords = Array("boldface", "the")

Powyższy wiersz kodu wyszukuje dwa słowa. Pierwsze z nich to boldface, a drugie to the. Jeśli chcesz wyszukać tylko słowa kończące się znakami @@, wprowadź takie zmiany:

strWordWord = "@@"



    objSelection.Find.Text = strWord

    objSelection.Find.Forward = TRUE

    objSelection.Find.MatchWholeWord = FALSE



    objSelection.Find.Replacement.Highlight = TRUE



    objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll

Zwróć uwagę, że pozbyłem się tablicy i zmieniłem wartość właściwości matchwholeword na false. Kolor wyróżnienia można zmienić bez problemu. Odpowiednie informacje są podane we wspomnianym przez Ciebie artykule (j.ang.). Poniżej odpowiedni fragment:

„Hej, wystarczyło zapytać! Przypisanie wyróżnieniu innego koloru jest w istocie dosyć łatwe. W tym celu zacznij od wyboru stałej i wartości z poniższej tabeli:”

W początkowej części skryptu zdefiniuj stałą i przypisz jej odpowiednią wartość. Aby użyć turkusowego, należy więc utworzyć stałą widoczną poniżej:

Const wdTurquoise = 3

Następnie, po utworzeniu wystąpienia obiektu Word.Application, utwórz wystąpienie obiektu Options, przypisując wybraną stałą właściwości DefaultHighlightColorIndex:

Set objOptions = objWord.OptionsobjOptions.DefaultHighlightColorIndex = wdTurquoise

Nie jestem pewien, czy uda się użyć języka VBScript na komputerze Macintosh, bo nigdy takiego nie miałem, a nie mam też do niego dostępu do celów testowych. Jeśli na komputerze będzie host skryptów systemu Windows, przypuszczam, że będzie to możliwe, ale zaznaczam, że to tylko przypuszczenie! Najlepszym wyjściem byłoby przetestowanie skryptu w obcnej postaci przed wprowadzeniem w nim większych zmian.

 Do początku strony Do początku strony

Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Wasza witryna bardzo mi się przydaje w karierze skrypciarza. Przeglądam wasz skrypt podany w artykule W jaki sposób sprawdzić, który użytkownik ostatnio logował się na komputerze, ale chyba nie działa on na komputerze z systemem Windows Vista. Uzyskuję pustą wartość zarówno właściwości DefaultUserName, jak i DefaultDomainName. Macie jakieś pomysły, co z tym zrobić? Używam WMI do sprawdzania mnóstwa informacji na komputerach z systemem Vista, tak więc zlokalizowanie podobnego pola, pozwalającego mi uzyskać odpowiednie dane, bardzo by mi się przydało.

— LG

Cześć Skrypciarze! Odpowiedź

Cześć, LG!

Na moim komputerze z systemem Windows Vista skrypt podaje informacje o administratorze. Nie wiem, kiedy ostatni raz logowałem się na komputer jako administrator. Nie istnieje klasa WMI podająca ostatnią osobę logującą się na komputer. Można sprawdzić jedynie bieżącą osobę. Rzuć okiem na ten artykuł archiwalny (j.ang.), gdzie przedstawiamy inne podejście. Używany jest tu program Windows PowerShell, ale jeśli potrzebujesz języka VBScript, dostosowanie skryptu nie będzie problemem. W skrypcie tym tworzę własny klucz rejestru. Dzięki temu wiem, co się w nim znajduje. W ten sposób można zapisać nazwę użytkownika i godzinę. Warto jednak mieć na uwadze, że w skrypcie używam wartości HKCU, która będzie oczywiście inna dla każdego użytkownika. Jeśli chcesz zapisać nazwę ostatniego użytkownika w HKLM, musisz zmodyfikować uprawnienia związane z kluczem rejestru w taki sposób, aby umożliwić uwierzytelnionemu użytkownikowi dokonanie w nim zapisu.

I to już ostatnia z szybkich piątkowych odpowiedzi. Zapraszamy w poniedziałek.

Jeśli chcecie szybciej dowiadywać się, jakim tematom poświęcone będą kolejne artykuły, śledźcie nas w serwisie Twitter lub Facebook. W razie jakichkolwiek pytań piszcie do nas na adres scripter@microsoft.com lub publikujcie na oficjalnym forum skrypciarzy. Do zobaczenia jutro.

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne

Constant

 Value

 

wdAuto

 0

 

wdBlack

 1

 

wdBlue

 2

 

wdBrightGreen

 4

 

wdByAuthor

 -1

 

wdDarkBlue

 9

 

wdDarkRed

 13

 

wdDarkYellow

 14

 

wdGray25

 16

 

wdGray50

 15

 

wdGreen

 11

 

wdNoHighlight

 0

 

wdPink

 5

 

wdRed

 6

 

wdTeal

 10

 

wdTurquoise

 3

 

wdViolet

 12

 

wdWhite

 8

 

wdYellow

 7

W początkowej części skryptu zdefiniuj stałą i przypisz jej odpowiednią wartość. Aby użyć turkusowego, należy więc utworzyć stałą widoczną poniżej:

Const wdTurquoise = 3

Następnie, po utworzeniu wystąpienia obiektu Word.Application, utwórz wystąpienie obiektu Options, przypisując wybraną stałą właściwości DefaultHighlightColorIndex:

Set objOptions = objWord.Options

objOptions.DefaultHighlightColorIndex = wdTurquoise

Nie jestem pewien, czy uda się użyć języka VBScript na komputerze Macintosh, bo nigdy takiego nie miałem, a nie mam też do niego dostępu do celów testowych. Jeśli na komputerze będzie host skryptów systemu Windows, przypuszczam, że będzie to możliwe, ale zaznaczam, że to tylko przypuszczenie! Najlepszym wyjściem byłoby przetestowanie skryptu w obcnej postaci przed wprowadzeniem w nim większych zmian.

 Do początku strony Do początku strony

Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Wasza witryna bardzo mi się przydaje w karierze skrypciarza. Przeglądam wasz skrypt podany w artykule W jaki sposób sprawdzić, który użytkownik ostatnio logował się na komputerze, ale chyba nie działa on na komputerze z systemem Windows Vista. Uzyskuję pustą wartość zarówno właściwości DefaultUserName, jak i DefaultDomainName. Macie jakieś pomysły, co z tym zrobić? Używam WMI do sprawdzania mnóstwa informacji na komputerach z systemem Vista, tak więc zlokalizowanie podobnego pola, pozwalającego mi uzyskać odpowiednie dane, bardzo by mi się przydało.

— LG

Cześć Skrypciarze! Odpowiedź

Cześć, LG!

Na moim komputerze z systemem Windows Vista skrypt podaje informacje o administratorze. Nie wiem, kiedy ostatni raz logowałem się na komputer jako administrator. Nie istnieje klasa WMI podająca ostatnią osobę logującą się na komputer. Można sprawdzić jedynie bieżącą osobę. Rzuć okiem na ten artykuł archiwalny (j.ang.), gdzie przedstawiamy inne podejście. Używany jest tu program Windows PowerShell, ale jeśli potrzebujesz języka VBScript, dostosowanie skryptu nie będzie problemem. W skrypcie tym tworzę własny klucz rejestru. Dzięki temu wiem, co się w nim znajduje. W ten sposób można zapisać nazwę użytkownika i godzinę. Warto jednak mieć na uwadze, że w skrypcie używam wartości HKCU, która będzie oczywiście inna dla każdego użytkownika. Jeśli chcesz zapisać nazwę ostatniego użytkownika w HKLM, musisz zmodyfikować uprawnienia związane z kluczem rejestru w taki sposób, aby umożliwić uwierzytelnionemu użytkownikowi dokonanie w nim zapisu.

I to już ostatnia z szybkich piątkowych odpowiedzi. Zapraszamy w poniedziałek.

Jeśli chcecie szybciej dowiadywać się, jakim tematom poświęcone będą kolejne artykuły, śledźcie nas w serwisie Twitter lub Facebook. W razie jakichkolwiek pytań piszcie do nas na adres scripter@microsoft.com lub publikujcie na oficjalnym forum skrypciarzy. Do zobaczenia jutro.

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne