Centrum Skryptów - Systemy Operacyjne

Jak odczytać plik tekstowy i zaktualizować pole listy?

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 odczytać plik tekstowy i zaktualizować pole listy?

Cześć, Skrypciarze! Podobał mi się wasz artykuł o tworzeniu pola listy w programie Windows PowerShell, ale szczerze mówiąc nie był on dla mnie zbyt przydatny, bo często pracuję z różnymi serwerami. Chciałabym być w stanie wczytać plik tekstowy i na jego podstawie zapełnić pole listy. Czy to trudne zadanie?

-- RR

Cześć, RR! Czołem, tutaj skrypciarz Ed Wilson. Do miasta Charlotte w Północnej Karolinie przychodzi wiosna. Oznacza to, że padają deszcze, a z parasolem nie ma się co rozstawać. Dla uczczenia wiosny, słucham Toma Jonesa na swoim Zune'ie HD i popijam przepyszną herbatę darjeeling, zagryzając irlandzkim cheddarem i orzechami. Sekretem parzenia dobrej herbaty darjeeling jest odczekanie 3-4 minut na naciągnięcie, a następnie wyjęcie koszyczka.

Przed zalaniem herbaty woda powinna dobrze wrzeć. Nigdy nie używam więcej niż dwóch łyżeczek herbaty na czajnik. Za każdym razem zaparzam świeże liście. Jeśli uda mi się ją dobrze zaparzyć, darjeeling jest moją ulubioną czarną herbatą. Ale od niewłaściwie zaparzonej zdecydowanie wolałbym już oranżadę, chociaż właściwie nie lubię napojów gazowanych.

Cała ta pogoda przypomina mi o mojej wizycie w Québec, gdzie prowadziłem warsztaty z programu Windows PowerShell. Zrobiłem wtedy parę ciekawych zdjęć Rzeki św. Wawrzyńca.

Cóż, RR, chłodne, wilgotne powietrze wiosenne i pobudzająca herbata darjeeling zmotywowały mnie na tyle, abym otworzył okno Windows PowerShell ISE i zabrał się do pracy. Graficzne skrypty programu Windows PowerShell można pisać w całości ręcznie. To wprawdzie sporo pracy, ale może być bardzo satysfakcjonujące. Na razie czerpię jednak satysfakcję z innych źródeł, więc zacznę ten skrypt od utworzenia podstawowego formularza systemu Windows przy użyciu bezpłatnego narzędzia PrimalForms Community Edition (j.ang.), udostępnianego przez firmę SAPIEN Technologies. Więcej informacji o używaniu narzędzia PrimalForms można znaleźć w tym archiwalnym artykule z serii „Cześć, Skrypciarze”.

Najpierw otwórz narzędzie PrimalForms i zmień nazwę formularza systemu Windows na „List Box Fill Example”. Właściwość Text klasy Form jest modyfikowana w sekcji Wygląd, zgodnie z tym, co widać poniżej.

Teraz dodaj do formularza formant ListBox, przeciągając go z palety po lewej stronie i upuszczając na formularzu. Nazwę formantu warto zmienić na lb_Computers, dzięki czemu łatwiej będzie go w przyszłości znaleźć. Właściwość Name formantu znajduje się w sekcji Projekt, tak jak widać to poniżej.

Następnie należy dodać do formularza formant TextBox. Formant TextBox posłuży do podania ścieżki do pliku tekstowego zawierającego nazwy wszystkich komputerów, którymi chcemy zapełnić pole listy. Nadaj formantowi TextBox nazwę tb_Path, tak jak widać to poniżej.

Warto użyć formantu Label pod formantem TextBox, aby poinformować, co należy wpisać w polu tekstowym. Zmień nazwę formantu Label na lbl_Path i nadaj mu wartość tekstową, np. „Ścieżka pliku” lub tylko „Ścieżka”, zgodnie z tym, co widać poniżej. Właściwość Text formantu Label znajduje się w sekcji Appearance.

Użyj formantu Button do odczytania pliku tekstowego i zaktualizowania formantu ListBox nazwami wszystkich komputerów. Zdarzenie On_Click przycisku posłuży do inicjalizacji odczytywania pliku i zapełniania pola formantu ListBox. Nadaj przyciskowi nazwę btn_Update — zgodnie z tym, co widać poniżej — przypisz słowo „Aktualizuj” do właściwości Text formantu.

Zapisz projekt formularza i wygeneruj kod programu Windows PowerShell służący do utworzenia formularza systemu Windows. Otwórz kod programu Windows PowerShell i przejdź do sekcji #TODO modułu obsługi zdarzenia kliknięcia w skrypcie. Najpierw należy użyć apletu polecenia Get-Content do odczytania zawartości pliku tekstowego, którego ścieżkę podano w polu tekstowym tb_Path. Zostanie ona przechowana we właściwości $tb_Path.Text. W rzeczywistości należałoby najpierw użyć apletu polecenia Test-Path, aby się upewnić, że plik tekstowy rzeczywiście istnieje, a jeśli nie, zmienić tekst formantu etykiety na informujący o braku pliku. Nasz skrypt służy jednak tylko do celów demonstracyjnych, więc na razie to pominiemy. Widać to poniżej:

$computerNames = Get-Content -Path $tb_Path.Text

Następnie chcemy zaktualizować formant ListBox zawartością pliku tekstowego. W tym celu najpierw należy wywołać metodę BeginUpdate — pozwala to zwiększyć wydajność. Teraz wystarczy już tylko użyć instrukcji foreach do przejścia przez kolekcję nazw komputerów i wywołać metodę add, aby dodać te nazwy do pola listy. Po zakończeniu wywołujemy metodę EndUpdate. Kompletny kod, który za to odpowiada, widać poniżej:

#TODO: Place custom script here

 $computerNames = Get-Content -Path $tb_Path.Text

 $lb_Computers.BeginUpdate()

      foreach($computer in $computerNames)

        {

         $lb_Computers.Items.add($computer)

        }

 $lb_Computers.EndUpdate()

Po uruchomieniu skryptu zostanie wyświetlony formularz systemu Windows widoczny poniżej. Wpisz ścieżkę do pliku tekstowego z nazwami komputerów i kliknij przycisk Aktualizuj, a w polu listy pojawią się nazwy komputerów. Jak pamiętamy z wczorajszego artykułu z serii „Cześć, Skrypciarze”, pobranie zaznaczonej wartości z pola listy jest proste.

Pełen skrypt ListBox2.ps1 jest dostępny w Repozytorium skryptów (j.ang.).

RR, to już wszystko, co musisz wiedzieć o odczytywaniu pliku tekstowego i aktualizowaniu pola listy. Jutro przedstawimy kolejny skrypt z serii poświęconej graficznej obsłudze programu Windows PowerShell.

Skrypciarze Ed Wilson i Craig Liebendorfer

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne