PI Services

Le blog des collaborateurs de PI Services

HyperV 2012 R2 : Arrêter une VM bloquée.

Il arrive qu’une machine virtuelle en état instable ne puisse pas être éteinte, quel que soit la console ou la commande powershell utilisée.

Le redémarrage du service vmm de gestion des machines virtuelles ne change rien.

Arrêter l’hyperviseur et donc l’ensemble de ses VMs n’est souvent pas envisageable.

Il est toujours possible en dernier recours d’arrêter le processus vmwp.exe correspondant à la machine virtuelle bloquée.

Procédure :

1 - Repérer le GUID de la VM. Par exemple en retrouvant le nom du dossier et du fichier xml de paramétrage de la machine.

clip_image002

2 ) Lancer le gestionnaire des tâches, aller dans l’onglet “Détails” . Repérer dans la colonne le GUID de la VM ( colonne “Nom d’utilisateur” ), s’assurer que la ligne correspond bien au processus vmwp.exe et le terminer.

clip_image004

Powershell : Utiliser une variable locale dans une commande à distance

C’est devenu extrêmement simple avec la mise à disposition du scope Using, à disposition depuis Powershell 3.0.

Pour cela, il suffit de préfixer de $Using: la variable appelée dans le bloc d’exécution.

$Using: <NomDeLaVariable>

Exemple :

#Déclaration en local :

$Cred = Get-Credential

#Bloc d’exécution a distance

Invoke-Command $s {Remove-Item .\Test*.ps1 -Credential $Using:Cred}

Rapports SCOM – Ebook gratuit

Un nouvel ebook gratuit est disponible et concerne la création de rapports Reporting Services pour SCOM.

Au menu:

  1. Chapter 1 Operations Manager and the cloud

  2. Chapter 2 Operations Manager reporting basics

  3. Chapter 3 Working with reports

  4. Chapter 4 Overview of report authoring tools

  5. Chapter 5 Authoring reports in Report Builder

  6. Chapter 6 Authoring reports in SQL Server Data Tools

  7. Chapter 7 Building management packs for reporting

  8. Chapter 8 Authoring dashboards in Power View

  9. Chapter 9 Troubleshooting reporting in Operations Manager

 

http://www.microsoftvirtualacademy.com/ebooks#9780735695788

SCOM – VbScript de surveillance de modification régulière d’un dossier

 

Le script suivant surveille qu’un dossier donné en paramètre (chemin au format wmi) est bien modifié régulièrement (Laps de temps en minutes au delà duquel un état KO est généré si le dossier n'a pas été modifié).

Le script est directement utilisable dans un script monitor en passant en paramètre les paramètres strDirName et MinuteOffset.

Lien du script plus bas.

 

Option Explicit '####################################################### 'Script verifiant qu un dossier est bien modifié regulierement 'Le script affiche OK ou KO et repercute l état a SCOM 'ARGUMENTS: 'strDirName(Nom complet du repertoire au format wmi => Ex: D:\\Test\\MyDirectory 'MinuteOffSet(Laps de temps en minutes pendant lequel le dossier n est pas modifié) '####################################################### Dim oArgs Set oArgs = Wscript.Arguments Dim strDirName Dim strComputer Dim objSWbemServices Dim colDirectories Dim objDirectory Dim MinuteOffSet Dim dateNow Dim dateNowMinus Dim oAPI Dim oBag Dim strStatus 'CREATION OBJET SCOM Set oAPI = CreateObject("MOM.ScriptAPI") if oArgs.Count <2 Then 'If the script is called without the required argument, 'create an information event and then quit. wscript.echo "Le script a ete appele sans le nombre minimum d'argument (2)" Call oAPI.LogScriptEvent(WScript.ScriptName,851,0,WScript.ScriptName+" Le script a été appelé sans le nombre minimum d'argument (2)") Wscript.Quit -1 Else 'Log evenement: lancement du script OK Call oAPI.LogScriptEvent(WScript.ScriptName,852,0,WScript.ScriptName+" script was launched successfully") End If '###FONCTION DE FORMATAGE DE DATE########################### function formatDate(format, intTimeStamp) dim unUDate, A ' Test to see if intTimeStamp looks valid. If not, they have passed a normal date if not (isnumeric(intTimeStamp)) then if isdate(intTimeStamp) then intTimeStamp = DateDiff("S", "01/01/1970 00:00:00", intTimeStamp) else response.write "Date Invalid" exit function end if end if if (intTimeStamp=0) then unUDate = now() else unUDate = DateAdd("s", intTimeStamp, "01/01/1970 00:00:00") end if unUDate = trim(unUDate) dim startM : startM = InStr(1, unUDate, "/", vbTextCompare) + 1 dim startY : startY = InStr(startM, unUDate, "/", vbTextCompare) + 1 dim startHour : startHour = InStr(startY, unUDate, " ", vbTextCompare) + 1 dim startMin : startMin = InStr(startHour, unUDate, ":", vbTextCompare) + 1 dim dateDay : dateDay = mid(unUDate, 1, 2) dim dateMonth : dateMonth = mid(unUDate, startM, 2) dim dateYear : dateYear = mid(unUDate, startY, 4) dim dateHour : dateHour = mid(unUDate, startHour, 2) dim dateMinute : dateMinute = mid(unUDate, startMin, 2) dim dateSecond : dateSecond = mid(unUDate, InStr(startMin, unUDate, ":", vbTextCompare) + 1, 2) format = replace(format, "%Y", right(dateYear, 4)) format = replace(format, "%y", right(dateYear, 2)) format = replace(format, "%m", dateMonth) format = replace(format, "%n", cint(dateMonth)) format = replace(format, "%F", monthname(cint(dateMonth))) format = replace(format, "%M", left(monthname(cint(dateMonth)), 3)) format = replace(format, "%d", dateDay) format = replace(format, "%j", cint(dateDay)) format = replace(format, "%h", mid(unUDate, startHour, 2)) format = replace(format, "%g", cint(mid(unUDate, startHour, 2))) if (cint(dateHour) > 12) then A = "PM" else A = "AM" end if format = replace(format, "%A", A) format = replace(format, "%a", lcase(A)) if (A = "PM") then format = replace(format, "%H", left("0" & dateHour - 12, 2)) format = replace(format, "%H", dateHour) if (A = "PM") then format = replace(format, "%G", left("0" & cint(dateHour) - 12, 2)) format = replace(format, "%G", cint(dateHour)) format = replace(format, "%i", dateMinute) format = replace(format, "%I", cint(dateMinute)) format = replace(format, "%s", dateSecond) format = replace(format, "%S", cint(dateSecond)) format = replace(format, "%L", WeekDay(unUDate)) format = replace(format, "%D", left(WeekDayName(WeekDay(unUDate)), 3)) format = replace(format, "%l", WeekDayName(WeekDay(unUDate))) format = replace(format, "%U", intTimeStamp) format = replace(format, "11%O", "11th") format = replace(format, "1%O", "1st") format = replace(format, "12%O", "12th") format = replace(format, "2%O", "2nd") format = replace(format, "13%O", "13th") format = replace(format, "3%O", "3rd") format = replace(format, "%O", "th") formatDate = format end function '##################################################################### '###FONCTION DE CONVERSION DE DATE WMI EN DATE STANDARD (UTC)######### Function WMIDateStringToDate(dtmInstallDate) WMIDateStringToDate = CDate(Mid(dtmInstallDate, 5, 2) & "/" & _ Mid(dtmInstallDate, 7, 2) & "/" & Left(dtmInstallDate, 4) _ & " " & Mid (dtmInstallDate, 9, 2) & ":" & _ Mid(dtmInstallDate, 11, 2) & ":" & Mid(dtmInstallDate, _ 13, 2)) End Function '##################################################################### 'NOM DU DOSSIER AU FORMAT WMI strDirName=oArgs(0) 'NOMBRE DE MINUTES MinuteOffSet=oArgs(1) dateNowMinus=DateAdd("n",-MinuteOffSet,formatDate("%n/%d/%Y %h:%i:%s", Now())) wscript.Echo "FORMAT DE DATE US (MM/dd/YYYY) => SI BESOIN MODIFIER LE FORMATAGE EFFECTUEE PAR LA FONCTION formatDate SUR LA VARIABLE Now" wscript.Echo "" & vbCrLf wscript.Echo "H:" wscript.Echo formatDate("%n/%d/%Y %h:%i:%s", Now()) wscript.Echo "" & vbCrLf wscript.Echo "H-"&MinuteOffSet&"minutes:" wscript.Echo dateNowMinus wscript.Echo "" & vbCrLf strComputer = "." Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colDirectories = objSWbemServices.ExecQuery("select * from win32_directory where name='" & strDirName & "'") For each objDirectory in colDirectories Wscript.Echo objDirectory.Name Wscript.Echo "LastModified: "& WMIDateStringToDate(objDirectory.LastModified) &"" If WMIDateStringToDate(objDirectory.LastModified) > dateNowMinus Then Wscript.Echo "Dossier modifié plus recemment que "& dateNowMinus &" => OK" strStatus="OK" Else Wscript.Echo "Dossier non modifié depuis plus de "& MinuteOffSet &" minutes => KO" strStatus="KO" End If Next Set oBag = oAPI.CreatePropertyBag() If strStatus = "OK" then Call oBag.AddValue("Status","Success") wscript.echo "Healthy" Call oAPI.Return(oBag) Else strStatus = "KO" Call oBag.AddValue("Status","Critical") wscript.echo "Critical" Call oAPI.Return(oBag) End if

 

Windows Azure Pack – VM Template non visible

Lorsque vous configurez votre plan dans WAP, vous n’arrivez pas à récupérer vos VM templates publiés dans VMM.

 

Dans notre exemple nous avons dans VMM 2 templates

    • 2012
    • 2012 R2

image

Dans la configuration de notre plan, nous voulons affecter le Template 2012 R2. Mais celui ci n’est pas visible.

image

 

image

 

Pour que WAP puisse publier des VM Templates dans un plan, il faut affecter un Operating System dans l’onglet OS Configuration ==> Operating System des propriétés des VM Templates.

 

Les propriétés actuelle de notre VM Template 2012 R2 sont tel quel :

image

On peut voir que l’onglet OS Configuration n’est pas présent.

Lors de la création de votre VM Template, dans l’onglet Configure Operating Systems, il ne faut pas sélectionner l’option None qui ne permettra pas de classifier notre Template et ne sera donc pas affiché dans le plan configuré dans WAP.

Sélectionner donc Create new  [Windows ou Linux dépendant de votre OS]

image

Sélectionner la version de votre OS

image

Maintenant que votre Template a été classifié, si vous retournez dans la configuration de votre plan dans WAP.

image

 

Votre Template est maintenant disponible. 

System Center Orchestrator 2012 R2 : Accéder à la console web via une VIP

Introduction

Dans le cadre d'une infrastructure Orchestrator 2012 R2 en haute disponibilité, il est nécessaire de créer une ou plusieurs VIP pour les services web de ce produit. Pour rappel, ils sont au nombre de deux :

  • Le web service, accessible via le port 81 avec une url du type : http://nom_du_server:81/Orchestrator2012/Orchestrator.svc 
  • La console web (en silverlight), accessible via le port 82 avec une url du type : http://nom_du_serveur:82/

Le sujet de la haute disponibilité n'est détaillé que pour le rôle runbook server d'Orchestrator. Concernant les services Web, il n'y a aucune documentation proposée par Microsoft à l'heure actuelle (20/11/2014).

Dans cet article, je ne détaillerai pas la création de la VIP qui n'a rien de particulier. Il s'agit plutôt de voir la configuration à réaliser sur les serveurs Orchestrator portant les services web.

Au niveau des pré requis, il est donc nécessaire d'avoir au moins deux serveurs Orchestrator répondant aux services web cités précédemment.

Erreur rencontrée

Après avoir configurée une VIP, lorsque l'on essaie d'accéder au web service, cela ne pose aucun problème. Cependant ce n'est pas le cas de la console web.

En effet, la page web n'affichera que le squelette de la page web et tentera de vous afficher du contenu pendant un certain temps avant que vous n'obteniez le message d'erreur suivant :
Popup Arg SecurityException
Cette première erreur, [Arg_SecurityException], ne nous donne pas d'information concrète et il n'y a rien dans les logs IIS. Après avoir validé ce message, vous obtiendrez une seconde popup :
Popup web services error
Ce message est plus concret puisqu'il nous informe qu'il y a une erreur avec le web service (service arrêté, URL du service non valide ou accès refusé). Cela nous confirme que l'IHM est basée sur le web service. Elle l'utilise afin de récupérer les données de l'infrastructure Orchestrator.
 

Configuration

Afin de rendre opérationnelle notre VIP pour la console web Orchestrator, il faut réaliser une série d’opération sur IIS qu’il conviendra d’exécuter une ou plusieurs fois. En voici une liste récapitulative :

  • Configuration du pool d’application : A réaliser sur les deux sites web (console web et web services) sur tous les serveurs (nœuds) les proposant (via IIS Manager).
  • Ajout de SPN sur le compte de service Orchestrator : A réaliser une fois (via une invite de commande).
  • Configuration des sites web pour l’utilisation des informations d’authentification du compte de service du pool d’application : A réaliser sur les deux sites web (console web et web services) sur tous les serveurs (nœuds) les proposant (via IIS Manager).
  • Implémentation de l’url utilisée par la console web pour accéder aux web services : A réaliser sur le site console web Orchestrator sur tous les serveurs (nœuds) le proposant (via IIS Manager).
  • Redémarrage des sites web Orchestrator : A réaliser sur les deux sites web (console web et web services) sur tous les serveurs (nœuds) les proposant (via IIS Manager).

Configuration du pool d’application :

Tout d’abord, il faut se rendre dans la console IIS Manager. Par défaut, Orchestrator utilise le pool d’application par défaut alors qu’il en crée un nommé System Center 2012 Orchestrator Web Features qui est défini avec le compte de service Orchestrator. Les deux sites web doivent donc être configurés pour utiliser ce pool d’application. Pour ce faire, on sélectionne le site web Microsoft System center 2012 Orchestrator Web Service, on clique sur Advanced Settings puis on parcours la liste des pools d’application disponibles,

updateapppool

Il suffit ensuite de sélectionner le pool System Center 2012 Orchestrator Web Features et de valider.

chooseapppool

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des nœuds Orchestrator portant ces sites.

Ajout des SPNs nécessaires :

La seconde étape est l’ajout des SPN liés aux URLs utilisés pour accéder à la console web et aux web services Orchestrator au compte de service Orchestrator. Voici la liste des commandes à lancer pour ajouter les SPNs nécessaires (à noter vipihm et vipwebsvc peuvent être identiques si vous n’utilisez qu’une seule VIP pour la console web et pour les web services) :

SetSPN.exe –A HTTP/sco1 DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco1.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco2 DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco2.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipihm.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipwebsvc.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipihm DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipwebsvc DOMAIN\SERVICE_ACCOUNT

Attention : N’oublier de remplacer sco1, sco2, vipihm et vipwebsvc par les valeurs de vos noeuds Orchestrator et de vos VIPs. DOMAIN\SERVICE_ACCOUNT doit être remplacé par votre compte de service.

NB : Cette opération n’est à réaliser qu’une seule fois.

Utilisation des informations d’authentification du compte de service du pool d’application :

Nous devons ensuite définir l’utilisation des informations d’authentification du compte de service du pool d’application sur les différents sites web. On sélectionne l’un des sites web Orchestrator dans IIS Manager puis on choisit Configuration Editor :configurationeditor Il faut parcourir l’arborescence jusqu’au niveau : system.webServer, security, authentication, windowsAuthentication.

updatewindowsauthent Enfin, la propriété useAppPoolCredentials doit être défini à la valeur True.

useapppoolcred

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des noeuds Orchestrator portant ces sites.

Définir l’url utilisée par la console web pour accéder aux web services :

La dernière étape consiste à définir l’url utilisée par la console Orchestrator pour accéder aux web services. Dans IIS Manager, il faut sélectionner le site web Microsoft System center 2012 Orchestrator Orchestration console et cliquer sur Application Settings.

applicationsettingsLa valeur de l’attribut ScoServiceUri doit être changée avec la valeur de la vip : http://nom_vip:81/Orchestrator2012/Orchestrator.svc

scoserviceuri
Attention, si comme moi, vous décider d'effectuer un transfert de port (81 vers 80), alors il faudra supprimer ce dernier de l'URL : http://nom_vip/Orchestrator2012/Orchestrator.svc"

NB : L’opération ci-dessus est à réaliser pour le site Microsoft System center 2012 Orchestrator Orchestration console sur la totalité des nœuds Orchestrator portant ces sites.

Redémarrage des sites web :

Il ne vous reste plus qu'à redémarrer les site web sur tout les nœuds Orchestrator via l'interface de IIS :
 restart

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des nœuds Orchestrator portant ces sites.

Une fois l'opération effectuée, la VIP est opérationnelle.

A titre informatif, l'environnement sur lequel la configuration a été testée était composé d'un HLB F5 possédant une VIP avec transfert de port 81 vers 80 pour le web services et une autre VIP pour la console Silverlight (port 82 vers 80). Cependant, cette configuration est valable quelque soit l'environnement.

Powershell / Active directory: Traduire le SID <=>l’utilisateur

 

CADRE:

Cet article vise un public débutant en powershell ne connaissant pas bien l’utilisation des classes objets avec powershell.

INTRODUCTION:

Dans cet article nous allons expliquer comment Traduire le SID lié à un utilisateur active directory ou local ou encore l’inverse.

Il faut savoir que Powershell est fondé sur la programmation objet.

Nous avons besoin d’installer aussi Net Framework 4.5, pour avoir les classes d’objets suivant sous powershell: 

1- System.Security.Principal.SecurityIdentifier (SID)

2- System.Security.Principal.NTAccount (compte NT)

SCRIPT:

Traduire le l’utilisateur en SID:

1-  Création de l’objet de la classe System.Security.Principal.NTAccount qui permet de représenter un utilisateur ou un groupe dans une variable $objUser .

$objUser = New-Object System.Security.Principal.NTAccount("administrator")

2-  Traduction de l’objet de la classe System.Security.Principal.NTAccount qui représente un utilisateur ou un groupe en classe System.Security.Principal.SecurityIdentifier qui représente le SID à savoir que .translate() après le $objUser est la méthode qui permet la traduction mais c’est la classe de l’objet contenue dans () sur lequel s’appuie la traduction (en quoi on veut le traduire) sans cela aucune traduction n’est possible .

$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])

2-  Traduction de l’objet étant effectué et mise dans une variable $strSID nous avons plus qu’à regarder la valeur de la variable en tapant .value après $strSID

$strSID .Value

affiche: S-1-5-21-29

Traduire le SID en Nom d’utilisateur:

Nous avons vu comment traduire l’utilisateur en SID l’inverse est tout simplement d’inverser les classes d’objets avec les noms des variables correspondant.

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-546")

$objUser = $objSID.Translate([System.Security.Principal.NTAccount])

$objUser.Value

affiche: BUILTIN\Invités

Powershell / Active Directory : Intégration de la photo des utilisateurs

Introduction

Cet article a pour but d'expliquer la gestion des photos dans l'annuaire Active Directory via une intégration par un script Powershell. En effet, le référentiel photo d'une entreprise ne respecte pas forcément les préconisations Microsoft. Grâce à un script, nous allons voir comment les respecter et peupler un annuaire Active Directory. La solution proposée permettra d'automatiser le processus en s'affranchissant d'outils tiers qui peuvent réaliser cette opération.

Solution

L'attribut AD permettant de renseigner la photo est thumbnailPhoto. Il y a plusieurs restrictions sur une image de profil :

  • la résolution est limitée à 96x96 pixels
  • la taille ne doit pas éxéder 100Kb

La valeur stockée dans l'attribut thumbnailPhoto est un tableau de bytes.

La solution proposée utilise des classes .Net issue de System.Drawing. Ainsi, on va pouvoir redéfinir la taille d'une image, la centrer et éventuellement définir la qualité si la photo est trop lourde. Afin d'être le plus portable possible, le script interroge Active Directory via ADSI pour réaliser la modification de l'attribut thumbnailPhoto.

NB : Depuis la V15 des produits d'infrastructure Microsoft et grâce au couple Exchange 2013/Lync 2013, il est possible de stocker des photos d'une résolution de 648*648 pixels directement dans la boîte aux lettres de l'utilisateur. Cette dernière est accédée directement via les Exchange Web Services par Lync. Une copie d'une résolution de 48x48 est toujours stockée dans l'attribut thumbnailPhoto.

Script

Le script permet de rendre conforme la photo d'un utilisateur et de la placer sur l'objet Active Directory dans l'attribut thumbnailPhoto. Pour chaque utilisateur, il est nécessaire de renseigner les paramètres suivants :

  • le samaccountname de l'utilisateur
  • le dossier contenant la photo
  • le nom du fichier photo
  • l'extension du fichier photo
Le script possède deux fonctions. Set-ADUserPhoto, requête l'annuaire Active Directory pour obtenir l'utilisateur via son SamAccountName. L'attribut thumbnailPhoto est ensuite mis à jour avec la valeur qui est retournée par la fonction Resize-Photo. Cette dernière retourne l'image sous la forme d'un tableau de bytes. Elle insère l'image d'origine dans une nouvelle image Bitmap possédant les limites de dimensions spécifiées (dans notre cas 96x96 pixels). Tout surplus sur les côtés est donc supprimé. L'image d'origine est positionnée de façon à se situer au centre. Enfin cette image est enregistrée en mémoire. Sa taille est évaluée. Si sa taille est supérieure au poids maximal choisi (ici 100Kb) alors on génère une nouvelle image en faisant varier la qualité (il s'agit d'un pourcentage que l'on décrémente de 5% à chaque essai).

Pour vérifier que l'opération s'est correctement exécutée, il suffit de vérifier dans la console Active Directory Users and Computers que l'utilisateur possède bien une valeur pour l'attribut thumbnailPhoto (via l'éditeur d'attribut). La photo peut ensuite être consultée via Outlook (pour les messageries Exchange) ou le client Lync. thumbnailPhoto

Ce script s'exécute utilisateur par utilisateur. Il est possible d'imaginer une logique de traitement "en masse".

Voici un script pour remplacer la région Main du script traitant l'intégralité des comptes utilisateurs Active Directory.
On suppose que toutes les photos sont stockées dans le même répertoire et portent comme nom de fichier le samaccountname de l'utilisateur. Bien entendu, cette partie reste adaptable en fonction des besoins. Il est par exemple possible de changer la racine de la recherche pour ne cibler qu'une unité d'organisation. Pour se faire, il faut remplacer $Root = [ADSI]'' par le distinguished name de l'unité d'organisation ciblée. Exemple :
A titre informatif, la fonction Resize-Photo peut être totalement décorrelée du processus de mis à jour de l'objet AD et être utilisée pour d'autre situation. Il est en effet possible de sauvegarder l'image générée dans un fichier plutôt qu'en mémoire en changeant un paramètre de la méthode Save :
Il faut remplacer la variable $Ms (représentant le buffer mémoire que l'on a instantié) par un chemin de fichier.

Hyper-V – Erreur “Logon failure : the user has not been granted the requested logon type at this computer” sous Windows Server 2012 R2

Contexte

Dans Hyper-V sous Windows Server 2012 R2 vous obtenez l’erreur “Logon failure : the user has not been granted the requested logon type at this computer” lorsque vous tentez d’éteindre ou allumer une VM.

2014-07-17_180510

Problématique

Cette erreur intervient même lorsque l’utilisateur fait partie du groupe “Hyper-V Administrators”.

L’erreur dans le journal d’évènements Windows (Applications and Services Logs / Microsoft / Windows / Hyper-V-VMMS / Admin) est la suivante :

Error 15500 : “VM” failed to start worker process: Logon failure:the user has not been granted the requested logon type at this computer. (0x80070569). (Virtual machine ID <GUID>)

2014-07-29_180732

Cette erreur est due à une GPO qui ôte un droit au compte d’Hyper-V.

Solution

Pour résoudre ce problème, il faut donc identifier et modifier la GPO qui change les droits en lui ajoutant NT Virtual Machine\Virtual Machines au droit Log on as a service ou exclure le serveur Hyper-V de la GPO.

Il existe également une solution à court terme qui permet de contourner le problème. Pour cela il faut redémarrer le service Hyper-V Virtual Machine Management depuis la console Services. Le redémarrage de ce service n’a pas d’impact sur les machines virtuelles (qu’elles soient allumées ou éteintes).

2014-07-17_180610

KEMP – Option GEO et Custom Location

Contexte

Ce billet fait suite à mon premier post sur l’option GEO des boitiers KEMP. Dans le billet précèdent j’expliquai comment faire pour contourner l’impossibilité de mettre des emplacements personnalisées sur les boitiers KEMP.

Hors depuis la version 7-1-20a, l’option GEO possède une nouvelle fonctionnalité : le Custom Location !

Mise en place

Avant la mise en place des custom location, il est intéressant de mettre à jour la base de données des localisations. Pour se faire connectez-vous au site https://support.kemptechnologies.com puis dans la partie Downloads et Other Downloads téléchargez la dernière version.

Connectez-vous à l’interface web du KEMP puis dans la partie Global Balancing, cliquez sur Miscellaneous Params. Dans Location Data Update cliquez sur Parcourir… sélectionnez le fichier d’update et cliquez sur Install Update.

2014-10-15_160414

2014-10-15_160452

Un message vous avertit une fois la mise à jour terminée.

2014-10-15_160506

Pour créer une Custom Location vous devez dans un premier temps indiquez une IP (ou un range d’IP). Pour cela dans la partie Global Balancing, allez dans IP Range Selection Criteria et ajoutez une IP en cliquant sur Add IP.

2014-10-15_160705

Indiquez l’IP (suivi du /32) ou un range d’IP (suivi de son masque sous la forme /XX) et cliquez sur Add Address.

2014-10-15_160738

Un message apparait pour valider l’ajout.

2014-10-15_160751

Cliquez ensuite sur Modify puis cochez la case Add Custom Location.

2014-10-15_1608132014-10-15_160832

Indiquez un nom à la localisation puis sélectionnez-la dans la liste déroulante.

2014-10-15_1608542014-10-15_161013

Cliquez sur <- Back pour valider et revenir à la page précédente.

2014-10-15_161042

Ce range d’IP appartient désormais à la localisation Siege – Noisy.

2014-10-15_161053

Il est désormais possible d’affecter cette localisation à une IP dans la partie Manage FQDNs.

2014-10-15_171016