Cincinnati PowerShell User Group (@CincyPowershell) öppnar varje möte med en recension av en cmdlet. Ikväll var det Get-Date tur. Många av exemplen gjordes med både Get-Date och, med ett exempel som visar att endast stöder IsLeapYear () – metoden. Detta fick mig att tänka …(ibland en smärtsam sak…) och glödlampan lyste upp över mitt huvud. Get-Date returnerar en instans av systemet.DateTime klass, dvs, ett objekt, medan är en referens till klassen och ger enkel tillgång till klassens statiska metoder.
System.DateTime
vad är det med de två kolonerna? De är Powershells sätt att kalla en statisk metod på en klass. Så gå tillbaka till isleapyear () frågan, det är en statisk metod för DateTime klassen. För att komma åt det skriver vi:: IsLeapYear (2016).
Get-Date
Get-Date är en cmdlet med många alternativ, men standardalternativet är att returnera aktuellt datum och tid. Dvs:: nu.
klassen som ett objekt skapades från kallas också dess typ. Så vad är ” typ ” av en dejt?,
instanser/objekt
Om Get-Date returnerar en instans, hur skulle jag kunna göra det med ? Två sätt, använd en av de statiska metoderna som .Nu eller .Idag, eller skapa ett nytt objekt med hjälp av det nya objektet cmdlet.
använda de statiska metoderna:
$d = ::nu (eller bara .Nu)
$d=:: idag (eller bara.Idag)
använda nytt objekt:
$d = nytt Objektsystem.,DateTime (eller bara DateTime)
den unika aspekten av att använda nytt objekt med DateTime är att du får tillbaka ett objekt med standardvärden för År, Månad, Dag, etc. och inte dagens datum. Det faktiska resultatet är ”måndag, januari 01, 0001 12: 00: 00 AM”.
om du vill skapa ett visst datum eller en viss tid, använd en av klassens konstruktörer. (Se länken DateTime Structure i slutet av artikeln för mer information.)
det finns en fin skriv upp om klasser, instanser, statik här från Don Jones.,
och bara för skojs skull… och bara i PowerShell 5.0
vem behöver ? Ring bara de statiska metoderna av något DateTime-objekt! Följande alla ger samma resultat, med tanke på att Get-Date lägger till ytterligare overhead för att hämta det aktuella datumet och sedan ignorera det.
(Get-Date)::IsLeapYear(2016)
$d = Get-Date
$d::IsLeapYear(2016)$d = ::nu
$d::IsLeapYear(2016)
vad sägs om PowerShell 3.0?
exemplen för 5.0 fungerar inte med 3.0. Vi måste be om ”klass”, dvs det är typ.,
(Get-Date).GetType()::IsLeapYear(2016)
$d = Get-Date
$d.GetType()::IsLeapYear(2016)$d = ::nu
$d.GetType()::IsLeapYear(2016)
vad sägs om PowerShell 4.0?
slår mig! (Har inte en kopia framför mig just nu.)
upptäck de statiska metoderna och egenskaperna hos ett objekt
Get-Member har en-statisk parameter för att visa de statiska metoderna och egenskaperna hos ett objekt:
Get-Date | Get-Member-Static
roligare med statiska metoder
mest .,Net klasser exponeras inte i PowerShell som cmdlets.
Du kan till exempel behöva ett nytt GUID…
::NewGuid() returnerar ett nytt GUID-objekt.
::NewGuid().toString () kommer att returnera en ny GUID som en sträng.
vad sägs om lite matematik?
behöver värdet av PI?
::PI (eller bara ::PI) det handlar om 3.14159265358979 enligt PowerShell och. Net.
vad sägs om kvadratroten av 2?
::Sqrt (2) (Låt oss se… jag tror att det handlar om 1.4142135623731.)
och naturligtvis sinus av 45 grader:
::sin(0.,785398163397448) (i radianer naturligtvis) Åh, om 0.707106781186547.
och gör lite konvertering från grader till radianer:
::sin( ::pi/180*45)
För mer av vad matteklassen kan göra, se Mattelänken i slutet av artikeln. Eller vänta på det, använd PowerShell:
/ Get-Member-Static
Bottom line … Om C # – killarna kan göra det, så kan du det!
så nu vet du… 2016 är ett skottår! Och minst ett dussin olika sätt!
(och en snabb 5 minuters artikel tog över en timme…)
med statiska klasser och metoder
System.Math klass
Leave a Reply