Question Export-Csv et Where-Object
- Faucon
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 43
- Remerciements reçus 0
il y a 6 ans 8 mois #23897
par Faucon
Réponse de Faucon sur le sujet Re:Export-Csv et Where-Object
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:1]Exception calling \"Substring\" with \"2\" argument(s): \"Index and length must refer to a location within the string. Parameter name: length\"[/code:1]
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:1]$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
}
}[/code:1]
Cordialement,
Mitakue
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:1]Exception calling \"Substring\" with \"2\" argument(s): \"Index and length must refer to a location within the string. Parameter name: length\"[/code:1]
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:1]$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
}
}[/code:1]
Cordialement,
Mitakue
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 6 ans 8 mois #23924
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Export-Csv et Where-Object
Le format du fichier n'étant du csv, mais des champs de longueur fixe on peut procéder comme ceci :
[code:1]
$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
[/code:1]
Voir aussi la fonction Import-FixedLength
[code:1]
$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
[/code:1]
Voir aussi la fonction Import-FixedLength
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.106 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Export-Csv et Where-Object