IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Cliché instantanée Powershell [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut Cliché instantanée Powershell
    Bonjour,

    Je vous explique mon problème.

    J'ai une trentaine de serveur à gérer ou je réalise des clichés toutes les 6 heures. Mon soucis c'est que j'ai aucune remonté d'information, du coup je voudrais réaliser un script powershell qui permet de comparer les lecteurs du serveur (C:, D:, G: ) par exemple, et les lettres des clichés réalisés durant les 6 dernières heures et m'afficher "OK" si le volume a un cliché de moins de 6heures, sinon m'afficher "KO".

    J'ai fais un petit script powershell sauf qu'il ne m'affiche pas les volumes sans clichés.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    $BackupDay = 6
    $server = $env:COMPUTERNAME
    Set-ExecutionPolicy unrestricted -force
     
    Function Get-DriveLetters
    {
        $volumes = @{}
        $allvolumes = Get-WmiObject -Class "win32_volume" -ComputerName $server | Select DeviceID, Name
             foreach ($v in $allvolumes)
                 {
                     $volumes.add($v.DeviceID, $v.Name)
                 }
             $volumes
    }
     
    Function Get-vol{
        $test2=@{}
        $test = Get-PSdrive -PSProvider filesystem | Select root, Name
            foreach ($t in $test)
                 {
                     $test2.add($t.Root, $t.Name)
     
                 }
    }
     
    $teste = Get-vol 
    write-host $teste
     
    Function Check-ShadowCopies
    {
        $allshadowcopies = @()
        foreach ($s in $server)
            {
                 $driveletters = Get-DriveLetters $s
                 $shadowcopies = Get-WmiObject -Class "Win32_shadowcopy" | Select InstallDate, VolumeName
     
                      foreach ( $copy in $shadowcopies)
                         {
                           $shadowcopy = New-Object System.object              
                           $date = [datetime]::ParseExact($copy.InstallDate.Split(".")[0], "yyyyMMddHHmmss", $null)
     
                           if ( $date -ge (Get-Date).Addhours(-$backupday))
                                 { 
                                    ## La variable $Etat prend la valeur "OK" ##
     
                                      $Etat = "OK"
     
                                    ## On ajoute à l'objet personnalisé $cliches une propriété Etat où l'on mettra la valeur retournée ##
     
                                       $shadowcopy| Add-Member -Type NoteProperty -Name Select -Value $driveletters.item($copy.VolumeName)
                                       $shadowcopy | Add-Member -Type NoteProperty -Name Etat -Value $Etat
                                       $shadowcopy | Add-Member -Type NoteProperty -Name Date -Value $date
                                     ## On ajoute les valeurs retournées de la variable $cliches dans le tableau $Tableau ##
     
                                       $allshadowcopies += $shadowcopy
                           }
     
                             ## Fin du if ##
     
                             ## Sinon ##
     
                 else
                    {
                        $Etat = "Ko"
                        $shadowcopy | Add-Member -Type Noteproperty -Name select -Value $teste
                    }                
     
     
     
         }
             $test2
             $allshadowcopies | Sort-Object Etat,Driveletter -Descending
    }
    }
     
    $checkshadowcopy = Check-Shadowcopies
    $checkshadowcopy | Out-File C:\Users\Administrateur\Desktop\test.txt

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut Personne
    Personne ? J'aurais vraiment besoin d'aide.. je stagne..

    Cordialement,

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    place des traces de debug là où tu crées /émets des objets.
    La fonction Get-Vol ne renvoie rien.
    Et il est préférable d'utiliser un PSCustomObject au lieu d'un Object.
    Crée une fonction de création d'objet personnalisé, car je ne suis pas sûr qu'il aient tous les mêmes propriétés selon l'état.

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    Salut,

    J'ai regardé votre message et vos indications à essayer, sauf que je ne maîtrise pas spécialement powershell.
    De ce fait je n'ai pas très bien compris ce que vous vouliez que j'essaie et je n'ai pas réussi.

    Cordialement,

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Ok
    Citation Envoyé par thibautF Voir le message
    J'ai fais un petit script powershell sauf qu'il ne m'affiche pas les volumes sans clichés.
    Ton script doit renvoyer des objets avec et sans clichés, pour le moment il ne semble gérer que ceux avec cliché.
    Place avant la/les lignes de création de tes objets, un appel à write-debug "Objet avec cliché crée" ou write-debug "Objet sans cliché crée".
    Tu actives la trace avec $Debugpreference='Continue'.
    Code powersehll : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $Etat = "OK"
     write-debug "Objet avec cliché crée"
    
    ...
      $Etat = "Ko"
     write-debug "Objet sans cliché crée"
    Ainsi tu verras cb d'objet tu penses créer et combien tu en reçois réellement.

    Ton idée d'utiliser un tableau $allshadowcopies n'est peut être pas la bonne approche. On peut déterminer ceux avec ou sans cliché en filtrant sur la proprieté Etat -eq 'Ok'

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    Merci, pour votre rapidité,

    J'ai donc changer le En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Etat -eq 'ko' 
    write-debug "Objet sans cliché crée"

    et

    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Etat -eq 'ok' 
    write-debug "Objet cliché crée"

    ça me retourne dans mon fichier txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    False
    False
    False
    False
    False
    
    et mes lecteurs avec le cliché présent
    Je dois en déduire quoi?

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Je t'ai réécrit une partie pour que ce soit plus lisible et te permettre de comprendre (enfin j'espère ) ce qui ne vas pas dans ton code:
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    $BackupDay = 6
    $server = $env:COMPUTERNAME
    Set-ExecutionPolicy unrestricted -force
     
    Function Get-DriveLetters{
     param($Server)
     
        $volumes = @{}
        $allvolumes = Get-WmiObject -Class "win32_volume" -ComputerName $server | Select DeviceID, Name
        foreach ($v in $allvolumes)
        {
         $volumes.add($v.DeviceID, $v.Name)
        }
        $volumes
    }
     
    Function Get-vol{
      $test2=@{}
      # Attention au drive perso : new-PSDrive MonDrive c:\projets\ ...
      $test = Get-PSdrive -PSProvider FileSystem |
               Where-Object {$_.name -match '^[A-Z]$'} | 
               Select-Object Root, Name
      foreach ($t in $test)
      {
        $test2.add($t.Root, $t.Name)
      }
     $test2
    }
     
    $teste = Get-vol 
    write-host $teste
     
     
    Function New-InfosCliches{
    #crée un objet personnalisé
    param(
       [Parameter(Mandatory=$True,position=0)]
       [AllowNull()]
      $Select,
     
       [Parameter(Mandatory=$True,position=1)]
       [AllowNull()]
      $Etat,
     
       [Parameter(Mandatory=$True,position=2)]
       [AllowNull()]
      $Date
    )
     
      [pscustomobject]@{
        PSTypeName='InfosCliches';
        Select=$Select;
        Etat=$Etat;
        Date=$Date;
       }
    }# New-InfosCliches
     
    Function Check-ShadowCopies{
     param($Servers)         
     
      foreach ($Srv in $servers)
      {
          $driveletters = Get-DriveLetters $Srv
          $shadowcopies = Get-WmiObject -Class "Win32_shadowcopy" | Select InstallDate, VolumeName
     
          foreach ( $copy in $shadowcopies)
          {
           $shadowcopy=New-InfosCliches -Select $null -Etat $null-Date $null            
           $date = [datetime]::ParseExact($copy.InstallDate.Split(".")[0], "yyyyMMddHHmmss", $null)
     
           if ( $date -ge (Get-Date).Addhours(-$backupday))
           { 
              ## On ajoute à l'objet personnalisé $cliches une propriété Etat où l'on mettra la valeur retournée ##
             $shadowcopy.Select=$driveletters.item($copy.VolumeName)
             $shadowcopy.Etat="Ok"
             $shadowcopy.Date=$Date
              ## On émet le nouvel objet dans le pipeline
             write-debug "Création objet avec cliché" 
             Write-output $shadowcopy
           }
          else
          {
            write-debug "Création Objet sans cliché "        
            $shadowcopy.Etat="Ko"
            $shadowcopy.Select=$teste
                  ## On émet le nouvel objet dans le pipeline
            Write-output $shadowcopy
          }                
        }
     }
    }
    $Debugpreference='Continue'
      $checkshadowcopy = Check-Shadowcopies $Server
    $Debugpreference='SilentlyContinue'
    $checkshadowcopy | Sort-Object Etat,Driveletter -Descending| Out-File C:\Users\Administrateur\Desktop\test.txt
    Dans la dernière ligne, la propriété DriveLetter n'existe pas. J'ai retiré cette instruction de la fonction elle fausse le résultat obtenu. Quant à la variable $teste je l'ai laissé en l'état.
    Enfin le pb est que tu crées des objets en te basant sur la liste des clichés et pas sur la liste de drives du serveur.

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    Merci beaucoup, donc j'ai plutôt bien compris ( t'as bien fais d'espérer ).

    C'est aussi ce que j'avais remarqué que je me basais sur la liste des clichés car quand j'essaye de faire l'inverse j'ai le droit à un retour de valeur null par exemple pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $shadowcopy.Select=$driveletters.item($copy.VolumeName)
    Et quand j'arrive à trouver une solution le fichier txt est toujours vide.

    En revanche avec ton programme je viens de remarquer que l'utilisation du if n'est peut-être pas approprié, car actuellement si le cliché a moins de 6 heures il me dit 'Ok' mais si le cliché à plus de 6 heures il va me retourner 'Ko', donc si j'ai 20 cliché existant sur le serveur ça va me faire un joli petit paver à lire.

    Du coup voilà, je continue à chercher de mon côté en utilisant la base que tu m'as donné car c'est beaucoup plus claire et compréhensible que le fouilli que j'avais fais.

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2018
    Messages : 12
    Par défaut
    J'ai de nouveau regardé et j'ai toujours pas trouvé comme faire.
    Le résultat attendu est :

    Nom : Capture.PNG
Affichages : 640
Taille : 2,6 Ko

    Sauf que ça m'affiche l'ensemble des clichés présents, du coup je sais pas comment faire, si tu aurais une piste pour moi ça serait génial.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2012 R2] Clichés instantanés disparus
    Par zimeau dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 07/10/2016, 10h41
  2. [WS 2008 R2] Problème clichés instantanés VSS
    Par bubba2a dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 29/09/2011, 21h40
  3. [WS 2003] Cliché instantané (shadow copy)
    Par souf954 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 16/08/2011, 11h45
  4. [WS 2003] Problème cliché instantané
    Par med_med dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 28/03/2011, 09h16
  5. retablir une version des cliché instantané sur win 2k3
    Par passion_info dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 17/03/2009, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo