Centrum Skryptóe - Systemy Operacyjne

Jak usunąć daną wartość ze zmiennej środowiskowej Path?

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 usunąć daną wartość ze zmiennej środowiskowej Path?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Jak usunąć daną wartość ze zmiennej środowiska Path?

-- MG

Cześć Skrypciarze! Odpowiedź

Cześć, MG. Ciekawe, czy ktoś z Was pomyślał sobie przez chwilę, że skoro już nie ma nas fizycznie w firmie, bo jesteśmy gdzie indziej, a mianowicie na konferencji Tech IT Forum, to dzisiejszej rubryki nie będzie. Myślę, że wielu z naszych czytelników mogło sobie wyobrażać, że skoro mamy tak strasznie dużo do zrobienia przed wyjazdem, bo przecież tyle o tym mówiliśmy, to nikt nie wpadnie na to, żeby zatroszczyć się o to, kto ma się zająć rubryką Cześć Skrypciarze!. I tu Was zaskoczę. Nie będzie żadnych zmian, o wszystko zadbaliśmy nikt nie będzie rozczarowany. No może tylko ci, którzy zaglądają do naszej rubryki tylko po to, żeby poprawić sobie humor czytając nasze błyskotliwe anegdotki. Z tym w czasie naszej nieobecności może być ciężko. Ale nadrobimy zaległości po powrocie. W końcu wrócimy z Barcelony i na pewno będzie wiele do opowiadania, tym bardziej, że przecież mamy Jean Ross, która na pewno dostarczy nam odpowiednich inspiracji. Tymczasem musicie zadowolić się skryptem, który usuwa wartość ze zmiennej środowiskowej Path. Oto on:

strComputer = "."



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



Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Environment Where Name = 'Path'")



For Each objItem in colItems

    strPath = objItem.VariableValue

    strPath = Replace(strPath, ";C:\Test", "")

    objItem.VariableValue = strPath

    objItem.Put_

Next

Zatem jak dokładnie usuwamy coś ze zmiennej środowiska Path? No cóż, na początek łączymy się z usługą WMI na lokalnym komputerze. O tak, możemy zastosować ten skrypt w celu zmodyfikowania zmiennej Path na zdalnym komputerze; wystarczy tylko przypisać nazwę tego zdalnego komputera do zmiennej strComputer:

strComputer = "atl-fs-001"

Następnie stosujemy metodę ExecQuery w celu pobrania kolekcji wszystkich zmiennych środowiska posiadających właściwość Name o wartości Path:

Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Environment Where Name = 'Path'")

Ponieważ zmienne środowiska muszą mieć niepowtarzalne nazwy, ta kwerenda przekaże nam kolekcję zawierającą tylko jedną taką zmienną środowiska: Path.

Oczywiście nawet jeden element może tworzyć kolekcję; z tego powodu musimy uruchomić pętlę For Each, która przejdzie przez każdy element w kolekcji. Wewnątrz tej pętli pobieramy wartość właściwości VariableValue zmiennej środowiskowej Path i zachowujemy ją w zmiennej o nazwie strPath:

strPath = objItem.VariableValue

Na wypadek, gdyby ktoś się zastanawiał: dzięki temu zmienna strPath uzyska wartość podobną do poniższej. Dobrze się przyjrzyjcie, a zobaczycie folder docelowy C:\Test (wartość, którą chcemy usunąć ze zmiennej środowiska Path) znajdujący się mniej więcej pośrodku tej wartości:

D:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;

C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\HPQ\IAM\bin;

C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Scripts;C:\Test;

C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\Common Files\Adobe\AGL;

C:\Program Files\QuickTime\QTSystem

To świetnie. Ale jak dokładnie pozbędziemy się folderu docelowego? To kolejna prosta rzecz; w końcu od tego mamy poniższy wiersz kodu:

strPath = Replace(strPath, ";C:\Test", "")

Teraz stosujemy funkcję Replace w celu przeszukania zmiennej środowiskowej Path (lub bardziej technicznie mówiąc: zmiennej strPath) oraz zlokalizowania wartości ;C:\Test, a następnie zastąpimy ją niczym. (Lub bardziej precyzyjnie mówiąc, pustym ciągiem.) Zauważmy, że szukamy wartości ;C:\Test, będącej ścieżką folderu posiadającą średnik na początku. Dlaczego to robimy? Cóż, w ten sposób otrzymamy ładną, zgrabną ścieżkę. W końcu, gdybyśmy tak po prostu usunęli folder C:\Test, otrzymalibyśmy podwójne średniki w ścieżce:

C:\Scripts;;C:\WINDOWS\system32\WindowsPowerShell\v1.0;

Czy to mogłoby spowodować jakiś problem? Prawdę mówiąc, nie jestem pewien. Zapobiegawczo postanowiłem uniknąć posiadania podwójnych średników w ścieżce.

Oczywiście mamy tutaj jeden potencjalny problem: jeżeli C:\Test pojawi się na samym początku zmiennej Path, nie będzie posiadać średnika na początku. W takim przypadku polecenie Replace nie zastąpi niczego. W wyniku tego, może zajść potrzeba zastosowania poniższego fragmentu kodu:

If Left(strPath, 8) = "C:\Test;" Then

    strPath = Replace(strPath, "C:\Test;", "")

Else

    strPath = Replace(strPath, ";C:\Test", "")

End If

Teraz wystarczy sprawdzić, czy pierwsze osiem znaków w ścieżce to C:\Test;. Jeżeli tak jest, to są te znaki, które zastąpimy pustym ciągiem; jeżeli nie, zastępujemy znaki ;C:\Test.

Żeby mieć całkowitą pewność.

Niezależnie od tego, naszym następnym posunięciem jest przypisanie zmodyfikowanej wartości zmiennej strPath do właściwości VariableValue, a następnie stosujemy metodę Put_, aby formalnie wpisać te zmiany do rzeczywistej zmiennej środowiska Path. Do tego posłużą nam poniższe wiersze kodu:

objItem.VariableValue = strPath

objItem.Put_

Kiedy to już zrobimy, to znaczy, że wszystko jest już zrobione. Przynajmniej, jeżeli chodzi o ten właśnie skrypt.

A tak w ogóle to zapraszam na stoisko 22 na konferencji, czekamy tam na Was my oraz całe mnóstwo atrakcji, w tym możliwość wygrania laleczki doktora Scripto.

Jeżeli nie dacie rady, no cóż, będziecie musieli zadowolić się tym, co na ten temat napiszemy po powrocie.

 Do początku strony Do początku strony

Centrum Skryptóe - Systemy Operacyjne