Question
Calendrier
- Arthur
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 15 ans 9 mois #6999
par Arthur
Réponse de Arthur sur le sujet Re:Calendrier
En fait la solution du PSObject consiste à créer un Objet avec des propriété \"Date\",\"Jour\" etc..
On prend par exemple le 11 Septembre 2010 :
[code:1]PS D:\ahemon\Scripts> $date.ToLongDateString()
mardi 9 novembre 2010
PS D:\ahemon\Scripts> [datetime]$date = \"11/09/2010\"
PS D:\ahemon\Scripts> $date.ToLongDateString()
mardi 9 novembre 2010
PS D:\ahemon\Scripts> $date2 = New-Object PSObject -Property @{
>> \"Jour\" = $date.Month
>> \"Mois\" = $date.Day
>> \"Annee\" = $date.Year
>> }
>>
PS D:\ahemon\Scripts> $date2 | ft -AutoSize
Jour Annee Mois
----
----
11 2010 9
[/code:1]
Je te conseil tout de même de suivre la solution de Laurent car elle permet d'en apprendre plus sur Powershell et le format date, par contre d'en certain cas ma solution peut être plus simple.
La solution la plus simple mais la plus \"sale\" est de passer par une variable [string] (Voir mon dernier post)
Tout dépend de l'utilisation que tu en fait.<br><br>Message édité par: bilbao, à: 28/05/10 17:25
On prend par exemple le 11 Septembre 2010 :
[code:1]PS D:\ahemon\Scripts> $date.ToLongDateString()
mardi 9 novembre 2010
PS D:\ahemon\Scripts> [datetime]$date = \"11/09/2010\"
PS D:\ahemon\Scripts> $date.ToLongDateString()
mardi 9 novembre 2010
PS D:\ahemon\Scripts> $date2 = New-Object PSObject -Property @{
>> \"Jour\" = $date.Month
>> \"Mois\" = $date.Day
>> \"Annee\" = $date.Year
>> }
>>
PS D:\ahemon\Scripts> $date2 | ft -AutoSize
Jour Annee Mois
----
----
11 2010 9
[/code:1]
Je te conseil tout de même de suivre la solution de Laurent car elle permet d'en apprendre plus sur Powershell et le format date, par contre d'en certain cas ma solution peut être plus simple.
La solution la plus simple mais la plus \"sale\" est de passer par une variable [string] (Voir mon dernier post)
Tout dépend de l'utilisation que tu en fait.<br><br>Message édité par: bilbao, à: 28/05/10 17:25
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 9 mois #7000
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Calendrier
bilbao écrit:
bilbao écrit:
Le fait de creuser des sujets qui peuvent paraître futile pour du scripting, permet de ne pas recoder ce qui existe déjà.
Un des avantages d'utiliser le formatage présenté précédement est de donner une cohérence pour tous vos scripts, un autre est que lors de la relecture du code, pour ceci :
$date.ToLongDateString()
on se concentre, avec un peu de pratique, sur le nom de la méthode
ToLongDateString
puisque le préfix est le plus souvent un nom de variable.
Là ou la solution la plus simple, demande de relire tout la phrase pour connaître le résultat:
\"$($date.day)/$($date.Month)/$($date.Year)\"
Bruce Payette parle dans son dernier ouvrage à paraître de pattern de commande, des suites de commandes récurrentes dont seul le paramètrage change, ici il s'agit plutôt de méthodes de classes dotnet qui prennent en charge des traitements récurrents.
Lorsque je dis qu'il vaut mieux enrichir l'objet existant, je pensais au cmdlet Add-Member qui permet d'ajouter dynamiquement une propriété à un objet (et seulement celui-là).
[code:1]
$Date=Get-Date
#force l'adaption de l'objet dotnet en objet PowerShell
$Date.Hour>$null
#On échappe le caractère de formatage h avec \
$Date|Add-member noteproperty MonFormat \"le yyyy-MM à HH \heure\"
\"{0:$($date.MonFormat)}\" -f $date
#le 2010-05 à 19 heure
[/code:1]
On peut aussi généraliser l'approche en utilisant un fichier de formatage de type (.ps1xml), qui permet en quelque sorte d'automatiser l'ajout de ce type de membre pour chaque instance du type.
Puisque PowerShell est un langage dynamique, le code peut se modifier lui même pendant l'exécution, on peut faire en sorte qu'il s'automatise lui-même...
Bon, je m'arrête là
C'était effectivement l'objectif de mon dernier post, éclairer d'autres aspects sur la gestion des dates sous dotnet/PS.Je te conseil tout de même de suivre la solution de Laurent car elle permet d'en apprendre plus sur Powershell
bilbao écrit:
Tant que l'approche ne génère pas d'effets de bords cela ne pose pas de pb, le principal est que l'approche choisie réponde au besoinmais la plus \"sale\" est de passer par une variable [string]
Le fait de creuser des sujets qui peuvent paraître futile pour du scripting, permet de ne pas recoder ce qui existe déjà.
Un des avantages d'utiliser le formatage présenté précédement est de donner une cohérence pour tous vos scripts, un autre est que lors de la relecture du code, pour ceci :
$date.ToLongDateString()
on se concentre, avec un peu de pratique, sur le nom de la méthode
ToLongDateString
puisque le préfix est le plus souvent un nom de variable.
Là ou la solution la plus simple, demande de relire tout la phrase pour connaître le résultat:
\"$($date.day)/$($date.Month)/$($date.Year)\"
Bruce Payette parle dans son dernier ouvrage à paraître de pattern de commande, des suites de commandes récurrentes dont seul le paramètrage change, ici il s'agit plutôt de méthodes de classes dotnet qui prennent en charge des traitements récurrents.
Lorsque je dis qu'il vaut mieux enrichir l'objet existant, je pensais au cmdlet Add-Member qui permet d'ajouter dynamiquement une propriété à un objet (et seulement celui-là).
[code:1]
$Date=Get-Date
#force l'adaption de l'objet dotnet en objet PowerShell
$Date.Hour>$null
#On échappe le caractère de formatage h avec \
$Date|Add-member noteproperty MonFormat \"le yyyy-MM à HH \heure\"
\"{0:$($date.MonFormat)}\" -f $date
#le 2010-05 à 19 heure
[/code:1]
On peut aussi généraliser l'approche en utilisant un fichier de formatage de type (.ps1xml), qui permet en quelque sorte d'automatiser l'ajout de ce type de membre pour chaque instance du type.
Puisque PowerShell est un langage dynamique, le code peut se modifier lui même pendant l'exécution, on peut faire en sorte qu'il s'automatise lui-même...
Bon, je m'arrête là
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 9 mois #7052
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Calendrier
Concernant ceci :
Laurent Dardenne écrit:
On construit dynamiquement un fichier de configuration de type, puis on le charge :
[code:1]
#http://huddledmasses.org/a-dsl-for-xml-in-powershell-new-xdocument/
import-Module xml_module
#Génére le fichier ps1xml
$filename=\"$env:Temp\test.ps1xml\"
Function New-TypeData($Type,$name,$code,$filename){
# Le code de la fonction New-XDocument ne semble gérer que des variables globales
# on doit donc construire l'appel avec les variables locales
invoke-expression @\"
New-XDocument Types -Encoding \"UTF-16\" {
Type {
Name {\"$Type\"}
Members {
ScriptProperty {
Name {\"$Name\"}
GetScriptBlock { \"$code\"
}#GetscriptBlock
}
}
}
} | % { `$_.Declaration.ToString(); `$_.ToString() } | out-file \"$filename\" -encoding \"UTF8\"
\"@
}
New-TypeData \"System.DateTime\" \"MonFormat\" \"[string] 'le yyyy-MM à HH \heure'\" $filename
#signe $filename
Update-TypeData $filename
$Date=Get-Date
\"{0:$($date.MonFormat)}\" -f $date
#le 2010-06 à 19 heure
[/code:1]
Je reconnais que ceci est assez éloigné du post d'origine, c'est juste pour infos
<br><br>Message édité par: Laurent Dardenne, à: 3/06/10 15:34
Laurent Dardenne écrit:
Une petite démo en V2 avec un module à télécharger.Puisque PowerShell est un langage dynamique, le code peut se modifier lui même pendant l'exécution, on peut faire en sorte qu'il s'automatise lui-même...
On construit dynamiquement un fichier de configuration de type, puis on le charge :
[code:1]
#http://huddledmasses.org/a-dsl-for-xml-in-powershell-new-xdocument/
import-Module xml_module
#Génére le fichier ps1xml
$filename=\"$env:Temp\test.ps1xml\"
Function New-TypeData($Type,$name,$code,$filename){
# Le code de la fonction New-XDocument ne semble gérer que des variables globales
# on doit donc construire l'appel avec les variables locales
invoke-expression @\"
New-XDocument Types -Encoding \"UTF-16\" {
Type {
Name {\"$Type\"}
Members {
ScriptProperty {
Name {\"$Name\"}
GetScriptBlock { \"$code\"
}#GetscriptBlock
}
}
}
} | % { `$_.Declaration.ToString(); `$_.ToString() } | out-file \"$filename\" -encoding \"UTF8\"
\"@
}
New-TypeData \"System.DateTime\" \"MonFormat\" \"[string] 'le yyyy-MM à HH \heure'\" $filename
#signe $filename
Update-TypeData $filename
$Date=Get-Date
\"{0:$($date.MonFormat)}\" -f $date
#le 2010-06 à 19 heure
[/code:1]
Je reconnais que ceci est assez éloigné du post d'origine, c'est juste pour infos
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.039 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Calendrier