Changer la "date de modification" d'un dossier (éventuellement sous PowerShell)

0

De temps en temps, lorsque j'arrête de force un ordinateur Windows Server 2003 (je n'ai pas le choix), les dossiers contenus dans un certain répertoire modifient tous leur "date de modification" en date du jour.

Heureusement, dans chacun de ces dossiers, les fichiers portent tous la bonne "date de modification".

L'un de ces fichiers sur lequel je souhaite copier la "date de modification (ou de création)" est un fichier .jdf dans lequel se trouvent chacun des dossiers.

J'ai besoin d'aide pour créer un script dans PowerSell.

J'ai trouvé ce script PS1 qui fait presque le boulot:

Get-ChildItem $root | Where-Object {$_.PSIsContainer} | Foreach-Object{

# get the oldest file for the current directory object
$oldest = Get-ChildItem $_.FullName | Sort-Object LastWriteTime | Select-Object LastWriteTime -Last 1

if($oldest)
{
# oldest object found, set current directory LastWriteTime
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime 
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}

Le problème est que le dernier objet modifié dans les dossiers est parfois des sous-dossiers qui obtiennent également la date du jour comme «date de modification». Comment puis-je lui donner l'air des fichiers à l'intérieur du dossier et non des dossiers?

pou pou
la source
Votre objectif n’est pas clair pour moi: que doit faire exactement le script souhaité ? (Veuillez ne pas commenter, éditez plutôt votre question.) Cependant, la NTFSdate et l'heure d'un dossier particulier changent chaque fois qu'un objet (fichier ou dossier) est créé ou supprimé à l'intérieur de celui-ci.
JosefZ
@JosefZ: Je viens de modifier le post en ajoutant un script. J'espère que c'est plus clair maintenant. merci
poupou

Réponses:

0

Considérant que Get-ChildItem $root -directorydonne le même résultat que

Get-ChildItem $root | Where-Object {$_.PSIsContainer}

vous pouvez essayer (je ne connais pas la PSsyntaxe verbeuse)

Get-ChildItem $root -file

ou même

gci $root -file

Vous ne savez pas si le reste de votre script nécessite des améliorations ...

JosefZ
la source
J'ai essayé d'ajouter "-directory", une erreur s'est produite: Get-ChildItem: impossible de trouver un paramètre correspondant au nom de paramètre 'répertoire'. A la ligne: 1 caractère: 31 + Get-ChildItem $ root -directory <<<< | Where-Object {$ _. PSIsContainer} | Foreach-Object {
poupou le