Centrum skryptów - Systemy operacyjne

Jak otworzyć alternatywną stronę główną, jeżeli domyślna strona główna jest niedostępna?

Udostępnij na: Facebook

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.

Jak otworzyć alternatywną stronę główną, jeżeli domyślna strona główna jest niedostępna?

Cześć, Skrypciarze! W mojej firmie każdy komputer jest tak skonfigurowany, aby wyświetlał naszą stronę sieci intranet jako swoją stronę główną wyszukiwarki Internet Explorer. Wszyscy pracownicy w firmie używają laptopów i kiedy w domu próbują połączyć się z siecią Web otrzymują komunikat o błędzie, który brzmi: „Nie można odnaleźć strony”. Jest to spowodowane tym, że nie mają dostępu do sieci intranet z domu. Czy jest jakiś sposób, aby za pomocą skryptu sprawić, że ci użytkownicy będą mogli otworzyć alternatywną stronę główną, jeżeli sieć intranet jest niedostępna?

-- JF

Cześć, JF. Czy macie ustanowiony jakiś rekord, jeżeli chodzi o robienie zakupów? Ja ostatnio przeszedłem chyba samego siebie. Trochę byłem może do tego zmuszony, ale i tak się liczy. Siedem godzin w centrum handlowym.

Możecie sobie coś takiego wyobrazić? Teraz, kiedy o tym myślę, sam nie mogę uwierzyć w to, że wytrzymałem tyle czasu. Dlaczego aż tyle? Obiecałem po prostu, że nie będę marudził podczas zakupów i że nie będę nikogo poganiał. Chyba wszyscy wiedzą, że jak ja coś obiecuję, to zawsze dotrzymuję słowa. Nie marudziłem w ogóle. Inna sprawa, że nie odezwałem się ani słowem na żaden temat.

Uwaga. Dlaczego? Ponieważ większość z tego czasu przesiedziałem w samotności na seansie filmowym (w tym centrum mają kino) i w knajpce (też na miejscu) i po prostu nie musiałem. Ktoś mógłby zapytać, czy takie wyjście na zakupy się liczy. Oczywiście, że tak. W końcu to ja musiałem dźwigać te wszystkie torby z zakupami całej mojej rodziny. I ani na chwilę nie opuściłem budynku.

W sumie muszę stwierdzić, że takie wyjście na zakupy bardzo mi się podobało. Obejrzałem fajny film, a na dodatek powtórkę meczu w telewizji w knajpce. Nie mogłem sobie przy tym wypić piwka, ale nie można mieć wszystkiego na raz. Ktoś musiał nas przecież zawieźć do domu. Powiem to tak: życzę wszystkim facetom, żeby, jeżeli już koniecznie muszą (oczywiście nie z własnej woli) iść na zakupy, wybrali takie centrum handlowe, w którym można nie tylko biegać po sklepach. Tylko nie uciekajcie do centrum rozrywki, jak tylko wejdziecie do budynku. Trzeba zachować jakieś pozory i wejść przynajmniej do dwóch sklepów. Jeżeli macie jakieś własne sposoby na przetrwanie kilkugodzinnych rodzinnych zakupów, koniecznie dajcie mi znać. O czym to ja miałem Wam jeszcze powiedzieć… No tak, skrypt.

Oto skrypt, który może otworzyć alternatywną stronę główną, jeżeli strona domyślna (czyli firmowa strona sieci intranet) jest niedostępna:

strWebSite = "intranet"



Set objShell = CreateObject("Wscript.Shell")



Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")



Set colItems = objWMIService.ExecQuery _

    ("Select * from Win32_PingStatus Where Address = '" & strWebSite & "'")



For Each objItem in colItems

    If objItem.StatusCode = 0 Then

        objShell.Run "http://intranet.company.com"

    Else

        objShell.Run "https://www.microsoft.com/technet/scriptcenter/default.mspx"

    End If

Next

Zanim przejdę do omawiania skryptu, chciałbym zauważyć, że nie znam żadnego sposobu dodania alternatywnej strony głównej do wyszukiwarki Internet Explorer. Dlatego musimy uciec się do pewnej sztuczki. Ten skrypt powinien zostać zapisany jako plik .VBS, a użytkownicy powinni zostać poinstruowani, że powinni kliknąć skrypt za każdym razem, gdy chcą uruchomić program Internet Explorer. Tak, pewnym prostym sposobem jest przekierowanie skrótów menu startowego programu Internet Explorer tak, aby uruchamiały ten skrypt zamiast bezpośrednio otwierać program Internet Explorer.

Jeżeli chodzi o sam skrypt, zaczynamy od przypisania nazwy serwera obsługującego stronę główną sieci intranet do zmiennej o nazwie strWebSite. Moglibyśmy także przypisać zmiennej strWebSite adres IP dla strony głównej. Innymi słowy moglibyśmy zrobić to:

strWebSite = "192.168.1.1"

Po przypisaniu wartości do zmiennej strWebSite tworzymy wystąpienie obiektu Wscript.Shell. Zastosujemy ten obiekt do otwarcia nowego wystąpienia programu Internet Explorer. Lub też - nowego wystąpienia programu FireFox lub Opera, lub każdej innej domyślnie używanej przeglądarki sieci Web. (Jeżeli nie używacie programu Internet Explorer, nie mówcie nam o tym. Nasza Redaktorka mogłaby się przez to rozpłakać).

Teraz łączymy się z usługą WMI na komputerze lokalnym i używamy poniższego wiersza kodu (oraz klasę Win32_PingStatus) w celu wysłania polecenia ping – w tym przypadku – do sieci intranet komputera:

Set colItems = objWMIService.ExecQuery _

    ("Select * from Win32_PingStatus Where Address = '" & strWebSite & "'")

Klasa Win32_PingStatus przekaże nam wartość właściwości – StatusCode, która powie nam, czy możemy wysłać polecenie ping do danego komputera. Jeżeli wartość właściwości StatusCode jest równa 0, oznacza to, że udało się wysłać polecenie ping. Jeżeli właściwość StatusCode ma jakąkolwiek inną wartość, świadczy to o tym, że próba się nie powiodła. Co to wszystko oznacza? Oznacza to, że możemy określić, czy sieć intranet komputera jest dostępna, na dwa sposoby: 1) uruchamiając pętlę For Each, która przejdzie przez kolekcję danych uzyskanych za pomocą polecenia ping przez klasę Win32_PingStatus oraz 2) wewnątrz tej pętli sprawdzamy, czy wartość właściwości StatusCode to 0:

If objItem.StatusCode = 0 Then

Jeżeli właściwość StatusCode ma wartość 0, oznacza to, że jesteśmy w sieci intranet. Wtedy używamy następującego wiersza kodu, metody Run w celu otwarcia strony głównej sieci intranet:

objShell.Run "http://intranet.company.com"

Jeżeli właściwość StatusCode nie jest równa 0, oznacza to, że sieć intranet nie jest dostępna. W takim przypadku otwieramy alternatywną stronę główną:

objShell.Run "https://www.microsoft.com/technet/scriptcenter/default.mspx"

Jest to strona główna Centrum Skryptów. Czy jeżeli nie można otworzyć strony głównej sieci intranet, konieczne jest otworzenie strony głównej Centrum Skryptów? Nie, oczywiście że – chociaż: tak, jasne, że tak. Tak naprawdę, zawsze powinno się najpierw otwierać stronę główną Centrum Skryptów. Kto wie, jakie straszne rzeczy mogą się stać, jeżeli ta strona nie zostanie otwarta.

Uwaga. Cóż, przyznaję. Nic strasznego się nie stanie. Chodzi nam po prostu o jak największą liczbę wyświetleń strony. W taki czy inny sposób.

Poprzedni skrypt działa całkiem nieźle i na dodatek całkiem szybko. Głównie dlatego, że polecenie ping działa szybko. Ma on jednak kilka możliwych wad. Po pierwsze, należy znać nazwę (adres IP) serwera, który obsługuje stronę główną sieci intranet. Próba wysłania polecenia ping do bieżącej strony sieci Web nie zadziała (np. http://intranet/company/com/default.htm). Ponadto, klasa Win32_PingStatus nie istniała dopóki nie wprowadzono systemu Windows XP. Komputery z zainstalowanym systemem Windows 2000 nie będą mogły uruchomić tego skryptu.

Dlatego proponuję Wam plan awaryjny. Poniższy skrypt wykorzystuje obiekt MSXML2.XMLHTTP do połączenia się z bieżącą stroną sieci Web: http://intranet/company/com/default.htm. Jeżeli połączenie się uda (czyli jeżeli metoda Open przekaże nam wartość StatusText równą OK) możemy otworzyć stronę sieci intranet. Jeżeli wartość właściwości StatusText będzie inna niż OK, otwieramy stronę główną Centrum Skryptów. Tak wygląda nasz skrypt planu B:

On Error Resume Next



Set objShell = CreateObject("Wscript.Shell")



strURL = "http://intranet.company.com/default.htm"



Set objHTTP = CreateObject("MSXML2.XMLHTTP") 

objHTTP.Open "GET", strURL, FALSE

objHTTP.Send



If objHTTP.StatusText = "OK" Then

    objShell.Run "http://intranet.company.com"

Else

    objShell.Run "https://www.microsoft.com/technet/scriptcenter/default.mspx"

End If

Ten skrypt zadziała również na komputerze z zainstalowanym systemem Windows 2000 i umożliwia połączenie ze stroną sieci Web zamiast serwera. Jakieś wady? Jest może trochę wolniejszy niż skrypt wykorzystujący polecenie ping. Podczas gdy skrypt z poleceniem ping potrzebuje około 10 sekund, nasz skrypt awaryjny będzie działał przez około 30 sekund. Należy o tym pamiętać.

Mam nadzieję, że się przyda, JF. To jest właśnie ta sztuczka, o której mówiłem. Zawsze działa.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne