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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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