Centrum skryptów - Systemy operacyjne

Jak pobrać informacje na temat wszystkich plików skrótów znajdujących się w folderze?

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 pobrać informacje na temat wszystkich plików skrótów znajdujących się w folderze?

Cześć, Skrypciarze! Mam folder zawierający około 1800 skrótów. Muszę pobrać nazwę pliku oraz cel do którego prowadzi każdy z tych skrótów w celu zaimportowania tych informacji do bazy danych. Czy wiecie, jak pobrać te informacje dla każdego pliku skrótu znajdującego się w folderze?

-- JK

Czzześć, JK. Cóż, Prawddddopoddobnie najllepsssymm sposobbemn , przeprasszaam, alle ciężko jjestt pissać naa klawiaturze w rękawiiczzkachh z jeddnymm pallcem.

Przepraszam. Jak już mówiłem, ciężko jest pisać w mitenkach. Tak właśnie się te rękawiczki nazywają. Nasza Redaktorka mi o tym powiedziała. Sama takie często nosi.

Cóż to? Dlaczego w ogóle noszę te rękawiczki w pracy? To trochę długa historia. Ale jeżeli się upieracie, to Wam powiem, o co chodzi. Otóż piękna pogoda, jaką mieliśmy w weekend urzekła mnie do tego stopnia, że zrobiłem coś, co robię naprawdę bardzo rzadko. Poszedłem na naprawdę dłuuugi spacer. Było po prostu pięknie. Słońce, lekki wiosenny deszczyk. Brak mi słów, żeby to opisać. Spacer się trochę przedłużył, a kiedy zaszło słońce zrobiło się chłodno. Po chwili zrobiło się zimno.

Pogoda o tej porze roku jest, co tu dużo mówić, zdradliwa. Efekt był taki, że strasznie zmarzłem, bo spacer był naprawdę długi. Teraz cierpię strasznie, mam gorączkę, dreszcze i jest mi strasznie zimno. Nie muszę chyba mówić, że palce mam też skostniałe. Stąd te mitenki. Nie powiem, żeby wiele pomagały, ale zawsze to jakieś poczucie, że w rękawiczkach cieplej. Jak na złość temperatura w biurze wcale nie jest sprzyjająca mojemu wyzdrowieniu i obawiam się, że szybko to nie nastąpi. Wcale nie żartuję, czuję się coraz gorzej. Ledwo trzymam się na nogach. Miewam też mroczki przed oczami.

Chciałbym być teraz gdzie indziej. Na przykład w domu pod ciepłą kołdrą.

Przed telewizorem z kubkiem mleka z miodem w ręku. Rety, sam nie wierzę, że tego chcę. Naprawdę nie czuję się dobrze. Jest mi tak zimno, że nie wiem, czy moje zmarznięte palce dadzą radę wystukać na klawiaturze odpowiedź na dzisiejsze pytanie. No dobra, biorę się w garść, rozmrażam palce na kubku gorącej herbaty (mleka i miodu u nas w firmie niestety nie ma, jest tylko mleczko do kawy) na tyle, żeby móc napisać skrypt przekazujący nam nazwę pliku i miejsce docelowe dla wszystkich plików skrótów znajdujących się w określonym folderze:

strComputer = "."



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



Set colShortcuts = objWMIService.ExecQuery("Select * From Win32_ShortcutFile Where " & _

    "Drive = 'c:' AND Path = '\\documents and settings\\all users\\shortcut_files\\'")



For Each objShortcut in colShortcuts

    Wscript.Echo objShortcut.FileName

    Wscript.Echo objShortcut.Name

    Wscript.Echo objShortcut.Target

    Wscript.Echo

Next

Adkab dsgjdsa fli.

Przepraszam, wełniana czapka znowu zsunęła mi się na oczy. Jak widzimy (zakładając, że nie macie na oczach wełnianej czapki), zaczynamy od połączenia się z usługą WMI na lokalnym komputerze. Czy możemy uruchomić ten skrypt na zdalnym komputerze? Oczywiście, że tak. W tym celu musimy tylko przypisać nazwę zdalnego komputera do zmiennej strComputer:

strComputer = "atl-fs-001"

Po połączeniu się z usługą WMI używamy następującej kwerendy w celu pobrania kolekcji wszystkich plików skrótów znajdujących się w folderze C:\Documents and Settings\All Users\Shortcut_Files:

Set colShortcuts = objWMIService.ExecQuery("Select * From Win32_ShortcutFile Where " & _

    "Drive = 'c:' AND Path = '\\documents and settings\\all users\\shortcut_files\\'")

Przyjrzyjmy się bliżej tej kwerendzie. Na początek zauważmy, że wybieramy elementy z klasy Win32_ShortcutFile. Jak sama nazwa wskazuje, ta klasa zawiera wystąpienia wszystkich plików skrótów znajdujących się na komputerze. Ponadto, dodaliśmy klauzulę Where z następującymi dwoma warunkami: 1) wszystkie pobrane pliki muszą znajdować się na dysku C (Drive = 'c:') oraz 2) pobrane pliki muszą znajdować się w folderze Documents and Settings\All Users\Shortcut_Files.

Tak czy inaczej, ta klauzula Where nie jest tak prosta, jak mogłoby się wydawać. Po pierwsze musimy ją rozdzielić na dwie części: musi nastąpić odwołanie do dysku oddzielnie ze ścieżki folderu. Usługa WMI nie pozwoli na wywołanie plików z folderu C:\Documents and Settings\All Users\Shortcut_Files. Konieczne będzie natomiast wywołanie plików z dysku C oraz folderu \Documents and Settings\All Users\Shortcut_Files (kompletna ścieżka minus litera dysku).

Dziwne, ale prawdziwe.

Po drugie zauważmy, że musimy zdublować każdy jeden znak \ w ścieżce folderu:

\\documents and settings\\all users\\shortcut_files\\

Dlaczego? Cóż, jak się okazuje, znak \ jest znakiem zarezerwowanym w usłudze WMI. Aby użyć znaku \ w kwerendzie usługi WMI, każdy taki znak musi zostać „anulowany”. Ponieważ znak \ jest także znakiem kontrolnym w WMI, oznacza to, że musimy poprzedzić każdy znak \ drugim znakiem \. W ten sposób ścieżka \Scripts\My Scripts\WMI\ używana w kwerendzie WMI musi wyglądać tak:

\\Scripts\\My Scripts\\WMI\\

Jak już mówiłem. Dziwne, ale prawdziwe.

Kiedy rozkminimy kwerendę, reszta skryptu to bułka z masłem. Po uzyskaniu kolekcji wszystkich plików skrótów znajdujących się w folderze C:\Documents and Settings\All Users\Shortcut_Files uruchamiamy pętlę For Each, która przejdzie przez każdy element w tej kolekcji. Wewnątrz tej pętli używamy następującego fragmentu kodu w celu wywołania echa nazwy FileName pliku skrótu (nazwa pliku minus rozszerzenie pliku), nazwy Name skrótu (kompletna ścieżka, w tym litera dysku, folder oraz nazwa pliku i rozszerzenie), miejsca docelowego Target skrótu (aplikacja/skrypt/cokolwiek, co zostaje wywołane po kliknięciu skrótu):

Wscript.Echo objShortcut.FileName

Wscript.Echo objShortcut.Name

Wscript.Echo objShortcut.Target

Wscript.Echo

Teraz wracamy na początek pętli, gdzie powtarzamy proces dla następnego skrótu w kolekcji. Po wykonaniu wszystkich czynności powinien się wyświetlić raport wyglądający mniej więcej tak:

InterVideo WinDVD

c:\documents and settings\all users\shortcut_files\intervideo windvd.lnk

C:\Program Files\InterVideo\WinDVD\WinDVD.exe



IT Connection Manager

c:\documents and settings\all users\shortcut_files\connection manager.lnk

C:\Program Files\InterVideo\WinDVD\WinDVD.exe



Zune

c:\documents and settings\all users\shortcut_files\zune.lnk

C:\Program Files\Zune\Zune.exe

Itd., itp.

I to już wszystko na dziś. Jeżeli o mnie chodzi, trochę się rozgrzałem. To dobrze: jest szansa, że zanim ten artykuł zostanie opublikowany, mój stan się poprawi i będę mógł przestać chodzić w rękawiczkach.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne