Uzyskanie czasu pracy komputera za pomocą PowerShell
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.