Installation SP1 sur 2008 Server R2
Bonjour à tous,
Je tente de faire un script afin d'installer le SP1 sur plusieurs serveurs en 2008 R2. C'est la première fois que je fais un script sur Powershell, j'ai déjà adapté des scripts pour Office 365... mais là c'est un autre level ;)
Je me suis fait un "plan" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
1. Connexion serveur (via un fichier annexe incrémenté au fur et à mesure si possible)
2. Contrôle si SP1 déjà installé
a. Installé Étape 7
b. Pas Installé Étape suivante
3. Contrôle espace disque
a. Assez d’espace Étape suivante
b. Pas assez d’espace Étape 7
4. Récupération répertoire SP1 sur le réseau
a. Copie réussit Étape suivante
b. Copie en erreur à Étape 7
5. Installation SP1
a. Réussit Étape suivante
b. Erreur Étape 7
6. Envoie d'un mail "SP1 installé"
7. Envoie d'un mail "SP1 non installé erreur"
a. Récupérer l’erreur si possible dans l’event viewer
8. Reboot serveur
9. Envoie d'un mail "serveur « *** » redémarré" |
J'ai déjà une partie de mon code mais je bloque sur la copie du fichier... J'ai trouvé la commande Copy-Item. Mon fichier est sur le réseau, et je veux le transférer d'un lien réseau vers le serveur.
J'ai tenté sans succès :
Code:
1 2 3 4
| PS C:\Script\Install_SP1> Copy-Item "\\******-dfs\X\Y\Z\_AUTOMATISATION\2008R2_SP1\windows6.1-KB976932-X64.exe" -Destination "\\$comp\d$"
PS C:\Script\Install_SP1> Copy-Item "\\******-dfs\X\Y\Z\_AUTOMATISATION\2008R2_SP1" -Destination "\\$comp\d$"
PS C:\Script\Install_SP1> Copy-Item "\\******-dfs\X\Y\Z\_AUTOMATISATION\2008R2_SP1\" -Destination "\\$comp\d$"
PS C:\Script\Install_SP1> Copy-Item "\\******-dfs\X\Y\Z\_AUTOMATISATION\2008R2_SP1\*" -Destination "\\$comp\d$" |
Avec le résultat :
Code:
Copy-Item : Impossible de trouver le chemin d'accès «*\\*****\_AUTOMATISATION\2008R2_SP1\windows6.1-KB976932-X64.exe*», car il n'existe pas.
Je dois l'avoir fini pour vendredi... Et je sèche là. Il me reste pas mal de chose à faire ensuite, donc je suis loin d'avoir fini...
Mon code actuel (peu mieux faire probablement ;)) :
Code:
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"
} |
Merci de m'aider si possible.
Olivier