How to create an Azure VM with the ARM PowerShell cmdlets

Adam BertramMVP

Adam Bertram 1 comments

Adam is a Microsoft Cloud and Datacenter Management Most Valuable Profressional (MVP) who specializes in Windows PowerShell. You can reach Adam at adamtheautomator.com or on Twitter at @adbertram.

In this article, I will be showing you how to create an Azure VM from scratch with the Azure Resource Manager (ARM) PowerShell cmdlets.

Copyright © 2006-2015, 4sysops, Digital fingerprint: 3db371642e7c3f4fe3ee9d5cf7666eb0

Adam BertramMVP

Adam Bertram 1 comments

Adam is a Microsoft Cloud and Datacenter Management Most Valuable Profressional (MVP) who specializes in Windows PowerShell. You can reach Adam at adamtheautomator.com or on Twitter at @adbertram.

In this article, I will be showing you how to create an Azure VM from scratch with the Azure Resource Manager (ARM) PowerShell cmdlets.

Copyright © 2006-2015, 4sysops, Digital fingerprint: 3db371642e7c3f4fe3ee9d5cf7666eb0

Source from..

Script Powershell AD – Scanner et Ajouter

image002Mettre a jour le champ email

 

Aujourd’hui, je vous propose un script powershell assez simple que j’ai du mettre en place pour mettre à jour les champs email des comptes utilisateurs d’un active directory.

Il affiche un choix de menu que l’on peut aisément agrandir et adapter à d’autres traitements. Basé sur QAD et en admettant que vous avez les droits admin (sinon il faut faire un get-credential et le stocker dans une variable, vous pouvez facilement le modifier).

De plus, il vous permet de voir une structure composée de commandes imbriquées telles que do-until-switch-foreach-for assez astucieuse je trouve. Les logs sont générés pour être adapter a la structure mais on pourrait très bien le faire en try-catch pour mettre en place une gestion des erreurs si le script venait a grandir et effectuer d’autres traitements. Vous découvrirez également la notion de $tableau, bref que du bonheur 😀

 

Cls
 $log = "result.log"
 $scriptpath = get-location
 $date = get-date
 "*** Debut *** a $date" >> $log
$req = get-qaduser -searchroot 'votre domaine ici' -enabled | select samaccountname,mail,givenname,userprincipalname

$tableau = @()

[Int]$nbr = 0 | Out-Null
[Int]$nbr2 = 0 | out-null

do {
do {
Write-Host ""
Write-Host "A - Scanner et Ajouter les emails aux utilisateurs du domaine"
Write-Host "Q - Quitter"
Write-Host ""
write-host -nonewline "Entrer votre choix (A/Q) puis entrée : "
$choix = read-host
write-host ""
$ok = @("A","Q") -contains $choix
if ( -not $ok) { Write-Host "Choix pas disponible" -fore Red }
}
until ( $ok )
switch ( $choix ) {
"A" {
Write-Host "Vous avez choisi 'A'"
cls

foreach ($user in $req) {

write-host "***************" -BackgroundColor black -ForegroundColor White
write-host $user.samaccountname

if(Get-QADMemberOf $user.samaccountname -Indirect -Name Posh_ID){

# comptes non valide pour creation email

write-host "Compte de service trouvés" -foregroundcolor red
write-host "MAJ Email IGNOREE... $user" -foregroundcolor red
$nbr++

}else{

if($user.mail -eq $null){

# comptes valides on continue

write-host "Ce compte n'a pas d'email et va etre mis a jour" -ForegroundColor Yellow
set-aduser -identity $user.samaccountname -EmailAddress $user.UserPrincipalName
write-host "MAJ Email ... $user" -ForegroundColor Green
$nbr2++
"MAJ Email ... $user" >> $log

}
}
$tableau += $user
}

for ($count = 0; $count -le $tableau.Length; $count++){
$user = $tableau[$count]}
#cls
Write-host "Il y a $nbr comptes ignores" -ForegroundColor red
Write-host "Il y a $nbr2 comptes a modifier" -ForegroundColor Green
"Terminé ! Nbre comptes ignores $nbr et nombre comptes modifies $nbr2" >> $log
write-host "Terminé voir $scriptpath\$log" -ForegroundColor Green
# $tableau >> $log
"*** Fin *** a $date" >> $log
}
"Q" {
cls
Write-Host "Bye" -fore yellow
"Aucun changement effectue $date" >> $log
break
}
}
}
until ( $choix -eq "Q" )

Bon on va détailler tout ca et le réecrire car il ya eu une conversion malheureuse de plugin wordpress sur la syntaxe du code et vlan, patatra…

Modifier Prompt Powershell – Fonction pour ajouter dossier / sous dossier

Un bout de code intéressant, voir indispensable 😉

[codesyntax lang=”powershell”]

function prompt {
 $cwd = (get-location).Path

[array]$cwdt=$()
$cwdi=-1
do {
$cwdi=$cwd.indexofany(”\\”,$cwdi+1)
[array]$cwdt+=$cwdi} until($cwdi -eq -1)

if ($cwdt.count -gt 3) {
$cwd = $cwd.substring(0,$cwdt[0]) + “\..” + $cwd.substring($cwdt[$cwdt.count-3])
}

” $cwd>_ ”
}
# The above sets prompt to the current drive letter, immediate sub directory and current directory.
#     Example: C:\..\drivers\etc>_

Import-Module Pscx #-arg ~\Pscx.UserPreferences.ps1

[/codesyntax]

Script Powershell : Active Directory

Les Bases

Nous n’allons pas voir les bases complètes car beaucoup d’autres sites traitent déjà le sujet et bien mieux que je ne le ferai jamais.
En revanche, d’expérience, je sais que souvent on souhaite transformer les scripts de base récupérés ça et là pour notre application du quotidien (à la maison ou en entreprise). Et là, normalement en lisant ce qui suit, vous devriez trouver votre compte.

Les scripts ont été testés en environnement de production, et sont quasi tous nécessaires au bon fonctionnement, ou plutôt a la maintenance, d’un Active Directory “standard” ou en tout cas dans sa configuration minimale d’entreprise. De nombreux Système d’Information utilisent bien souvent des outils tiers propriétaires, ou des développements “custom” et de nos jours (bien sombres) réfléchissent aux économies substantielles faites grâce au langage Powershell (Posh).

De nombreux exemples que tout le monde a rencontré : scripts de login avec des redirections en fonction des groupes, des mappages de lecteurs réseaux applicatifs, des classements de comptes ou d’objets ad dans des unités d’organisation (OU) spécifiques, des sauvegardes, des rapports d’utilisation de tel ou tel partage, de quota, des déploiements d’outils standards (adobe reader, .net, 7zip) ou d’applications métiers …

Pour débuter, il vaut mieux avoir bien compris le fonctionnement des cmdlet, snipet, et être capable de lire les bases du code des scripts comme les logs, les credentials, les requêtes AD qui en substance sont tout ce que nous avons besoin (les données d’info, le moyen pour y accéder a ces données, et les extractions qui nous permettent de produire les rapports nécessaires au suivi ou a la gestion d’erreur).

Je vous invite à lire les prochains articles ou les choses prennent une tournure plus sport…