Centrum Skryptów - Systemy Operacyjne

Czy mogę utworzyć formularz systemu Windows umożliwiający wybranie nazw komputera i uruchomienie kwerend WMI?

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.

Czy mogę utworzyć formularz systemu Windows umożliwiający wybranie nazw komputera i uruchomienie kwerend WMI?

Cześć, Skrypciarze! Wpadłam na taki pomysł. Chciałabym mieć formularz systemu Windows zawierający listę nazw komputerów. Następnie chciałabym móc wybrać jeden z komputerów i uruchomić na nim kwerendę WMI. Chodzi o to, że taki formularz systemu Windows mogłabym przekazać działowi pomocy technicznej i nie musiałabym instruować jego pracowników, jak uruchamiać skrypt, przydzielać im dostępu do programu Windows PowerShell ani ryzykować, że będą na własną rękę edytować skrypt. Cała obsługa powinna się sprowadzać do wskazania i kliknięcia.

-- MT

Cześć, MT! Czołem, tutaj skrypciarz Ed Wilson. Dzisiaj w Charlotte mieliśmy naprawdę miły dzień. Sprawdzam właśnie pocztę przesłaną na adres scripter@microsoft.com i obserwuję swoje konto w serwisie Twitter, które chyba oszalało. Jest już dość późny wieczór, więc popijam herbatę miętową. A na talerzyku obok już czekają ciastka ANZAC. Herbatę miętową piłem pierwszy raz kilka lat temu w Rothenburgu; prowadziłem wtedy warsztaty z języka VBScript w Monachium. Kiedy czekaliśmy na rynku, aż karylion na wieży odegra melodię, zrobiłem takie zdjęcie.

MT, zacznij od użycia projektu ListBox, a będziesz miała połowę skryptu gotową.

Dodaj do projektu pole tekstowe. Możesz mu nadać nazwę tb_WMIOutput. W sekcji Zachowanie ustaw przyjmowanie przez pole tekstowe wielu wierszy danych wyjściowych, ustawiając wartość właściwości Multiline na true. Nie chcemy, aby pole danych wyjściowych WMI było widoczne po wczytaniu formularza. Dlatego należy zmienić wartość właściwości Visible na false, tak jak widać to poniżej.

Po ustawieniu wartości właściwości Multiline na true można zmienić wielkość pola tekstowego i rozciągnąć je tak, aby jego szerokość odpowiadała szerokości pola tb_Path i aby pole niemal dotykało dolnej krawędzi formularza systemu Windows. W sekcji Wygląd zmień wartość właściwości Scrollbars na vertical, ponieważ w przeciwnym wypadku nie będzie się dało przewijać w dół w celu wyświetlenia wszystkich danych wyjściowych.

Przeciągnij nowy formant Button do formularza systemu Windows i ustaw go w linii z formantem btn_Update, tak jak to widać poniżej.

W sekcji Projekt ustaw wartość właściwości Visible na false, co sprawi, że przycisk będzie niewidoczny po wczytaniu formularza systemu Windows. adaj przyciskowi nazwę btn_WMI, tak jak widać to poniżej. Zmień właściwość Text przycisku na Get WMI.

Po zapisaniu projektu PrimalForms i wygenerowaniu kodu programu Windows PowerShell otwórz ten kod w edytorze skryptów. Należy zmodyfikować moduł obsługi zdarzeń OnClick przycisku btn_FillLb. Chcemy, aby po wypełnieniu pola listy nazwami komputerów z pliku tekstowego przycisk WMI stawał się widoczny. W tym celu ustawiamy wartość właściwości Visible formantu $btn_WMI na $true. Widać to poniżej:

$btn_WMI.visible = $true

Pełen moduł obsługi zdarzeń przycisku $btn_FillLB korzysta z kodu podanego poniżej:

$btn_FillLb_OnClick= 

{

#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()

 $btn_WMI.visible = $true

}

Należy również dodać kod do zdarzenia OnClick przycisku btn_WMI. Najpierw należy dodać wyniki kwerendy WMI do właściwości Text pola tekstowego tb_WMIOutput. Kwerenda WMI używa nazwy komputera zaznaczonego w polu listy lb_Computers. Ze względu na to, że program Windows PowerShell zwraca obiekt zarządzania, należy przesłać wyniki potokiem do apletu polecenia Out-String, a następnie przypisać go do właściwości Text pola listy lb_Computers. Widać to poniżej:

$tb_WMIOutput.Text = Get-WmiObject -Class win32_computersystem `

   -ComputerName $lb_computers.SelectedItem | Out-String

Na koniec musimy jeszcze sprawić, by pole tekstowe tb_WMIOutput stało się widoczne. W tym celu przypisujemy wartość $true właściwości Visible. Widać to poniżej:

$tb_WMIOutput.Visible = $true

Kompletny moduł obsługi zdarzeń OnClick widać poniżej:

$btn_WMI_OnClick= 

{

#TODO: Place custom script here

 $tb_WMIOutput.Text = Get-WmiObject -Class win32_computersystem `

   -ComputerName $lb_computers.SelectedItem | Out-String

 $tb_WMIOutput.Visible = $true

}

Po uruchomieniu skryptu widoczne jest pole tekstowe Path, pole listy Computer Name i przycisk Update. Po wpisaniu ścieżki do pliku tekstowego i kliknięciu przycisku Update zostanie zapełnione pole listy List Computer. Przycisk btn_WMI staje się następnie widoczny — tak, jak to widać poniżej.

Po wybraniu komputera z pola listy kliknięcie przycisku btn_WMI spowoduje wykonanie kwerendy WMI i wyświetlenie pola tb_WMIOutput, zawierającego jej wyniki. Widać to poniżej.

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

I to już wszystko, co trzeba wiedzieć o uruchamianiu kwerend WMI na komputerach przy użyciu programu Windows PowerShell i formularza systemu Windows. To ostatni artykuł z serii poświęconej graficznej obsłudze programu Windows PowerShell. Zapraszamy jutro na szybkie piątkowe odpowiedzi.

Skrypciarze Ed Wilson i Craig Liebendorfer

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne