Question Copie un fichier si date du jour ok

Plus d'informations
il y a 13 ans 3 semaines #14132 par COTTIN
Vous devez me prendre un blaireau a poser autant de question.

Bonjour,

Voilà, je finalise mon script (sur lequel je vous est posé pas mal de question :( ).

Donc la je vais récupérer sur un autre serveur un fichier CSV.

J'aimerais faire une vérification sur le fichier avec la date de modification avant de le copier de le traiter.

J'ai réussi a récupéré la date de modif du fichier mais comment la comparer avec la date du jour????? et ensuite le copier au bonne emplacement.

[code:1]Get-Item printerdata.csv | Format-Table LastWriteTime[/code:1]








pour info voici mon script \"Final\" si vous voulez y jeter un coup d'oeil.

[code:1]
Function Main {
##### On choisit le repertoire de travail #####
cp \"\\framaesr60\Epson PCC Server\printerdata.csv\" \"c:\Script\imprimante\\"

##### On récupere le fichier CSV #####
$fichiercsv = \"c:\Script\imprimante\printerdata.csv\"
cd \"\\10.100.2.47\c$\Script\imprimante\\"
$date = Get-Date


##### On récuperer toute les lignes marquer indisponible dans le fichier indispo.txt et nbpage.txt #####
Select-String -Path $fichiercsv -Pattern \"EPSON\" > nbpage.txt
Select-String -Path $fichiercsv -Pattern \"RW6Y\" > NBpageTempIp.txt
Select-String -Path $fichiercsv -Pattern \"indisponible\" > Indispo.txt


##### On rend le fichier exploitable et on l'envoie dans le fichier indispofinal.txt #####
$indispo = \"Indispo.txt\"
$indispofinal = \"Indispofinal.txt\"

##### On lit le fichier et on ne garde que le nombre de page des lignes où il y a BLACK #####

$ligne = Get-Content NBpageTempIp.txt | Select-String -Pattern \"EPSON\" > temp.txt
Get-Content temp.txt| %{ $_.Split(';')[1];} > NbpageIP.txt

$ligne = Get-Content NBpageTempIp.txt | Select-String -Pattern \"RW6Y0\" > temp.txt
Get-Content temp.txt| %{ $_.Split(';')[3];} > NumSerie.txt

$ligne = Get-Content NBpageTempIp.txt | Select-String -Pattern \"RW6Y\" > temp.txt
Get-Content temp.txt| %{ $_.Split(';')[4];} > Nbpage.txt

$ligne = Get-Content indispo.txt | Select-String -Pattern \"In\" > temp.txt
Get-Content temp.txt| %{ $_.Split(';')[1];} >> IndispoFinal.txt



##### On calcule le nombre de ligne dans tout les fichiers de récupération #####
}
Function Mysql_Ecriture {
[void][system.reflection.Assembly]::LoadWithPartialName(\"MySql.Data\"«»)

$port = \"3306\"
$srv = \"127.0.0.1\"
$user = \"root\"
$mdp = \"\"
$bdd = \"imprimante\"


$connection = New-Object MySql.Data.MySqlClient.MySqlConnection(\"server=$srv;port=$port;uid=$user;pwd=$mdp;database=$bdd;Pooling=False\"«»)
$connection.Open()
$nbline = Get-Content NBpageIP.txt
$nblines = $nbline.Length
$date = Get-Date
$date_formatee = $date.tostring('yyyy-MM-dd')
cd \"\\10.100.2.47\c$\Script\imprimante\\"

for ($i = 0;$i -lt $nbline.Length; $i++){
$IP = Get-Content -Path NbpageIP.txt | where { $_ -ne \"$null\" } | Select-Object -Index $i
$Numserie = Get-Content -Path NumSerie.txt | where { $_ -ne \"$null\" } | Select-Object -Index $i
$Page = Get-Content -Path Nbpage.txt | where { $_ -ne \"$null\" } | Select-Object -Index $i
$comp = $comp + 1


$query = @\"
INSERT INTO `log_impression`(ID ,Date_integration, Adresse_ip, Nb_Pages, Num_Serie) VALUES (NULL,\"$date_formatee\",\"$IP\",\"$Page\",\"$Numserie\"«»)
\"@

$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($query,$connection)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet,\"imprimante\"«»)
}


$nbline = Get-Content IndispoFinal.txt
$nblinesindispo = $nbline.Length

for ($i = 0;$i -lt $nblinesindispo; $i++){

$Indispo = Get-Content -Path IndispoFinal.txt | where { $_ -ne \"$null\" } | Select-Object -Index $i

$query = @\"
INSERT INTO `log_impression`(ID ,Date_integration, Adresse_ip, Nb_Pages, Num_Serie) VALUES (NULL,\"$date_formatee\",\"$Indispo\",NULL,NULL)
\"@
$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($query,$connection)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet,\"imprimante\"«»)

}
$connection.Close()
}
Function Mysql_Lecture {

cd \"c:\Script\imprimante\\"

$date = Get-Date
$date_formatee = $date.tostring('yyyy-MM-dd')

[void] [system.reflection.Assembly]::LoadWithPartialName(\"MySql.Data\"«»)

# On positionne quelques variables
$serv = \"127.0.0.1\"
$port = \"3306\"
$user = \"root\"
$password = \"\"
$db = \"imprimante\"

# Création de l'instance, connexion à la base de données
$mysql = New-Object MySql.Data.MySqlClient.MySqlConnection(\"server=$serv;port=$port;uid=$user;pwd=$password;database=$db;Pooling=False\"«»)
$mysql.Open()

# Instanciation de la requête
$reqStr = \" SELECT a.adresse_ip, min(date_integration) as date_1ere_panne FROM log_impression a inner join ( select adresse_ip, max(date_integration) as date_dern_reponse from log_impression where num_serie is not null group by adresse_ip ) b on a.adresse_ip = b.adresse_ip and a.date_integration > date_dern_reponse where num_serie is null group by a.adresse_ip \"
$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($reqStr,$mysql)

# Création du data adapter et du dataset qui permettront de traiter les données
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet,\"log_impression\"«»)

# Affichage du résultat
$res = $dataSet.Tables[\"log_impression\"]
$res | Format-Table
$res >> imprimante_non_reponse.txt


#Fermeture de la connexion
$mysql.Close()

}
Function Traitement_Mysql {

}
Function SendMail {

$expediteur = \"imprimante@assu2000.com\"
$destinataire = \" tcottin@assu2000.com\"
$cc = \"technique@assu2000.com\"
$serveur = \"10.100.0.62\"
$fichier = \"imprimante_non_reponse.txt\"
$objet = \"Retour imprimante\" + [System.DateTime]::Now
$texte = \"Voici le retour des imprimante ne répondant pas.\"

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
#$copiecarbone = new-object System.Net.Mail.Mailaddress $cc
#$message.cc.Add($copiecarbone)
$attachment = new-object System.Net.Mail.Attachment $fichier
$message.Attachments.Add($attachment)
$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
$SMTPclient.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials

$SMTPclient.Send($message)



}
Function Purge {

$remove = \"retour_mysql_\"+$date_formatee+\".txt\"

rm NumSerie.txt
rm retour_mysql_*.txt
rm NBpageTempIp.txt
rm NbpageIP.txt
rm nbpage.txt
rm IndispoFinal.txt
rm Indispo.txt
rm temp.txt
}

#Main
#Mysql_Ecriture
Mysql_Lecture
#Traitement_Mysql
#SendMail
#Purge
[/code:1]

Message édité par: tcottin, à: 27/02/13 17:01

Message édité par: tcottin, à: 27/02/13 17:04<br><br>Message édité par: tcottin, à: 27/02/13 18:19

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 3 semaines #14133 par SiSMik
Salut,

Tu peux faire quelque chose du genre, mais là ça va vérifier à la seconde prêt...

[code:1]if ((Get-Item printerdata.csv).LastWriteTime -eq (Get-Date)) { ... }[/code:1]

Va falloir faire du traitement sur les dates à mon avis sinon tu auras jamais de condition validée.

Cette page est dans mes bookmarks depuis un moment et elle me ressert souvent.

Bonne soirée !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14179 par sebastien
Bonjour,

ceci devrait fonctionner :

[code:1]if ((Get-Item printerdata.csv).LastWriteTime.date -eq (Get-Date).date) { ... }[/code:1]

Cdt,

Seb

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14186 par LEON
Réponse de LEON sur le sujet Re:Copie un fichier si date du jour ok
Salut,

La commande de benduru est parfaite, maintenant si tu veux faire des tests non pas à la seconde, mais à la minute, heure, jours ... bref, tu peux formater tes résultats comme çà:

[code:1]
$file = Get-ChildItem -Path \&quot;D:\TEMP\testpeoplesoft.txt\&quot;
$file.LastWriteTime.ToString(\&quot;yyyy-MM-dd HH:mm\&quot;«») # 2013-03-02 12:48
$file.LastWriteTime.ToString(\&quot;yyyy-MM-dd HH\&quot;«») # 2013-03-02 12 et ainsi de suite

(Get-Date).tostring(\&quot;yyyy-MM-dd HH\&quot;«»)

[/code:1]

Showtime<br><br>Message édité par: Showtime, à: 5/03/13 22:28

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 semaines #14193 par Arnaud Petitjean
Bonjour,

Ce que j'aime bien faire pour comparer des dates c'est utiliser la commande New-TimeSpan. En effet, celle-ci retourne un intervalle de temps entre 2 dates.

Exemple:
[code:1]
PS &gt; $DateInstall = (Get-Item C:\windows).CreationTime
PS &gt; New-TimeSpan -Start $DateInstall -End (Get-Date)


Days : 1331
Hours : 5
Minutes : 2
Seconds : 45
Milliseconds : 175
Ticks : 1150165651756552
TotalDays : 1331,2102450886
TotalHours : 31949,0458821264
TotalMinutes : 1916942,75292759
TotalSeconds : 115016565,175655
TotalMilliseconds : 115016565175,655
[/code:1]

Ainsi il n'y a plus qu'à choisir la propriété qui nous intéresse pour effectuer la comparaison suivante.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 semaine #14222 par sebastien
Bonjour,

Showtime écrit:

La commande de benduru est parfaite

Pas vraiment, tcottin cherche à comparer des dates, et je doute qu'une comparaison à la seconde prêt lui soit utile ...
tcottin écrit:

J'ai réussi a récupéré la date de modif du fichier mais comment la comparer avec la date du jour


Une alternative intéressante pourrait être de soustraire directement les dates :

[code:1]
((get-date)-(Get-Item printerdata.csv).lastwritetime).totalhours
[/code:1]

Ce qui pourrait donner dans ton cas :

[code:1]
If (((get-date)-(Get-Item printerdata.csv).lastwritetime).totalhours -gt 24) {....}[/code:1]

Dans les 'properties' Total, sont disponibles :

TotalDays
TotalHours
TotalMilliseconds
TotalMinutes
TotalSeconds

Cdt,

Seb<br><br>Message édité par: sebasti1, à: 7/03/13 15:55

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.092 secondes
Propulsé par Kunena