Question Enregistrer la date du dernier fichier modifier

Plus d'informations
il y a 11 ans 9 mois #17561 par Laurent Dardenne
Lymzak écrit:

Par contre je suis confronté à un nouveau probléme

Ce serait trop simple sinon :-)
Lymzak écrit:

Je ne vois pas du tout comment faire :(

Déjà, explique-nous dés le départ ce que tu veux faire de A à Z, et pas nous donner les informations au fur et à mesure.
En procédant ainsi tu nous fait perdre notre temps, ce n'est pas la meilleure manière d'obtenir de l'aide...

Je suppose que tu souhaites contrôler à intervalle régulier si un répertoire contient de nouveaux fichier par rapport au dernier contrôle effectué ?
C'est bien cela ?

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 9 mois #17562 par Lymzak
Oui je suis désolé j'aurais du être plus clair dès le début. Du coup oui je dois contrôler à intervalle régulier un répertoire contenant des fichiers texte. Pour cela je dois créer dans un nouveau répertoire un fichier texte qui contient la date du dernier fichier créer ou modifier.

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

Plus d'informations
il y a 11 ans 9 mois #17563 par Laurent Dardenne
Une ébauche de solution :
[code:1]
function Select-LastWriteTime {
[cmdletbinding()]

param(
[validateNotnull()]
[parameter(mandatory=$true,position=0,helpmessage=\"Entrer le chemin de votre dossier\"«»)]
$path
)
if (Test-Path $Path)
{
Write-Debug \"Select date from $path\"
Get-ChildItem $Path|
#La recherche porte uniquement sur les fichiers
Where {-not $_.psisContainer}|
Measure-Object -Maximum LastWriteTime|
Foreach {
Write-Output $_.Maximum
}
}
else
{ throw \"Répertoire inexistant\" }
}#Select-LastWriteTime

function Get-LastWriteTime {
[cmdletbinding()]

param(
[validateNotnull()]
[parameter(mandatory=$false,position=0,helpmessage=\"Entrer le nom complet du fichier de sauvegarde.\"«»)]
$path=\"C:\Test\logs\lmf.xml\"
)
#si le fichier existe renvoie la date, sinon $null
if (Test-Path $Path)
{
Write-Debug \"Load date from $path\"
Import-CliXml $path
}
}#Get-LastWriteTime

function Set-LastWriteTime {
[cmdletbinding()]

param(
[validateNotnull()]
[parameter(mandatory=$false,position=0,helpmessage=\"Entrer le nom complet du fichier de sauvegarde.\"«»)]
$path=\"C:\Test\logs\lmf.xml\",
[parameter(mandatory=$true,position=1)]
[DateTime]$Date
)
Write-Debug \"save date into $path\"
$Date|Export-CliXml $path
} #Set-LastWriteTime

$DebugPreference='Continue'

$CurrentDate=Select-LastWriteTime c:\temp
$LastControlDate=Get-LastWriteTime
if ($LastControlDate -eq $null)
{
Write-Debug \"Fichier DATE inexistant, on le crée\"
Set-LastWriteTime -Date $CurrentDate
}
elseif ($CurrentDate -gt $LastControlDate)
{
Write-Debug \"La date est mise à jour\"
Set-LastWriteTime -Date $CurrentDate
}
else
{ Write-Debug \"Pas de changement depuis la dernière sauvegarde\" }
$DebugPreference='SilentlyContinue'
[/code:1]
A vérifier et à compléter (gestion d'erreur).

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 9 mois #17569 par Lymzak
Je me suis aidé de ton document pdf sur \"la gestion des erreurs sous powershell\" qui m'a permis de tester toute les conditions du code. Mais je me retrouve confronter à 2 erreurs que je n'arrive pas à corriger. Si quelqu'un a une idée ou a déjà été confronté à ce problème :)

Import-Clixml : Données non valides au niveau racine

Set-LastWriteTime : Impossible de valider l'argument sur le paramétre <<path>> l'argument est null. Indiquez un argument non-null et réessayez.

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

Plus d'informations
il y a 11 ans 9 mois #17570 par Laurent Dardenne
Lymzak écrit:

Import-Clixml : Données non valides au niveau racine

A priori la structure XML est erronée. Pb d'encodage ?
Lymzak écrit:

Set-LastWriteTime : Impossible de valider l'argument sur le paramétre <<path>> l'argument est null.

Suivre les instructions :)
Indiquez un argument non-null et réessayez.[/quote]
As-tu modifié le code ?
As-tu l'erreur à chaque fois ?
As-tu réessayé en supprimant le fichier XML ?
Quel OS as-tu et quelle version de Powershell ?

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 9 mois #17572 par Lymzak
J'ai modifié la fonctions Select-LastWriteTime, car j'avais un problème avec Measure-object qui m'afficher toutes les dates du répertoire mais avec comme message d'erreurs :
\" l'objet d'entrée <<05/05/2014 12:20:44>> n'est pas numériques\".

[code:1]function Select-LastWriteTime
{
[cmdletbinding()]

param(
[validateNotnull()]
[parameter(mandatory=$true,position=0,helpmessage=\"entrer le chemin de votre dossier\",Valuefrompipeline=$true)]$path1=\"C:\temp\\"
)
$path=\"C:\Test\logs\lmf.xml\"
[System.Collections.ArrayList]$array = @()

foreach($item in (gci $path1))
{
$array.Add($item.LastWriteTime) >$null

}
Write-Output (($array| Sort-Object -Descending)[0])

if (Test-Path $path){

}
else{
New-item -ItemType file -Name lmf.xml -Path \"C:\Test\logs\\" -Value (([System.String]::Format(\"{0:dd/MM/yyyy HH:mm:«»ss}\",(($array| Sort-Object -Descending)[0]))))
}

}[/code:1]

A chaque fois j'ai les même erreurs.

Oui j'ai réessayé en supprimant le fichier XMl.

J'ai pour OS, Microsoft windows 7 professionnel et la version 2.0 de powershell

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

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