Szybkie odpowiedzi Skrypciarzy
Skrypciarze odpowiadają na Wasze pytania
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? | |
Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell? | |
Czy pomożecie mi dostosować skrypt? | |
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! 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ść, 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
Czy można podwyższyć uprawnienia w kontroli konta użytkownika za pomocą programu Windows PowerShell?
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ść, 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
Czy pomożecie mi dostosować skrypt?
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ść, 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
Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?
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ść, 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 |
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
Jak odszukać ostatniego zalogowanego użytkownika na komputerze z systemem Windows Vista?
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ść, 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 |