Uzyskanie czasu pracy komputera za pomocą PowerShell

0 Comments

Czas pracy komputera jest ważną statystyką w zarządzaniu systemami. Oto kilka sposobów, w jakie możemy określić czas pracy systemu dla komputera (zauważ, że ta lista nie jest w żaden sposób wyczerpująca):

1. Zakładka wydajność Menedżera zadań wyświetla czas pracy komputera jako dni, godziny, minuty i sekundy.

2. Narzędzie wiersza poleceń Systeminfo wyświetla czas ostatniego rozruchu komputera.

3. Najnowszy Identyfikator zdarzenia 6005 w systemowym dzienniku zdarzeń komputera rejestruje ostatni czas rozruchu komputera.

4., Klasa WMI Win32_OperatingSystem posiada właściwość LastBootUpTime, która zawiera ostatni czas rozruchu komputera.

każda z tych technik ma swoje wady i zalety. Na przykład menedżer zadań zapewnia szybki wgląd w czas pracy pojedynczego komputera, a dziennik zdarzeń zawiera dodatkowe informacje dotyczące zdarzenia 6005, które mogą zapewnić wgląd w awarię systemu. Pierwsze trzy opcje nie są prawdopodobnie najlepsze dla celów automatyzacji (np. odpytywanie listy serwerów w celu uptime), więc spójrzmy na WMI. Najpierw jednak musimy przyjrzeć się, w jaki sposób WMI zwraca informacje o czasie działania.,

Korzystanie z WMI, aby uzyskać Czas pracy komputera

istnieje kilka sposobów na odzyskanie czasu pracy komputera za pomocą WMI. Jednym z najbardziej oczywistych sposobów, przed Windows PowerShell, było użycie polecenia WMIC. Na przykład:

To polecenie pobiera właściwość LastBootUpTime instancji klasy Win32_OperatingSystem na komputerze., W PowerShell użyjemy polecenia Get-WmiObject zamiast WMIC:

wypróbuj te polecenia samodzielnie, a zobaczysz, że wyjście nie musi być „przyjazne dla użytkownika”, ponieważ Data i czas wyrażony we właściwości LastBootUpTime jest sformatowany jako łańcuch datetime CIM (Common Information Model). Na przykład:

ten łańcuch datetime tłumaczy się na May 12, 2016, 15:48:36 (3:48pm). 125599 to liczba mikrosekund (będziemy je ignorować), a -360 oznacza liczbę minut przesuniętych od GMT., W tym przykładzie, -360 oznacza, że czas jest 6 godzin za GMT. (Podobnie +180 oznaczałoby ” 3 godziny przed GMT.”)

aby uczynić łańcuch datetime CIM bardziej użytecznym, będziemy musieli przekonwertować go na użyteczną datę (obiekt DateTime). Na szczęście PowerShell czyni to prostym: statyczna metoda ToDateTime systemu.Zarządzanie.Klasa ManagementDateTimeConverter. NET konwertuje łańcuch datetime CIM na obiekt DateTime, którego możemy łatwiej używać w PowerShell. Rysunek 1 przedstawia przykład.,

Rysunek 1 – Konwersja czasu ostatniego rozruchu komputera na DateTime

na rysunku 1 zmienna $dateTime zawiera datę i czas ostatniego rozruchu komputera. Aby uzyskać wynik uptime (zamiast daty i czasu ostatniego rozruchu), możemy odjąć go od bieżącego czasu (Get-Date), co daje obiekt TimeSpan zawierający różnicę. Rysunek 2 pokazuje przykład tego.,

Rysunek 2 – przekształcenie ostatniego czasu rozruchu komputera w czytelny czas działania

pierwsze polecenie na rysunku 2 tworzy obiekt TimeSpan zawierający różnicę między bieżącą datą i czasem a ostatnim czasem rozruchu (obiekt $dateTime, który stworzyliśmy na rysunku 1). Drugie polecenie wypisuje obiekt TimeSpan, a ostateczne polecenie używa operatora-f do wypisania TimeSpan jako czytelnego sformatowanego łańcucha, który mówi nam, że bieżący komputer nie działa przez 4 dni, 19 godzin, 56 minut i 44 sekundy.,

uzyskiwanie ostatniego czasu rozruchu z komputera zdalnego

przykłady na rysunkach 1 i 2 dotyczą komputera lokalnego. Jak namierzyć zdalny komputer? Na szczęście WMI pozwala nam pobrać informacje o zdalnym komputerze za pomocą parametru-ComputerName. WMI pozwoli nam również określić alternatywne poświadczenia dla zdalnego komputera w obiekcie PSCredential. Rysunek 3 pokazuje przykład uzyskania ostatniego czasu rozruchu dla komputera o nazwie server1.,

Rysunek 3 – pobranie ostatniego czasu rozruchu ze zdalnego komputera

pierwsze polecenie na rysunku 3 pobiera obiekt PSCredential do zmiennej $cred, a drugie polecenie pobiera łańcuch datetime CIM zawierający ostatni czas rozruchu serwera komputeru1 (zwróć uwagę na parametry-ComputerName i-Credential). Trzecie polecenie konwertuje ostatni czas rozruchu na obiekt DateTime, a ostatnie polecenie wypisuje ostatni czas rozruchu komputera.

złożenie wszystkiego do kupy – czas pracy.,skrypt ps1

przykłady pokazane na rysunkach 1 i 2 pokazują, jak uzyskać ostatni czas rozruchu komputera i pokazać jako łatwy do odczytania ciąg znaków, a Rysunek 3 pokazuje, jak uzyskać ostatni czas rozruchu komputera zdalnego. Oczywiście nie trzeba pamiętać wszystkich niuansów, jeśli zamkniemy logikę w łatwym w użyciu skrypcie. Skrypt Get-Uptime. PS1 wykonuje za nas całą ciężką pracę. Składnia skryptu jest następująca:

parametr-ComputerName jest opcjonalny i podaje nazwy komputerów, dla których chcesz uzyskać informacje o czasie działania., Ten parametr obsługuje wiele obiektów, wprowadzanie potoków i obiektów, które mają właściwość ComputerName. Parametr-ComputerName jest opcjonalny. Jeśli pominiesz ten parametr, domyślnie wyświetla się informacja o czasie pracy bieżącego komputera.

parametr-Credential dostarcza alternatywne poświadczenia, jeśli chcesz odpytywać jeden lub więcej komputerów zdalnych, a twoje obecne zalogowane konto nie ma dostępu. Odpytywanie czasu pracy nie wymaga uprawnień administratora na komputerze lokalnym, ale jest wymagane dla komputerów zdalnych.,

skrypt wyświetla obiekty o trzech właściwościach: ComputerName( nazwa komputera), LastBootTime (DateTime zawierający ostatni czas rozruchu komputera) i Uptime (łatwy do odczytania ciąg uptime).

uzyskiwanie czasu pracy dla wielu komputerów

Rysunek 4 ilustruje uzyskiwanie czasu pracy dla trzech komputerów zdalnych na dwa różne sposoby.,

Rysunek 4 – uzyskanie czasu pracy trzech komputerów zdalnych na dwa różne sposoby

pierwsze polecenie na rysunku 4 określa trzy komputery jako parametr skryptu Get-Uptime, a drugie polecenie określa trzy komputery jako wejście potoku. Zauważ, że oba polecenia wytwarzają identyczne wyjście (z tym wyjątkiem, że ciągi uptime w wyjściu z drugiego polecenia są nieco późniejsze).

ponieważ skrypt obsługuje wejście potoku, możesz nawet użyć wyjścia polecenia Get-ADComputer cmdlet do raportowania czasu pracy wszystkich komputerów w OU., Na przykład, rozważ następujące polecenie:

(podzieliłem polecenie na wiele linii, aby było łatwiejsze do odczytania.) To polecenie pobiera nazwy wszystkich komputerów w serwerach OU, wybiera tylko właściwość Name każdego komputera( Select-Object-ExpandProperty), sortuje listę nazw komputerów i na koniec pobiera czas pracy każdego komputera.

czas pracy komputera ułatwiony

Czas pracy komputera jest ważnym wskaźnikiem. Istnieje wiele sposobów, aby uzyskać uptime, ale nie jest to prosty sposób w PowerShell. Czas Pracy.,skrypt ps1 wypełnia tę lukę i ułatwia uzyskanie czasu pracy komputera, bez względu na to, czy chcesz uzyskać czas pracy obecnego komputera, czy czas pracy komputerów zdalnych.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *