Centrum skryptów - Microsoft office

Jak utworzyć nowy obszar nazw WMI, znajdujący się w obszarze katalogu głównego?

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.

Jak utworzyć nowy obszar nazw WMI, znajdujący się w obszarze katalogu głównego?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak utworzyć nowy obszar nazw WMI, znajdujący się w obszarze nazw katalogu głównego?

--MT

Cześć Skrypciarze! Odpowiedź

Cześć, MT. Jak leci? Mamy nadzieję, że bardzo dobrze lub chociażby dobrze. Ogólnie rzecz biorąc, mamy nadzieję, że wszystkim leci dobrze (no dobra, jesteśmy przyłapani, prawie wszystkim, jest kilka wyjątków). Jeżeli jednak nie leci Wam tak wyśmienicie, to nie martwcie się, mamy coś na pocieszenie – właśnie otrzymaliśmy informację, że można już nabyć trumny i urny w kolorach Waszej ulubionej drużyny baseballowej, zaopatrzone w logo tegoż zespołu.

Nie myślcie, że jestem aż tak zainteresowany śmiercią, życiem po śmierci, itp. Jednak przeglądając gazetę natknąłem się na ogłoszenie ze zdjęciem takiej urny z logo drużyny, a pod nią widniał podpis: „Zamów teraz, zapasy ograniczone”. Nie wymaga to chyba komentarza. Uczcijmy to raczej minutą ciszy...

Jeżeli jednak nie pocieszyła Was ta informacja, ani nawet nie rozweseliła, to może zrobi to skrypt, dzięki któremu będziecie mogli utworzyć nowy obszar nazw WMI znajdujący się w obszarze katalogu głównego:

strComputer = "."



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root")



Set objItem = objWMIService.Get("__Namespace")

Set objNamespace = objItem.SpawnInstance_



objNamespace.Name = "ScriptCenter"

objNamespace.Put_

Uwaga: Jeżeli skrypt ten uruchomicie w systemie Windows Vista ze standardowymi uprawnieniami administratora, otrzymacie następujące powiadomienie o błędzie:

C:\scripts\hey0725.vbs(9, 1) SWbemObjectEx: Access denied

Aby ten skrypt zadziałał w systemie Windows Vista, trzeba go uruchomić z podwyższonymi uprawnieniami. Wymaga to uruchomienia z wiersza polecenia. W tym celu należy kliknąć wiersz polecenia prawym przyciskiem myszy i wybrać opcję Uruchom jako administrator.

Całkiem możliwe, że nigdy, przez całe Wasze życie, nie najdzie Was potrzeba, aby utworzyć nowy obszar nazw WMI znajdujący się w obszarze katalogu głównego, pytanie nas jednak dość zaintrygowało, ponieważ można dzięki niemu zobaczyć jak na dłoni, jak fajną rzeczą są skrypty WMI. Można nawet pisać skrypty, które modyfikują samą usługę WMI. Tworzenie obszaru nazw nie jest być może największym wyzwaniem, jakie może stanąć przed WMI, ale jest na pewno godne uwagi. Jeżeli interesuje Was więcej praktycznych i typowych użyć WMI, to zapraszamy na WMI Scripting Primer (j.ang.) w przewodniku Microsoft Windows 2000 Scripting Guide.

Zaczynamy od połączenia się z usługą WMI na komputerze lokalnym (można oczywiście uruchomić skrypt na zdalnym komputerze, przypisując nazwę komputera zmiennej strComputer). Po połączeniu się z usługą WMI, za pomocą metody Get łączymy się z klasą __Namespace class (zwróćcie uwagę, że przed słowem Namespace występują dwa podkreślniki):

C:\scripts\hey0725.vbs(9, 1) SWbemObjectEx: Access denied

Klasa __Namespace zawiera wystąpienia danych dla wszystkich obszarów nazw znajdujących się – w tym wypadku – w obszarze nazw katalogu głównego. Jako że chcemy utworzyć zupełnie nowy obszar nazw, naszym kolejnym krokiem będzie przywołanie metody SpawnInstance_ , która tworzy nam zupełnie nowy, pusty obszar nazw:

Set objNamespace = objItem.SpawnInstance_

Ponieważ nowy obszar nazw sam potrzebuje przynajmniej nazwy, nadajemy właściwości Name wartość ScriptCenter:

objNamespace.Name = "ScriptCenter"

Czy to już koniec? No cóż, prawie, teraz jeszcze przywołując metodę Put_ wpisujemy nowy obszar nazw (root\ScriptCenter) do repozytorium:

objNamespace.Put_

Teraz dopiero koniec. Prawie…

Znamy się przecież nie od dziś i chcemy uprzedzić pytanie: „jak wykasować nowy obszar nazw?” Nie jest to trudne, więc nie wymaga osobnego artykułu, jeżeli więc chcecie usunąć obszar nazw root\ScriptCenter , wystarczy jedynie uruchomić poniższy skrypt:

strComputer = "."



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root")



Set objItem = objWMIService.Get("__Namespace.Name='ScriptCenter'")

objItem.Delete_
Uwaga: Tylko ostrożnie z powyższym skryptem. Jeżeli chcemy utworzyć, po czym usunąć niestandardowy obszar nazw o nazwie ScriptCenter, to śmiało, nie ma przeciwwskazań. Jeżeli jednak spróbujecie usunąć wbudowany obszar nazw WMI przy korzystając z tego samego sposobu, to sami prosicie się o kłopoty…

W drugim skrypcie raz jeszcze łączymy się z usługą WMI, tym razem jednak używamy poniższego wiersza kodu, aby połączyć się bezpośrednio z obszarem nazw root\ScriptCenter:

Set objItem = objWMIService.Get("__Namespace.Name='ScriptCenter'")

Łączymy się tu z wystąpieniem klasy __Namespace, którego nazwa (Name) równa jest ScriptCenter. Po połączeniu możemy skorzystać z metody Delete_ i usunąć żądany obszar nazw z repozytorium WMI:

objItem.Delete_

Łatwe, proste i przyjemne.

Chcąc jednak uprzedzić kolejne Wasze pytanie do Skrypciarzy, załączam niniejszym listę klubów baseballowych, których logo można znaleźć na urnach:

  • St. Louis Cardinals
  • Atlanta Braves
  • Boston Red Sox
  • Chicago Cubs
  • Detroit Tigers
  • Los Angeles Dodgers
  • New York Yankees
  • Philadelphia Phillies

Osobiście polecam urnę Chicago Cubs…

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office