Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Powershell/Azure : utiliser un proxy dans un script

 

Certains scripts powershell peuvent nécessiter un accès au Web, comme par exemple ceux utilisés pour piloter un tenant Azure.

Or, la majorité des organisations utilisent aujourd’hui des proxy pour contrôler ces accès à Internet et il est préférable d’éviter autant que possible les exceptions à cette règle, y compris lorsque c’est un script qui a besoin de se connecter.

Certains cmdlet ont en plus une facheuse tendance à ignorer les paramètres de proxy de l’utilisateur qui les exécute (c’est le cas des cmdlet Azure Powershell tels que Login-AzureRmAccount), et il n’est pas toujours possible ou souhaitable de définir un proxy au niveau du système, via la commande netsh winhttp set proxy…

Heureusement, il est possible de spécifier ces paramètres directement au sein du script !

Dans un premier temps, il est nécessaire de spécifier l’adresse du Proxy :

$proxyAddress = « http://1.2.3.4:8080 »

$proxyUri = new-object System.Uri($proxyAddress)

[System.Net.WebRequest]::DefaultWebProxy = new-object System.Net.WebProxy ($proxyUri, $true)

Si le proxy accepte les connexions anonymes, cela peut suffire.

Autrement, il sera nécessaire de spécifier des credentials autorisés à s’y connecter. Dans ce cas, deux possibilité :

– Soit vous ré-utilisez les credentials de l’utilisateur qui exécute le script :

[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

– Soit vous utilisez les credentials d’un autre compte  :

$proxyAccountName = « domain\user »

$proxyPassword = ConvertTo-SecureString « PASSWORD » -AsPlainText -Force

$proxyCred = New-Object System.Management.Automation.PSCredential($proxyAccountName, $proxyPassword)

[System.Net.WebRequest]::DefaultWebProxy.Credentials = $proxycred

En plaçant ces quelques lignes avant toute exécution de cmdlet nécessitant un accès au Web, vous ne devriez plus rencontrer de problème!

Azure : Récupérer l’adresse IP d’une machine virtuelle

 

Il peut parfois s’avérer nécessaire dans un script de récupérer l’adresse IP d’une VM Azure alors que celle-ci n’est pas enregistrée dans le DNS.

Dans Azure « classic» (l’ancienne version), cette information était renvoyée directement à l’aide du cmdlet Get-AzureVM :

clip_image002

Malheureusement, pour les VM créées dans Azure Resource Manager (Azure RM, la « nouvelle » version), le cmdlet Get-AzureRmVM fonctionne différemment et ne renvoie plus directement cette information :

clip_image004

Il renvoie par contre une information intéressante : l’ID de la carte réseau associée à la VM, via la propriété NetworkInterfaceIDs :

clip_image006

La fin de cet ID représente le « display name » de la carte réseau, qui va nous permettre de retrouver les propriétés détaillées de cette carte à l’aide du cmdlet Get-AzureRmNetworkInterface :

clip_image008

Dans ces propriétés détaillées, une en particulier nous intéresse : IpConfigurationsText.
Comme son nom l’indique, elle contient le détail de la configuration Ip de la carte réseau, dont la PrivateIpAddress qui nous intéresse :

clip_image010

Afin d’automatiser ce processus, j’ai réalisé une fonction Get-AzureRmVMIP qui prend en entrée le nom de la VM et celui de son Resource Group, et qui renvoie le nom de la carte réseau et son IP :

clip_image012

Fonction dont voici le code source, que vous pouvez réutiliser ou adapter à votre guise dans vos propres scripts.

Function Get-AzureRmVMIP

{ param

(

[Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]

[string]

$Name,

[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]

[string]

$ResourceGroupName

)

Process

{

$VM = Get-AzureRmVM -Name $Name -ResourceGroupName $ResourceGroupName

$NICs = get-AzureRmNetworkInterface -name $vm.NetworkInterfaceIDs.split(« / »)[-1] -ResourceGroupName $ResourceGroupName

$VMIPAddresses = @()

foreach ($NIC in $NICs) {

$VMIPAddresses += @{$NIC.Name = $NIC.IpConfigurations.PrivateIpAddress}

}

Return $VMIPAddresses

}

}

OMS – Operations Management Suite – Connexion a SCOM et affichage des données

 

« Operations Management Suite » est un service cloud proposé par Microsoft pour afficher et corréler sous forme de dashboard divers les informations issus de diverses sources de données (La liste evolue) y compris issus d’autres éditeurs. Ces sources de données concerne la supervision, l’automation de processes, les sauvegardes et restaurations, L’analyse d’audit de sécurité, l’analyse du traffic réseau et d’autres sources encore.

SCOM n’est bien sur pas oublié. A la différence que OMS peux fonctionner avec des agent « Microsoft Monitoring Agent » sans SCOM.

Voyons tout de même comment configurer un SCOM existant pour le connecter a un compte OMS.

N.B : Facturé au volume de donnée uploadé, Microsoft propose un compte gratuit limité a 500 MB / jour et 7 jours de retentions de données mais non limité dans le temps. Ce compte est utilisé dans l’exemple ci-dessous.

Il peut être crée via le lien suivant :

https://www.microsoft.com/en-us/server-cloud/operations-management-suite/trial.aspx

 

Si dans la console SCOM, le nœud clip_image001 n’existe pas encore on commence par une mise à jour des managements pack Advisor (ancien nom du service OMS)

Importer les mises à jour des MP Advisor situé dans le dossier d’installation de SCOM a la suite de l’application du dernier RU:

C:\Program Files\Microsoft System Center 2012 R2\Operations Manager\Server\Management Packs for Update Rollups

clip_image002

Fermer et rouvrez la console SCOM

A la suite de cette mise ajour le noeud « Advisor » a disparu et le noeud « Operations Management Suite » est apparu.

clip_image003

Se positionner sur le nœud « Operations Management Suite »

clip_image005

Sélectionner Register to Operations Management Suite

clip_image007

Renseigner le compte de connexion au service OMS.

clip_image009

NB : Cette verification n’est faite qu’a titre de sécurité pour le compte utilisé.

Selectionner Envoyer le code.

clip_image010

Renseigner le code et Envoyer.

clip_image011

Sélectionner le nom du workspace associé au compte OMS précédemment crée.

Cliquer Next.

clip_image012

Cliquer Create

clip_image013

Cliquer Close

clip_image015

La datasource du groupe de management scom connecté apparait dans le portail du service.

https://<nom_du_workspace>.portal.mms.microsoft.com/?returnUrl=%2F#Workspace/overview/index

clip_image017

 

clip_image019

La zone solution Gallery permet d’ajouter des services.

clip_image021

Selectionner par ex Alert Management et cliquer Add

clip_image023

La zone Solutions affiche les solutions installées

clip_image025

Aller sur la console SCOM sur le noeud « Operations Manager Suite\Connection »

Cliquer sur « Add a Computer/Group » en haut à droite

clip_image027

Ajoutez des agents.

La zone « Managed Computers » du noeud « Operations Manager Suite\Connection » contiens les agents ajoutés

clip_image029

Apres quelques minutes la zone « Connected Source » de la console OMS affiche la présence des machines gérés et la fraicheur des données remontées.

clip_image031

La zone « OverView\Settings Dashboard\DATA » permet de configurer les éléments à remonter dans la console OMS (EventLog, Compteur de Performance …) independemment de SCOM.

clip_image033

 

clip_image035

La zone Search est un bon moyen de rechercher rapidement tout les types de données remontés.

clip_image037

Selectionner par ex « All computers with their most recent data »

clip_image039

Nous avons ici 4 serveurs gérés avec leur donnés (TYPE).

La sélection des éléments modifie de manière dynamique la barre de requête en haut de la page comme dans l’exemple ci-dessous permettant d’afficher les données de performance…

clip_image041

clip_image043

…Et plus précisément un compteur en particulier.

clip_image045

N.B : Un ebook gratuit a été mis à disposition pour une immersion assez complete dans OMS :

https://gallery.technet.microsoft.com/Inside-the-Operations-2928e342