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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
| ##########################################################################
# OS - Installation SP1
#
# (c) @ 08/07/2014
#
# Version : 1.0
# 1.1 (Date) : ajout de fonctionnalités
# 1.2 (Date) : Corrections sur machin
##########################################################################
cls
# --------------------------------------------------------------------
# Initialisation des variables
# --------------------------------------------------------------------
# Chemin de l'exécution
$currentPath = $(Split-Path -parent $MyInvocation.MyCommand.Path)
# Nom de la machine hôte
$Computer = $Env:computername
# Serveurs
# --------------------------------------------------------------------
$Servers = @("SRV01")
# Parametre logs
# --------------------------------------------------------------------
# Get Date
$date = (get-date -uformat "%Y%m%d-%H%M%S")
# Dossier logs
$LogFolder = $currentPath + "\Logs"
# Chemin des logs
$LogFile = $currentPath + "\Logs\_" + $Computer+"_SCRIPT_$date.txt"
# Parametre Cred_File
# --------------------------------------------------------------------
# Compte utilise pour le script
$CredentialUsername = "*\*"
# Chemin du Cred_File
$Cred_File = $("$LogFolder\Cred.xml")
# Cle de cryptage
$Key = [byte]29,36,20,74,72,80,85,55,73,96,0,21,98,99,99,28
# --------------------------------------------------------------------
# Function LogFile
# --------------------------------------------------------------------
# Test du dossier de log
if (!(Test-Path -Path $LogFolder)){
Write-Host "Le dossier de log n'existe pas, création en cours...`n"
New-Item -Path $LogFolder -ItemType directory | Out-null
}
# Function log
function Write-Log {
param ($Message, $status)
$timestamp = get-date -uformat "%Y-%m-%d %T"
Write-Host "`n$timestamp " -NoNewline
# Defining log status
switch($status) {
"DISP" {
Write-Host $message -background white -foreground blue
Add-Content $LogFile -value "$Message"
}
"OK" {
Write-Host -ForegroundColor Green "[OK] " -NoNewline
Write-Host $Message -ForegroundColor Green
Add-Content $LogFile -value "$timestamp [OK] $Message"
}
"INFO" {
Write-Host -ForegroundColor cyan "[INFO] " -NoNewline
Write-Host $message -ForegroundColor cyan
Add-Content $LogFile -value "$timestamp [INFO] $Message"
}
"ERROR" {
Write-Host -background red "[ERROR] " -NoNewline
Write-Host $message -background red
Add-Content $LogFile -value "$timestamp [ERROR] $Message"
}
"WARNING" {
Write-Host -ForegroundColor yellow "[WARNING] " -NoNewline
Write-Host $message -ForegroundColor yellow
Add-Content $LogFile -value "$timestamp [WARNING] $Message"
}
default {
Write-Host -ForegroundColor Green " [$Status] " -NoNewline
Write-Host $message -ForegroundColor Green
}
}
}
# --------------------------------------------------------------------
# Function Credential
# --------------------------------------------------------------------
If (Test-Path $Cred_File) {
$tmp = Import-Clixml $Cred_File
$Credential = New-Object System.Management.Automation.PSCredential $tmp['UserName'],($tmp['Password'] | ConvertTo-SecureString -Key $Key)
} Else {
$Credential = Get-Credential $CredentialUsername
# Save the credentials for future use....
@{'UserName'=$Credential.UserName;'Password'=($Credential.Password | ConvertFrom-SecureString -Key $Key)} | Export-Clixml $Cred_File
}
# --------------------------------------------------------------------
# Debut du script
# --------------------------------------------------------------------
Write-Log "Lancement du script INSTALLATION SP1 pour le serveur $Servers" "DISP"
ForEach ($Server in $Servers){
# PSSession Server
if(!($Session = New-PSSession -ComputerName $Server -Authentication CredSSP -Credential $credential))
{
Write-Log "La connexion au serveur $server a échoué, fin du script" "ERROR"
Return
}
# Lancement de la commande
$Install_SP1 = Invoke-Command $Session -ScriptBlock {
param($variables)
# Serveur en cour
$Comp = $Env:computername
Write-host "Connexion au serveur $comp réussi"
# Test si SP1 installé
$VersionOS = get-wmiobject -class win32_operatingsystem
$ResultOS = $VersionOS.servicepackmajorversion
Write-host "ResultOS >> $ResultOS"
if ($ResultOS -eq 0) {
Write-host "Le SP1 n'est pas installé sur le $Comp"
#création de l'instance de l'objet WMI
$Disk = get-WmiObject Win32_LogicalDisk | where {$_.DeviceID -match "C:"}
$taille_totale = 0 # initialisation de la variable
# calcul de la taille en Giga octet
$taille = $Disk.freespace / (1024*1024*1024)
$taille = [math]::round($taille, 1) # Arrondi la taille à 1 décimale
$nom=$Disk.Name
write-host "Le disque $nom a $taille Go de disponible"
# Confirmation espace libre avant installation
if ($taille > 15) {
Write-host "L'espace disponible permet l'installation du SP1"
} Else {
Write-host "L'espace disponible ne permet pas l'installation du SP1"
}
if ($taille > 15) {
Copy-Item -Path "\\vincic-fr-dfs\Groups\HOLDING-DSI-APPLICATIONS\_APPLIS_LIVRAISONS\_AUTOMATISATION\2008R2_SP1\windows6.1-KB976932-X64.exe" -Destination "\\$comp\d$"
} Else {
Write-host "Impossible de copier le SP1"
}
} Else {
Write-host "Le SP1 est déjà installé sur le $Comp"
} |
Partager