backuppersonnalfolder

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
backuppersonnalfolder [2019/11/28 15:21] – [Script principal] nekanbackuppersonnalfolder [2021/03/05 16:12] (Version actuelle) nekan
Ligne 1: Ligne 1:
-~~CLOSETOC~~ 
 ====== Backup-PersonnalFolder - Sauvegarde de dossiers utilisateurs ====== ====== Backup-PersonnalFolder - Sauvegarde de dossiers utilisateurs ======
 +<label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/11/28 14:13//
  
 Il y a des utilisateurs qui prennent l'habitude de garder des documents sur leur poste au lieu de les déposer dans un partage du serveur de fichiers. Cette manière de fonctionner est à proscrire car la sécurité des documents n'est pas garantie. Les administrateurs en charge de l'infrastructure n'ont aucune vision sur leur intégrité ni leur sauvegarde. Les habitudes ayant la vie dure, on est souvent amené à s'adapter à ce genre de comportement. Il y a des utilisateurs qui prennent l'habitude de garder des documents sur leur poste au lieu de les déposer dans un partage du serveur de fichiers. Cette manière de fonctionner est à proscrire car la sécurité des documents n'est pas garantie. Les administrateurs en charge de l'infrastructure n'ont aucune vision sur leur intégrité ni leur sauvegarde. Les habitudes ayant la vie dure, on est souvent amené à s'adapter à ce genre de comportement.
Ligne 25: Ligne 25:
 ===== Script principal ===== ===== Script principal =====
  
-<code powershell>+<sxh powershell>
 <# <#
 .SYNOPSIS .SYNOPSIS
Ligne 130: Ligne 130:
  
 Param ( Param (
- [String[]]$ComputerName = 'All',+ [String[]]$ComputerName = "All",
  [Switch]$Verbose,  [Switch]$Verbose,
  [Switch]$Nagios  [Switch]$Nagios
Ligne 151: Ligne 151:
 $BackupLog = "$BackupRootFolder\$BackupLogFile" $BackupLog = "$BackupRootFolder\$BackupLogFile"
 # Initialisation du chemin de profil utilisateur # Initialisation du chemin de profil utilisateur
-$UserProfilePath = ""+$UserProfilePath = ''
 # Chemin pour la racine des destinations de sauvegardes # Chemin pour la racine des destinations de sauvegardes
 $Partage = "\\LBG-SMB-1\Partage_utilisateur" $Partage = "\\LBG-SMB-1\Partage_utilisateur"
Ligne 263: Ligne 263:
  {  {
  # Sinon, on traite le message  # Sinon, on traite le message
- $CheckTime = Get-Date -Format 'G'+ $CheckTime = Get-Date -Format G
  If ($Verbose)  If ($Verbose)
  {  {
Ligne 313: Ligne 313:
  # Sinon, on récupère le login de l'utilisateur  # Sinon, on récupère le login de l'utilisateur
                 $Pattern = $Domaine + '\'                 $Pattern = $Domaine + '\'
- $Name = $Name.Replace("$Pattern", "")+ $Name = $Name.Replace("$Pattern", '')
  Add-Log -Type "INFO" -Message "Utilisateur $Name."  Add-Log -Type "INFO" -Message "Utilisateur $Name."
  }  }
Ligne 375: Ligne 375:
  # Récupération du chemin du profil utilisateur et formatage du chemin pour accès réseau  # Récupération du chemin du profil utilisateur et formatage du chemin pour accès réseau
  $UserProfilePath = Get-UserLocalPath -PC $PC -User $User  $UserProfilePath = Get-UserLocalPath -PC $PC -User $User
- $UserProfilePath = $UserProfilePath.Replace(':'':\ShadowCopy')+ $UserProfilePath = $UserProfilePath.Replace(":"":\ShadowCopy")
   
  # Définitions des dossiers pour la copie  # Définitions des dossiers pour la copie
Ligne 428: Ligne 428:
  $ID = Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $ShadowCopy.ShadowID }  $ID = Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $ShadowCopy.ShadowID }
  # Formatage du chemin du ShadowCopy  # Formatage du chemin du ShadowCopy
- $CorrectPath = $ID.DeviceObject + '\'+ $CorrectPath = $ID.DeviceObject + "\
 + # Création du type d'objet [Custom.SymLink] pour le lien symbolique 
 + Try 
 +
 +     $Null = [Win32.SymLink] 
 +
 + Catch 
 +
 +     Add-Type @" 
 +         using System; 
 +         using System.Runtime.InteropServices; 
 +   
 +         namespace Win32 
 +         { 
 +             public class SymLink 
 +             { 
 +                 [DllImport("kernel32.dll")] 
 +                 public static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags); 
 +             } 
 +         } 
 +"@ 
 +
 +                
  # Création du lien symbolique  # Création du lien symbolique
- cmd /c mklink /d C:\ShadowCopy $CorrectPath | Out-Null + [Win32.SymLink]::CreateSymbolicLink("C:\ShadowCopy", $CorrectPath, 1) 
- +
  # Identifiants pour l'élévation de droits  # Identifiants pour l'élévation de droits
  $Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Pass  $Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Pass
Ligne 455: Ligne 477:
  $FileToBackup | ForEach-Object {  $FileToBackup | ForEach-Object {
  $FileFullName = $_.FullName  $FileFullName = $_.FullName
- $PrintName = $FileFullName.Replace('ShadowCopy\', "")+ $PrintName = $FileFullName.Replace("ShadowCopy\", '')
  $TestFile = ($_.FullName).Replace($ScriptSource, "${Drive}:")  $TestFile = ($_.FullName).Replace($ScriptSource, "${Drive}:")
  $TestFileType = (Get-Item -Path $TestFile).GetType().Name  $TestFileType = (Get-Item -Path $TestFile).GetType().Name
- If ((Test-Path $TestFile) -and ($TestFileType -ne 'DirectoryInfo'))+ If ((Test-Path $TestFile) -and ($TestFileType -ne "DirectoryInfo"))
  {  {
  $SourceFileDate = Get-Date -Date (Get-ItemProperty -Path $FileFullName).LastWriteTime  $SourceFileDate = Get-Date -Date (Get-ItemProperty -Path $FileFullName).LastWriteTime
Ligne 468: Ligne 490:
  {  {
  Copy-Item -Path $FileFullName -Destination $TestFile  Copy-Item -Path $FileFullName -Destination $TestFile
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $UpdateMessage $PrintName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $UpdateMessage $PrintName"
  }  }
  Catch  Catch
  {  {
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $UpdateErrorMessage $PrintName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $UpdateErrorMessage $PrintName"
  }  }
Ligne 481: Ligne 503:
  {  {
  $RecentFile = $TestFile.Replace("${Drive}:", $ScriptDestination)  $RecentFile = $TestFile.Replace("${Drive}:", $ScriptDestination)
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $FileIOnBackupMoreRecent $RecentFile"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $FileIOnBackupMoreRecent $RecentFile"
  }  }
Ligne 487: Ligne 509:
  If ($SourceFileDate -eq $DestinationFileDate)  If ($SourceFileDate -eq $DestinationFileDate)
  {  {
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [INFO]    $SameFile $PrintName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [INFO]    $SameFile $PrintName"
  }  }
Ligne 502: Ligne 524:
  {  {
  Remove-Item -Path $FileFullName -Force -Recurse 2> $Null  Remove-Item -Path $FileFullName -Force -Recurse 2> $Null
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $DeleteMessage $FileFullName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $DeleteMessage $FileFullName"
  }  }
  Catch  Catch
  {  {
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [WARN]    $DeleteErrorMessage $FileFullName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [WARN]    $DeleteErrorMessage $FileFullName"
  }  }
Ligne 517: Ligne 539:
  $FileFullName = $_.FullName  $FileFullName = $_.FullName
  $TestFile = ($_.FullName).Replace($ScriptSource, "${Drive}:")  $TestFile = ($_.FullName).Replace($ScriptSource, "${Drive}:")
- $PrintName = $FileFullName.Replace('ShadowCopy\', "")+ $PrintName = $FileFullName.Replace("ShadowCopy\", '')
  If (-not (Test-Path $TestFile))  If (-not (Test-Path $TestFile))
  {  {
Ligne 523: Ligne 545:
  {  {
  Copy-Item -Path $FileFullName -Destination $TestFile  Copy-Item -Path $FileFullName -Destination $TestFile
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $NewFileMessage $PrintName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [GOOD]    $NewFileMessage $PrintName"
  }  }
  Catch  Catch
  {  {
- $CheckDate = Get-Date -Format 'G'+ $CheckDate = Get-Date -Format G
  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $NewFileErrorMessage $PrintName"  Add-Content -Path "${Drive}:\$LocalBackupLogFile" -Value "$CheckDate    [CRIT]    $NewFileErrorMessage $PrintName"
  }  }
Ligne 538: Ligne 560:
   
  # Suppression du lien de shadowcopy  # Suppression du lien de shadowcopy
- cmd /c rmdir C:\ShadowCopy+ (Get-Item -Path C:\ShadowCopy).Delete() 
  }  }
   
Ligne 705: Ligne 727:
  Add-Log -Type "INFO" -Message $CreatingNagiosReport  Add-Log -Type "INFO" -Message $CreatingNagiosReport
 } }
-</code>+</sxh>
  
 ===== Script d'interprétation pour Nagios ===== ===== Script d'interprétation pour Nagios =====
  
-<code:ps1>+<sxh powershell>
 ####################################################################################### #######################################################################################
 #                                                                                     # #                                                                                     #
Ligne 726: Ligne 748:
 [int]$Critical = $Report.Critical [int]$Critical = $Report.Critical
  
-$Output = ""+$Output = ''
 $ExitCode = 3 $ExitCode = 3
  
Ligne 746: Ligne 768:
 Else Else
     {     {
-        echo "Unknown - Error in SaveReport.dat, please check"+        Write-Host "Unknown - Error in SaveReport.dat, please check"
         exit $ExitCode         exit $ExitCode
     }     }
  
-echo "$Output - Total : $Total, Saved : $Saved, Offline : $Offline, Warning : $Warning, Error : $Critical"+Write-Host "$Output - Total : $Total, Saved : $Saved, Offline : $Offline, Warning : $Warning, Error : $Critical"
 exit $ExitCode exit $ExitCode
  
-</code> +</sxh>
- +
- --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2019/11/28 14:13//+
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • backuppersonnalfolder.1574950909.txt.gz
  • Dernière modification : 2019/11/28 13:21
  • (modification externe)