Archives par étiquette : Distance

Gérer à distance un serveur Exchange 2010 avec PowerShell

Vous souhaitez administrer vos serveurs Exchange 2010 à distance depuis un ordinateur ou un serveur sur lequel ne sont pas installés les outils d’administration Exchange 2010.
Voici la méthode pour le faire avec Windows Management Framework.

Créez un session avec New-PSSession:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch-server01/PowerShell/ -Authentication Kerberos

Pour créer une session avec New-PSSession en utilisant un autre compte, utilisez:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch-server01/PowerShell/ -Authentication Kerberos  -Credential (Get-Credential)

Importez la session.

Import-PSSession $session

Vous pouvez maintenant lancer les commandes PowerShell Exchange 2010 sur votre système.

Pensez à quitter proprement la session avec :

Remove-PSSession $session

 

Pour les systèmes plus anciens que Windows Seven et Windows Server 2008 R2, il est tout de même nécessaire d’avoir installé PowerShell 2.0 et WinRM 2.0.
Les sources se trouvent ici.

Modifier la base de registre à distance.

Voici comment modifier la base de registre d’un serveur à distance.

$servername = "SRV001"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $servername)
$regconf = $reg.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\\Parameters",$true)
#Ecriture de la valeur.
$regconf.SetValue('EnableAuthenticationTraps','0','DWord')
#Verification de la valeur.
$regconf.GetValue('EnableAuthenticationTraps')

Voici les différents types de valeurs.

Unknown
String
ExpandString
Binary
DWord
MultiString
QWord

Afficher à distance les administrateurs locaux.

Permet d’afficher à les membres du groupe « Administrators » local d’un serveur distant.

$strComputer = Read-Host "Please enter the computer name"

$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$group = $computer.psbase.children.find("administrators")

Write-host ""
Write-host "Computer Name : "$computer.name
Write-Host "_____________________________________"
Write-host ""
Write-host "Group Name : "$Group.name
Write-Host "_____________________________________"

$domain = $group.path.split("/")[2]
$string1 = "WinNT://" + $domain + "/" + $strComputer + "/"
$string2 = $strComputer + "/"
$string3 = "WinNT://"

$members  = ($group.psbase.invoke(”Members”) | Foreach-Object {$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ($string1,$string2) -replace ($string3,"") 

Write-host ""
Write-host "Members : "
Write-host ""
$members

Si vos serveurs sont en français, il faut remplacer « Administrators » par « Administrateurs » dans le script.

Collecter les events logs à distance.

Ce script permet de collecter dans un fichier Excel les events log des résultats des online defrag sur tous les serveurs de boites aux lettres de l’organisation.
Un fois que vous avez le résultat des défragmentation online, vous pouvez évaluer si il est pertinent d’effectuer une défragmentation offline sur certaines Databases.

$a = New-Object -comobject Excel.Application

$a.Visible = $True

$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)

$col = 1
$ligne = 1

$c.Cells.Item(1,1) = "Server"
$c.Cells.Item(1,2) = "Database"
$c.Cells.Item(1,3) = "Date"
$c.Cells.Item(1,4) = "Free space"

$ligne++
 
$ExchServer = Get-MailboxServer
foreach ($Server in $ExchServer){
 
$WmidtQueryDT = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime([DateTime]::Now.AddDays(-1))
$1221 = Get-WmiObject -computer $Server -query ("Select * from Win32_NTLogEvent Where Logfile='Application' and Eventcode = '1221' and TimeWritten >='" + $WmidtQueryDT + "'")
 
foreach ($event in $1221){
$database = $event.message.split('"')[1]
$size = $event.message.split('"')[2].split(" ")[2]
$date = $event.ConvertToDateTime($event.timewritten)

	$col = 1
	$c.Cells.Item($ligne,$col) = [string]$Server
	$col++
	$c.Cells.Item($ligne,$col) = [string]$database
	$col++
	$c.Cells.Item($ligne,$col) = [string]$date
	$col++
	$c.Cells.Item($ligne,$col) = [string]$size
	$ligne++

}
}