Archive

Archives pour 06/2012

Générer un CSR pour Exchange 2010

Il existe sur Internet des sites vendeurs de Certificat SSL qui propose de vous aider à générer le Certificate Signing Request (CSR).
DigiCert offre un petit utilitaire qui une fois tous les champs renseignés génère la commande PowerShell qui vous permettra par un simple copier/coller de générer la demande de certificat sur votre serveur Exchange.

Exhchange 2010 CSR Tool

Il y a également un page d’explication notamment sur les Subject Alternate Names (SAN) qu’il ne faut pas oublier lors de la création d’une demande de certificat pour Exchange.

Choosing SAN Names for your Exchange SSL Certificate

Categories: Exchange 2010 Tags: ,

Faire un recherche DNS sur un liste d’adersse IP

Un script PowerShell pour faire un recherche DNS sur une liste d’adresse IP à la manière d’un NSLookup.

?View Code POWERSHELL
$list  = Get-Content -Path .\nslookuplist.txt
Foreach ($ip in $list) {
[System.Net.Dns]::GetHostByAddress("$ip") 
}
Categories: Powershell Tags: , ,

Capturer les IP des clients d’un connecteur SMTP

Un ligne de commande pour lister les IP des clients SMTP envoyant des messages à un connecteur Exchange 2007 ou 2010.

?View Code POWERSHELL
Get-MessageTrackingLog -Server hubserver01 -EventId "receive" -Start "06/12/2012 00:00:00" -ResultSize Unlimited | Where-Object { $_.ConnectorId -match "SMTP_Connector" } | Select-Object -unique ClientIP | ft clientip
Categories: Exchange 2010 Tags: , ,

Identifier et compter les VM démarrées

Ce weekend, je doit arrêter et redémarrer dans un délais relativement court une soixantaine de machines virtuelles.
Le système sur lequel je vais intervenir contient également des VMs qui sont déjà arrêtées et qui ne devront pas être redémarrées.
Pour ne pas oublier une VM lors de l’arrêt ou du démarrage, j’ai créer deux scripts.

Le premier va me permettre d’avoir une image des VMs qui sont démarrées.

?View Code POWERSHELL
$vm = Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" }
$file = ".\VM-StopAndStart.txt"
$resfile = New-Item -ItemType file -Path $file -Force
Add-Content -Path $resfile -Value $vm

J’aurai ainsi dans un fichier la liste des VMs sur lesquelles je dois intervenir. Je le lancerai juste avant le début de l’opération.

Pendant les opérations d’arrêt et de redémarrage, j’utiliserai ce second script.

?View Code POWERSHELL
cls
$inv = Get-Content -Path .\VM-StopAndStart.txt"
$vms = Get-VM
$on = 0
$off = 0
Foreach ($vm in $vms) {
if ($vm.PowerState -eq "PoweredOn" -and $inv -match $vm.name){
Write-Host "$vm is PoweredOn" -ForegroundColor Green
$on++
}
Elseif ($vm.PowerState -eq "PoweredOff" -and $inv -match $vm.name){
Write-Host "$vm must be PoweredOn" -ForegroundColor Red
$off++
}
Elseif ($vm.PowerState -eq "PoweredOff" -and $inv -notmatch $vm.name){
Write-Host "$vm must stay PoweredOff" -ForegroundColor Gray
}
}
Write-Host "`nPoweredOn: $on - PoweredOff: $off`n" -ForegroundColor Magenta

J’aurai donc ainsi rapidement la liste des machines que je dois arrêter ou redémarrer et leur nombre.

Configurer FGPP avec Powershell

Pourquoi ce compliquer la vie.

En référence à l’article Implémenter différentes stratégies de mot de passe dans un domaine, il est possible de configurer un « Password Settings Object » (PSO) avec PowerShell.

?View Code POWERSHELL
New-ADFineGrainedPasswordPolicy -Name "AdminsPasswordPolicy" -Precedence 10 -ComplexityEnabled $true -Description "The Domain Administrators Password Policy"-DisplayName "Domain Admins PSO" -LockoutDuration "0.00:30:00" -LockoutObservationWindow "0.00:30:00" -LockoutThreshold 5 -MaxPasswordAge "60.00:00:00" -MinPasswordAge "1.00:00:00" -MinPasswordLength 8 -PasswordHistoryCount 5 -ReversibleEncryptionEnabled $false

Le résultat avec la commande

?View Code POWERSHELL
New-ADFineGrainedPasswordPolicy -Name "AdminsPasswordPolicy"

Manage Fine-Grained Password Policy (Technet)

Implémenter différentes stratégies de mot de passe dans un domaine

Dans les versions précédente de Active Directory, vous aviez la possibilité de définir une stratégie de mot de passe pour les comptes du domaine avec des paramètres définis.
 

 
La stratégie des mots de passe ne peut être configurée que dans la GPO « Statégie de domaine par défault ».
Cette stratégie s’applique à tous chaque compte utilisateur du domaine et chaque compte utilisateur de la SAM local des serveurs et ordinateurs qui joignent le domaine.
Il n’est pas possible de définir d’autres paramètres via une autre GPO.

Avec l’arrivé d’Active Directory 2008/R2, vous pouvez maintenant accéder à « Fine Grain Password Policies » (FGPP).
FGPP vous permet de mettre en place des politiques de mot de passe multiples dans le même domaine Active Directory.
Ceci peut être utile pour sécuriser le mot de passe de certains comptes critiques comme Administrateurs, RH, Finances, Direction…
FGGP ne se positionnera plus sur une OU comme le ferait une GPO mais sur un groupe ou un compte.

Voici comment mettre en place FGPP sur un groupe d’utilisateurs.

1- Lancez ADSIEDIT.MSC sur votre DC.
2- Sélectionnez Connexion dans le menu Action..
3- Dans la boîte de dialogue Paramètres de connexion cliquez sur le bouton OK.
 

 
4- Dans ADSIEDIT, développez la vue de votre nom de domaine vers CN=System.
4- Cliquez-droit sur le CN = Password Settings Container.
6- Sélectionnez l’option Créer | Objet.
7- Remplissez les valeurs pour chaque entrées, le ci-dessous est un guide.
 

AttributValeurDescription
CnAdminsPasswordPolicyLe nom de l'objet de stratégie de mot de passe dans Active Directory
msDS-PasswordSettingsPrecedence10Nombre de poids. Au cas ou l'utilisateur serait membre de plusieurs groupes ayant chacun un FGPP. Le plus petit nombre a la priorité la plus élevé.
msDS-PasswordReversibleEncryptionEnabledFalseValeur booléenne pour définir si les mots de passe doivent être stockés avec un chiffrement réversible.
msDS-PasswordHistoryLength5Nombre de mots de passe utilisateur unique doit d'entrée avant de les réutiliser un mot de passe.
msDS-PasswordComplexityEnabledTrueDéfinit si la complexité de mot de passe doit être activée ou non.
msDS-MinimumPasswordLength8Le nombre minimum de caractères dans le mot de passe utilisateur.
msDS-MinimumPasswordAge-864000000000L'âge minimum mot de passe (un jour).
msDS-MaximumPasswordAge-51840000000000L'âge maximum de mot de passe (60 jours).
msDS-LockoutThreshold5Nombre de tentative échoué de mot de passe avant que l'utilisateur soit verrouillé.
msDS-LockoutObservationWindow-18000000000Le temps écoulé pour réinitialiser le compteur de verrouillage de mot de passe au maximum (30 minutes).
msDS-LockoutDuration-18000000000Le temps pendant lequel le compte reste verrouillé si aucune nouvelle mauvaise tentative n'a eu lieu (30 minutes).

 
Pour calculer les temps utilisez le tableau ci-dessous en multipliant le nombre de minutes, heures ou jour pas la valeur correspondante.
 
Unité de tempsFormuleValeur
1 Minute-60 * (10 ^ 7)-600000000
1 Heure-60 * 60 * (10 ^ 7)-36000000000
1 Jour-24 * 60 * 60 * (10 ^ 7)-864000000000

 
8- Validez la configuration.
9- Affichez les propriétés du « Password Settings Object » (PSO).
 

 
10- Modifiez l’attribut « msDS-PSOAppliesTo » pour ajouter les groupes auxquels vous souhaitez appliquer la FPGG.
 
 
11- Appliquez.

Maintenant, tous les utilisateurs du groupe que vous avez sélectionné on un stratégie de mot de passe spécifique.
Répétez l’opération pour autant de PSOs que vous souhaitez créer.

Importer la création de comptes Active Directory 2008 R2

Voici comment importer dans Active Directory 2008 R2 des comptes depuis un fichier texte.
Le login est formaté par rapport au nom et prénom de l’utilisateur. Dans cette exemple, on utilise les 6 premières lettres du nom et les 2 premières lettres du prénom.

?View Code POWERSHELL
Import-Csv -Path .\Import\import-adms.txt | foreach {
$firstname = (Get-Culture).TextInfo.Tolower($_.prenom)
$firstname = (Get-Culture).TextInfo.ToTitleCase($firstname)
$lastname = (Get-Culture).TextInfo.ToUpper($_.nom)
$name = $lastname + ' ' + $firstname
if ($_.nom.Length -le 6) {
$samaccount = $lastname + $firstname.Remove(2)
}
Else {
$samaccount = $lastname.Remove(6) + $firstname.Remove(2)
}
$descrition = $_.Societe + "-" + $_.Description
$upn = $samaccount + "@domain.fr"
$AccountPassword = (ConvertTo-SecureString "Pass2Key2" -AsPlainText -force)
 
New-ADUser -Name $name -GivenName $firstname -Surname $lastname -Path "OU=Comptes,DC=corp,DC=domain,DC=fr" -SamAccountName $samaccount -Description $descrition -UserPrincipalName $upn -AccountPassword $AccountPassword -Enabled $true -ChangePasswordAtLogon $true
}

Modifier les adresses IP distantes sur un connecteur de réception

Comment gérer les adresses IP distantes autorisées sur un connecteur de réception?
Sur un connecteur de réception sans authentification et autorisant les connexions anonymes, il est indispensable de créer une liste blanche des adresses IP qui pourront émettre des messages via ce connecteur.

Voici comment gérer cette liste avec PowerShell.

Visualiser la liste existante.

?View Code POWERSHELL
$RConn = Get-receiveConnector "HUBSERVER\IPWhiteList"
$RConn.RemoteIpRanges | ft LowerBound,CIDRLength -AutoSize

Compter le nombre d’IP.

?View Code POWERSHELL
$RConn = Get-receiveConnector "HUBSERVER\IPWhiteList"
$RConn.RemoteIpRanges.count

Comparer deux connecteurs.

?View Code POWERSHELL
$RConn1= Get-receiveConnector "HUBSERVER01\IPWhiteList"
$RConn2= Get-receiveConnector "HUBSERVER02\IPWhiteList"
Compare-Object $RConn1.RemoteIpRanges $RConn2.RemoteIpRanges

Une flèche vers la droite indique que l’adresse affichée est présente dans le connecteur « ILMHUBCAS02P\Appsmtp » et absente de l’autre.

Attention, la commande suivante, écrase la liste d’IP existante par l’IP que vous spécifiez.

?View Code POWERSHELL
Set-ReceiveConnector "HUBSERVER\IPWhiteList" -RemoteIPRanges "192.168.6.66/32"

Pour ajouter cette IP a la liste existante, il faut utiliser la combinaison des commandes suivante.

?View Code POWERSHELL
$RConn = Get-ReceiveConnector "HUBSERVER\IPWhiteList"
$RConn.RemoteIPRanges += "192.168.6.66/32"
Set-ReceiveConnector "HUBSERVER\IPWhiteList" -RemoteIPRanges $RConn.RemoteIPRanges

Pour ajouter plusieurs IP.

?View Code POWERSHELL
$RConn = Get-ReceiveConnector "HUBSERVER\IPWhiteList"
$RConn.RemoteIPRanges += "192.168.6.66/32","192.168.6.99/32"
Set-ReceiveConnector "HUBSERVER\IPWhiteList" -RemoteIPRanges $RConn.RemoteIPRanges

Pour ajouter un liste d’IP issue d’un fichier texte.

?View Code POWERSHELL
$RConn = Get-ReceiveConnector "HUBSERVER\IPWhiteList"
Get-Content .\newips.txt | foreach {$RConn.RemoteIPRanges += "$_"}
Set-ReceiveConnector "HUBSERVER\IPWhiteList" -RemoteIPRanges $RConn.RemoteIPRanges

Si la liste d’IP en place a déjà une des IP mentionnés dans le fichier, un message d’erreur va apparaître, il est sans incidence.

Modifier le proxy de Internet Explorer

Voici plusieurs scripts pour basculer d’une configuration proxy à une autre dans Internet Explorer et Google Chrome.
Il s’agit simplement de modifier certaines clés de la base de registre avec PowerShell.
Lire la suite…

Quel temps fait-il à Nantes avec PowerShell

J’ai pas encore trouvé l’utilité mais ça peut servir.
Voici un script PowerShell qui vous permet de connaitre le temps qu’il fait en ce moment à Nantes.

?View Code POWERSHELL
$webclient = new-object net.webclient
 
$feed = [xml]($webclient.DownloadString("http://www.google.com/ig/api?weather=nantes, france&hl=fr"))
$feed.xml_api_reply.weather.current_conditions.condition.GetAttribute("data")

Autre intérêt que de connaitre le temps qu’il fait grâce à une API Google, ce script montre comment télécharger un contenu XML sur internet et en extraire un information avec PowerShell.

Pour info, aujourd’hui, c’est « Nuageux dans l’ensemble ».

Categories: Powershell Tags: , , ,