Bonjour,
Voici le script que je souhaiterai mettre en place pour l'approbation des mises à jour Microsoft.
# ~ | -------------------------------------------------------------------------- |
# ~ | WSUS_AutoApprove
# ~ |
# ~ | Date : 21/12/2015
# ~ |
# ~ | Description : Approuve automatiquement les mises à jour sur les groupes de
# ~ | test, puis sur l'ensemble du parc.
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | VARIABLES
# ~ | -------------------------------------------------------------------------- |
$install = [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Install;
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
$notapproved = [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::NotApproved;
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
# ~ | Date pour nommé le fichier de log
$date=(get-date).ToString('yyyy-mm-dd')
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | CONNEXION AU SERVEUR
# ~ | -------------------------------------------------------------------------- |
$server="localhost"
# ~ | Mettre sur " $True " pour se connecter en HTTP
$Secure=$False
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($server,$Secure,8530)
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | LISTE DES GROUPES D'ORDINATEUR
# ~ | -------------------------------------------------------------------------- |
# ~ | Les groupes de test
$PC_TST=$wsus.GetComputerTargetGroups() | WHERE {$_.Name -eq "Postes_test"}
$PC_TST2=$wsus.GetComputerTargetGroups() | WHERE {$_.Name -eq "Postes_test_Phase2"}
$SRV_TST=$wsus.GetComputerTargetGroups() | WHERE {$_.Name -eq "Serveurs_test"}
# ~ | Les groupes de production
$PROD=$wsus.GetComputerTargetGroups() | WHERE {($_.Name -eq "Postes") -or ($_.Name -eq "Postes_Critiques") -or ($_.Name -eq "Serveurs") -or ($_.Name -eq "Serveurs_Critiques")}
# ~ | Les groupes où les mises à jour ne sont pas approuvées (Group = Ordinateurs non attribués)
$NOPROD=$wsus.GetComputerTargetGroups() | WHERE {$_.Id -eq "b73ca6ed-5727-47f3-84de-015e03f6a88a"}
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | LISTE DE TOUTES LES MISES A JOUR
# ~ | -------------------------------------------------------------------------- |
$updates = $wsus.GetUpdates()
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | VALIDE LA LICENCE SI BESOIN
# ~ | -------------------------------------------------------------------------- |
#$license = $updates | Where {$_.RequiresLicenseAgreementAcceptance}
#if ($license) {
# $license | Select Title
# $license | ForEach {$_.AcceptLicenseAgreement()}
#}
# ~ | -------------------------------------------------------------------------- |
# ~ | -------------------------------------------------------------------------- |
# ~ | APPROBATION DES MISES A JOUR
# ~ | -------------------------------------------------------------------------- |
foreach($update in $updates){
if($update.State -ne "NotNeeded"){
# ~ | Si la mise à jour est approuvée dans "Postes_Test"
if ($update.GetUpdateApprovals($PC_TST).Count -ne 0) {
# ~ | Et que cette mise à jour n'est pas approuvée dans "Poste_Test_Phase2"
if ($update.GetUpdateApprovals($PC_TST2).Count -eq 0){ {
# ~ | Alors on l'approuve pour "Postes_Test_Phases2"
#$update.Approve('install',$PC_TST2)
$update.Title >> ('C:\temp\'+$date+'_WSUS Test2.txt')
}
}
}
}
}
# ~ | -------------------------------------------------------------------------- |
Je l'ai adapter à mon environnement. Le problème c'est qu'à chaque exécution il approuve a chaque fois toutes les mises à jour (soit en test, soit en test ou en prod) Le problème est que j'ai besoin d'un fichier de log, permettant de savoir les mise à jour
approuvée en TEST, TEST2 et en PROD.
Pour logger c'elle envoyé en TEST, j'y arrive avec un "$updatescope". Mais pas pour le TEST2 et la PROD.
Pour le TEST, je filtre comme ceci :
updateScope = new-object Microsoft.UpdateServices.Administration.UpdateScope;
$updatescope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved
$updatescope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
Mais pour le TEST2 et PROD je ne sais pas comment sortir seulement les mises à jour approuvées dernièrement et pas toutes les mise à jour présente sur TEST2 ou PROD.
Merci de votre aide.