Att få dator upptid med PowerShell

0 Comments

dator upptid är en viktig statistik i systemhantering. Här är flera av de sätt vi kan bestämma systemets drifttid för en dator (Observera att den här listan inte alls är uttömmande):

1. Fliken Aktivitetshanteraren prestanda visar datorns drifttid som Dagar, timmar, minuter och sekunder.

2. Kommandoradsverktyget Systeminfo visar datorns senaste starttid.

3. Den senaste händelse-ID 6005 i datorns systemhändelselogg registrerar datorns senaste starttid.

4., WMI Win32_OperatingSystem-klassen har en lastbootuptime-egenskap som innehåller datorns senaste starttid.

var och en av dessa tekniker har sina fördelar och nackdelar. Aktivitetshanteraren ger till exempel snabb synlighet för en enda dators drifttid och händelseloggen innehåller ytterligare information kring 6005-händelsen som kan ge insikt om ett systemfel. De tre första alternativen är förmodligen inte bäst för automatiseringsändamål (t.ex. fråga en lista över servrar för drifttid), så låt oss titta på WMI. Först måste vi dock ta en titt på hur WMI returnerar upptidsinformation.,

använda WMI för att få datorn upptid

det finns flera sätt vi kan hämta en dators upptid med WMI. Ett av de mest uppenbara sätten, före Windows PowerShell, var att använda wmic-kommandot. Till exempel:

det här kommandot hämtar egenskapen LastBootUpTime för win32_operatingsystem-klassinstansen på datorn., I PowerShell, skulle vi använda Get-WmiObject-cmdlet snarare än WMIC:

Prova dessa kommandon dig själv, och du kommer att se att produktionen är inte nödvändigtvis ”user-friendly”, eftersom den datum och tid uttryckt i LastBootUpTime egendom är formaterad som en CIM (Common Information Model) datetime sträng. Till exempel:

den här datetime-strängen översätts till maj 12, 2016, 15:48:36 (3:48pm). 125599 är antalet mikrosekunder (vi ignorerar dem), och -360 representerar antalet minuter förskjutna från GMT., I det här exemplet betyder -360 att tiden är 6 timmar bakom GMT. (På samma sätt skulle +180 betyda ” 3 timmar före GMT.”)

för att göra CIM datetime-strängen mer användbar måste vi konvertera den till ett användbart datum (ett DateTime-objekt). Lyckligtvis gör PowerShell detta enkelt: den todatetime statiska metoden i systemet.Förvaltning.ManagementDateTimeConverter. Net class konverterar CIM datetime-strängen till ett datetime-objekt som vi lättare kan använda i PowerShell. Figur 1 visar ett exempel.,

Figur 1 – Konvertera datorns senaste starttid till en DateTime

i Figur 1 innehåller $dateTime-variabeln datum och tid då den aktuella datorn senast startades upp. För att få utdata från upptiden (snarare än datum och tid för den sista uppstarten) kan vi subtrahera den från den aktuella tiden (Get-Date), vilket resulterar i ett TimeSpan-objekt som innehåller skillnaden. Figur 2 visar ett exempel på detta.,

Figur 2 – Konvertera datorns senaste Uppstartstid till en läsbar upptid

det första kommandot i Figur 2 skapar ett timespan-objekt som innehåller skillnaden mellan aktuellt datum och tid och den senaste uppstartstiden (det $dateTime-objekt som vi skapade i Figur 1). Det andra kommandot matar ut TimeSpan-objektet, och det slutliga kommandot använder-f-operatören för att mata ut TimeSpan som en läsbar formaterad sträng som berättar att den aktuella datorn har varit uppe i 4 dagar, 19 timmar, 56 minuter och 44 sekunder.,

få den senaste uppstartstiden från en fjärrdator

exemplen i figurerna 1 och 2 riktar sig till den lokala datorn. Hur kan vi rikta en fjärrdator? Lyckligtvis WMI tillåter oss att hämta information om en fjärrdator med hjälp av-ComputerName parametern. WMI kommer också att tillåta oss att ange alternativa referenser för en fjärrdator i ett pscredential-objekt. Figur 3 visar ett exempel på att få den senaste uppstartstiden för en dator som heter server1.,

Figur 3 – Få den sista starttiden från en fjärrdator

det första kommandot i Figur 3 får ett pscredential-objekt i $cred-variabeln, och det andra kommandot får CIM datetime-strängen som innehåller den sista starttiden för datorserver1 (Lägg märke till-ComputerName-och-Credentialparametrarna). Det tredje kommandot konverterar den sista starttiden till ett DateTime-objekt, och det sista kommandot matar ut den sista starttiden för datorn.

sätta ihop allt – Upptiden.,ps1 Script

exemplen som visas i figurerna 1 och 2 visar hur du får datorns senaste starttid och visar som en lättläst sträng, och figur 3 visar hur du får en fjärrdators senaste starttid. Naturligtvis finns det ingen anledning att komma ihåg alla nyanser om vi inkapslar logiken i ett lättanvänt skript. De Få Drifttid.ps1 skriptet gör allt det hårda arbetet för oss. Skriptets syntax är följande:

parametern-ComputerName är valfri och namnger datorn(erna) för vilken du vill få upptidsinformationen., Denna parameter stöder flera objekt, pipeline-ingång och objekt som har en Datornamnsegenskap. Parameternamnet-ComputerName är valfritt. Om du utelämnar den här parametern är standardinställningen att mata ut information om drifttid för den aktuella datorn.

parametern-Credential levererar alternativa referenser om du vill fråga en eller flera fjärrdatorer och ditt nuvarande inloggade konto inte har åtkomst. Att fråga upptid kräver inte administratörsbehörighet på den lokala datorn, men det krävs för fjärrdatorer.,

skriptet matar ut objekt med tre egenskaper: datornamn (datorns Namn), LastBootTime (en DateTime som innehåller datorns senaste Uppstartstid) och upptid (en enkel att läsa upptidsträng).

få upptid för flera datorer

Figur 4 visar att få upptiden för tre fjärrdatorer på två olika sätt.,

Figur 4 – Få upptiden för tre fjärrdatorer två olika sätt

det första kommandot i Figur 4 anger de tre datorerna som en parameter till Get-Uptime-skriptet, och det andra kommandot anger de tre datorerna som pipeline-ingång. Observera att båda kommandona producerar identisk utmatning (förutom att upptidsträngarna i utmatningen från det andra kommandot är något senare).

eftersom skriptet stöder pipeline-inmatning kan du även använda utdata från Get-ADComputer cmdlet för att rapportera om drifttiden för alla datorer i en OU., Tänk till exempel på följande kommando:

(jag delade kommandot på flera rader för att göra det lättare att läsa.) Detta kommando hämta namnen på alla datorer i servrarna OU, väljer bara namnet egenskapen för varje dator (Select-Object-ExpandProperty), sorterar listan över datornamn, och slutligen får upptiden från varje dator.

upptid för datorn enkelt

upptid för datorn är ett viktigt mått. Det finns en mängd olika sätt att få upptid men inte ett enkelt sätt i PowerShell. Uppgången.,ps1 script fyller i detta gap och gör det enkelt att få datorn drifttid, oavsett om du vill få den aktuella datorns drifttid eller drifttid för fjärrdatorer.


Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *