PowerShell haastetta

Liittynyt
23.01.2017
Viestejä
3
Olen käyttänyt huomattavasti jatkojalostettua versiota tästä jo vuosia. Nyt viimisen 3kk Microsoft on muuttannut jotakin ja näinkin perusnäkymä ei enää toimi.

Koodi:
$GetAika = Get-Date -Format 'dd.MM.yyyy HH.mm.ss'

#Tulostetaan edellinen
    $GetAika

#Otetaan edellistä muuttujasta pelkkä vuosi
Get-Date $GetAika -Format YYYY

#Otetaan kuluvasta ajasta vuosi, tää toimii.
Get-Date -Format yyyy
}
26.07.2022 21.20.12
Get-Date : Cannot bind parameter 'Date'. Cannot convert value "26.07.2022 21.20.12" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."
At line:8 char:10
+ Get-Date $GetAika -Format YYYY
+          ~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetDateCommand

2022
Eli jostain syystä ajan käsittely on tällä hetkellä hajalla, millä tuon voisi kiertää?
Heti kun menee muuttujaan niin asiat hajoaa :D.
 
Liittynyt
16.10.2016
Viestejä
725
Oisko näin?
Koodi:
PS C:\Users\bindi> $aika = Get-Date
PS C:\Users\bindi> $aika

Tuesday, July 26, 2022 11:16:30 PM


PS C:\Users\bindi> $muotoiltu = Get-Date -Date $aika -Format 'dd.MM.yyyy HH.mm.ss'
PS C:\Users\bindi> $muotoiltu
26.07.2022 23.16.30
PS C:\Users\bindi> Get-Date -Date $aika -Format 'yyyy'
2022
PS C:\Users\bindi>
 

Hans_K

Team Amy
Platinum-jäsen
Liittynyt
20.10.2016
Viestejä
114
#Otetaan edellistä muuttujasta pelkkä vuosi
Get-Date $GetAika -Format YYYY

#Otetaan kuluvasta ajasta vuosi, tää toimii.
Get-Date -Format yyyy
Jos on tarvetta kaivaa vain vuosiluku, voi myös tehdä näin, ilman -Format:
Koodi:
PS C:\> (get-date).year
2022
PS C:\> (get-date "2020-01-01").year
2020
Tai putkitellessa saattaa olla loogisempi näin:
Koodi:
PS C:\> get-date | select -exp year
2022
PS C:\> get-date "2020-01-01" | select -exp year
2020
Ks. lisää
Koodi:
PS C:\> (get-date) | gm -Type property

   TypeName: System.DateTime

Name        MemberType Definition
----        ---------- ----------
Date        Property   datetime Date {get;}
Day         Property   int Day {get;}
DayOfWeek   Property   System.DayOfWeek DayOfWeek {get;}
DayOfYear   Property   int DayOfYear {get;}
Hour        Property   int Hour {get;}
Kind        Property   System.DateTimeKind Kind {get;}
Millisecond Property   int Millisecond {get;}
Minute      Property   int Minute {get;}
Month       Property   int Month {get;}
Second      Property   int Second {get;}
Ticks       Property   long Ticks {get;}
TimeOfDay   Property   timespan TimeOfDay {get;}
Year        Property   int Year {get;}
Error: "String was not recognized as a valid DateTime."
Saattaa liittyä dotnetin UI Cultureen. PowerShell yrittää arvuutella aktiivisen istunnon UI Culturen mukaan, että mikä mahtaisi olla ajan muoto merkkijonona ja muuttaa sitten String-objektin DateTime-objektiksi. Sitten kun tuo arvuuttelu epäonnistuu, tulee kyseisen kaltainen virhe.

ISO8601-muotoinen String toimii aina, riippumatta UI Culturesta, eli kannattaa lähtökohtaisesti pyrkiä käyttämään sitä.

Esim. tässä suomenkielinen Windows 11 ja PowerShell 7:
Koodi:
PS C:\> get-uiculture | select -exp datetimeformat | select -exp FullDateTimePattern
dddd d. MMMM yyyy H.mm.ss
PS C:\> get-date "26.07.2022 21.20.12"

tiistai 26. heinäkuuta 2022 21.20.12

PS C:\> get-date "2022-07-26 21:20:12"

tiistai 26. heinäkuuta 2022 21.20.12
Ja tässä englanninkielinen Ubuntu 20.04 ja PowerShell 7:
Koodi:
PS /root> get-uiculture | select -exp datetimeformat | select -exp FullDateTimePattern
dddd, MMMM d, yyyy h:mm:ss tt
PS /root> get-date "26.07.2022 21.20.12"
Get-Date: Cannot bind parameter 'Date'. Cannot convert value "26.07.2022 21.20.12" to type "System.DateTime". Error: "String '26.07.2022 21.20.12' was not recognized as a valid DateTime."
PS /root> get-date "2022-07-26 21:20:12"

Tuesday, July 26, 2022 9:20:12 PM
 

Hans_K

Team Amy
Platinum-jäsen
Liittynyt
20.10.2016
Viestejä
114
Niin ja jos pitää tallentaa DateTime-objektin arvoja tekstiksi muuttujaan, voi ISO8601 muotoon tehdä esim. näin:
Koodi:
get-date -format o
 
Toggle Sidebar

Statistiikka

Viestiketjut
239 632
Viestejä
4 197 211
Jäsenet
70 758
Uusin jäsen
eesy

Hinta.fi

Ylös Bottom