Flash info

"Those who forget to script are doomed to repeat their work."

Jeffery Hicks (PowerShell MVP)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
Mitakue
Utilisateur

PowerShelleur Débutant
Messages: 41
graphgraph
Karma: 0  
Export-Csv et Where-Object - 4/07/17 13:27 Bonjour,

Je me permet de revenir vers vous car j'ai un script qui me pose problème depuis plusieurs jours.

Je vais d'abord vous donner le contexte :

Je dois écrire un script PowerShell qui liste des informations concernant mes jobs Control-M, notamment l'ORDERID qui est une information propre à chaque job, cette liste doit me permettre de les filtrer en fonction de leur ODATE pour pouvoir les supprimer c'est la ou ça se gâte .

Voici ma commande :

Code:

 $OrderIDjobsAsupprimer ctmpsm -listall ALLFIELDS_FULL where-object {$_.ODATE -lt "YYYYMMDD"}



Il ne me fait pas le filtre. Il me liste tous mes jobs même ceux dont la date est supérieur à mon ODATE.

Je me suis donc décidé à passer par un fichier csv sauf qu'il ne me sort que "LENGHT" comme paramètre. Après plusieurs recherche sur internet j'ai trouvé pourquoi et je le comprends (même si je trouve ça c*****n), j'ai lu plusieurs solution que j'ai essayé de mettre en oeuvre mais ça ne fonctionne pas chez moi et je ne les comprends pas vraiment ^_^.

Je dois donc vous avouer que votre aide serait la bienvenue surtout sur le where-object que j'utilise déjà de cette manière dans plusieurs scripts qui sont en Prod.

Merci d'avance,

Mitakue
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5726
graph
Karma: 209  
Re:Export-Csv et Where-Object - 4/07/17 18:29 Salut,
avant tout il faut connaitre le type de l'objet que tu récupères, à priori du type string (pb du .csv).

Ensuite il faut convertir les données en objet ou extraire uniquement l'info à convertir en Datetime.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Mitakue
Utilisateur

PowerShelleur Débutant
Messages: 41
graphgraph
Karma: 0  
Re:Export-Csv et Where-Object - 5/07/17 10:35 Hello,

En PJ un extract de ce que je souhaite récupérer. C'est un csv mais je n'ai pas utilisé export-csv .

Les infos dont j'ai besoin sont l'ORDERID, le JOBNAME et l'ODATE.

Code:

 ORDERID                            JOBNAME                                 TYPE  ODATE     STATE    STATUS  FILENAME                      APPLICATION          SUBAPPLICATION  -------- ----------------------------------------------------------------- ----- -------- -------- - ----- ----------------------------- -------------------- -------------------- 0000a0y5 ACCDATA-ImportGSM_Orga_TST                                        FLD   20170702 Post pro OK                                                                       TST                                                               Orga_TST                                                          0000a2ij ACCDATA-ImportGSM_Orga_TST                                        FLD   20170703 Executin OK                                                                       TST                                                               Orga_TST                                                          0000a460 ACCDATA-ImportGSM_Orga_TST                                        FLD   20170704 Executin OK                                                                       TST                                                               Orga_TST                                                          0000a2qk ACCDATA-Loading-Risk_Reporting_TST                                FLD   20170704 Executin OK                                                                       TST                                                               Reporting_TST                                                     0000a11g ACCDATA-Loading-Risk_Reporting_TST                                FLD   20170703 Executin OK                                                                       TST                                                               Reporting_TST                                                     00009zmf ACCDATA-Loading-Risk_Reporting_TST                                FLD   20170702 Post pro OK                                                                       TST                                                               Reporting_TST                                                     00009zmj ACCDATA-Loading-Statpro_Reporting_TST                             FLD   20170702 Executin OK                                                                       TST                                                               Reporting_TST                                                     00009zcy ACCDATA-Loading-Statpro_Reporting_TST                             FLD   20170701 Executin OK                                                                       TST                                                               Reporting_TST                                                     0000a11k ACCDATA-Loading-Statpro_Reporting_TST                             FLD   20170703 Executin OK                                                                       TST                                                               Reporting_TST                                                     0000a2qo ACCDATA-Loading-Statpro_Reporting_TST                             FLD   20170704 Executin OK                                                                       TST             



Merci d'avance,

Mitakue

Message édité par: Mitakue, à: 5/07/17 11:36
  | | L'administrateur a désactivé l'accés public en écriture.
marcci
Utilisateur

PowerShelleur Amateur
Messages: 90
graphgraph
Karma: 10  
Re:Export-Csv et Where-Object - 5/07/17 13:23 Ben en effet comme le dit Laurent, ODATE n'est pas exploitable en l'état.
Il faut d'abord passer ton object dans une moulinette pour convertir ODATE de type String en type DateTime.

Une ébauche brut force à intégrer dans une fonction.
Code:

  $ODATE "20170703" $year $date.Substring(0,4) $month $date.Substring(4,2) $day $date.Substring(6,2) [datetime]$ODATE Get-Date "$day/$month/$year" PS C:\$ODATE lundi 3 juillet 2017 00:00:00



Message édité par: marcci, à: 5/07/17 14:29
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5726
graph
Karma: 209  
Re:Export-Csv et Where-Object - 5/07/17 16:43 Mitakue écrit:

En PJ un extract de ce que je souhaite récupérer. C'est un csv mais je n'ai pas utilisé export-csv

A moins que le fichier récupéré insére une ligne d'info sur plusieurs lignes de texte(ce qui ne facilite pas la tâche), peux-tu joindre un fichier texte correctement formaté ?

Marcci on peut aussi utiliser ceci :
Code:

  [datetime]::ParseExact($odate,'yyyyMMdd',$null)

Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
marcci
Utilisateur

PowerShelleur Amateur
Messages: 90
graphgraph
Karma: 10  
Re:Export-Csv et Where-Object - 5/07/17 18:42 Marcci on peut aussi utiliser ceci :
Voila qui est nettement plus élégant
  | | L'administrateur a désactivé l'accés public en écriture.
Mitakue
Utilisateur

PowerShelleur Débutant
Messages: 41
graphgraph
Karma: 0  
Re:Export-Csv et Where-Object - 6/07/17 10:12 Hello,

Merci pour vos réponses,

Je ne peux pour le moment pas joindre de fichier exemple, sinon pour te répondre Laurent le fichier n'intégre pas une ligne d'info sur plusieurs ligne de texte en revanche chaque fais 302 caractère de longueur.

Je me suis inspiré de la première réponse de marcci pour essayer de récupérer ma valeur ODATE en utilisant Substring(,) sauf qu'il me crache une erreur :

Code:

 Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within the string. Parameter name: length"



Uniquement au démarrage du script et après il me récupère bien mon ODATE car je le vosi s'afficher

Voici le nouveau code :

Code:

 $date = (get-date).AddDays(-4$dateformated = (get-date $date -Uformat "%Y%m%d") $OrderIDjobsAsupprimer ctmpsm -listall ALLFIELDS_FULL export.csv $jobsAsupprimer get-content export.csv foreach ($line in $jobsAsupprimer)     {         $OrderID $line.Substring(0,9)         $JobName $line.Substring(10,66)         $Odate $line.Substring(81,9)         if ($Odate -le $dateformated)             {                 write-host $Odate                 #ctmpsm -updateajf $OrderID HOLD                 #ctmpsm -updateajf $OrderID DELETE             }     }



Cordialement,

Mitakue
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5726
graph
Karma: 209  
Re:Export-Csv et Where-Object - 9/07/17 20:37 Le format du fichier n'étant du csv, mais des champs de longueur fixe on peut procéder comme ceci :
Code:

  $lines=gc c:\temp\data.txt $Count=$Lines.count-1 $o=foreach ($line in $lines[2..$count]) {  if ($line -match '^(?<OrderID>.{8}) (?<JobName>.{65}) (?<Type>.{5}) (?<Date>.{8}).*')  {    Write-debug "OrderID = $($matches.OrderID)"    Write-debug "JobName = $($matches.JobName)"    Write-debug "Date string = $($matches.Date)"    [PSCustomObject]@{       PSTypeName="InfoControlM"        #on peut aussi mémoriser en texte et ajouter une méthode conversion sur le type personnalisé ' InfoControlM'       Date=([datetime]::ParseExact($matches.Date,'yyyyMMdd',$null))       OrderID $matches.OrderID #Trim() ?       JobName $matches.JobName.Trim() # A vérifier si nécessaire    }  }  else   { Write-Error "Ligne en erreur :$line" } }  $O


Voir aussi la fonction Import-FixedLength
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com