none
powershell check si fichier date de plus d'1h RRS feed

  • Question

  • Bonjour

    J'aimerai checker si des fichiers datent de plus d'1h dans un repertoire

    J'ai un répertoire
    c:\
       -> partages

    quand un fichier date de moins d'1h => réponse ok

    quand un fichier date de plus d'1h => réponse erreur 2

    Mais il doit me manquer des choses. J'ai beaucoup cherché sur google mais je n'arrive pas à trouver la syntax exact

    Pouvez-vous m'aider ?

    Ctrl

    seb

    $a = Get-ChildItem C:\partages\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddHours(-1)}
    
        [CmdletBinding()]
    	param (
    		[Parameter(Mandatory = $true)][String]$path     
    	)
        
        BEGIN {
            $ErrorActionPreference = "Stop"
        }
        
        PROCESS {
            try {
                #echo $path
                $result = Test-path "$path"
            } catch {
                $result = "erreur"
            }
        }
        
        END {
    		if ($a = (Get-ChildItem C:\partages\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddHours(-1)}))
    		{
                echo "Test OK"
                exit 0
    		}
            ElseIf ($result -eq 'false')
            {
                echo "Partage inaccessible"
                exit 2
            }
            else
            {
                echo "Erreur lors du check"
                exit 2
            }
    	}


    • Modifié Seb.LC lundi 13 octobre 2014 15:19
    lundi 13 octobre 2014 15:18

Toutes les réponses

  • Bonjour,

    souhaites-tu obtenir un résultat pour chaque fichier ou dés que le premier répond à un des critères ?

    Une autre approche basé sur un regroupement  :

    $Date=(Get-Date).AddHours(-1)
    $path='C:\temp\*.*'
    $H=Dir $Path |
         Where-Object {! $_.PsIsContainer}|
         Group-Object -Property {$_.LastWriteTime -ge $date} -AsHashTable -AsString
    
    $oldOfs,$ofs=$ofs,' , '
    if ($H.Contains('False'))
    {
      Write-Warning "Fichier de plus d'une heure"
      "$($H.False)"
    }
    if ($H.Contains('True'))
    {
      Write-Warning "Fichier de moins d'une heure"
      "$($H.True)"
    }
    $ofs=$oldOfs


    Beatus, qui prodest, quibus potest.

    lundi 13 octobre 2014 16:21
    Modérateur
  • bonjour

    Dès qu'il y en a un qui dépasse 1h

    Ctrl

    mardi 14 octobre 2014 08:33
  • Merci Laurent

    Voilà un peu le résultat

    Ce script est lancé par un outil de supervision (nagios) toutes les 15 minutes

    Quand le scripts retourne un message comme quoi il y a des fichiers de plus d'1h => il les liste et fait un exit 2

    cette sortie est interpreté par l'outil de supervision pour remonter l'erreur à traiter

    $Date=(Get-Date).AddHours(-1)
    $path='C:\partages\*.*'
    $H=Dir $Path |
         Where-Object {! $_.PsIsContainer}|
         Group-Object -Property {$_.LastWriteTime -ge $date} -AsHashTable -AsString
    
    $oldOfs,$ofs=$ofs,' , '
    if ($H.Contains('False'))
    {
    	Write-Warning "Fichier de plus d'une heure"
    	"$($H.False)"
    	echo "Erreur lors du check"
            exit 2
    }
    if ($H.Contains('True'))
    {
    	Write-Warning "Fichier de moins d'une heure"
    	"$($H.True)"
    	echo "Test OK"
    	exit 0
    }
    $ofs=$oldOfs

    Ctrl

    Seb

    www.fedoria.com

    • Modifié Seb.LC mardi 14 octobre 2014 09:21
    mardi 14 octobre 2014 09:09