Modifica e test del server SMTP con Powershell

Chissà perchè nel passaggio 2007 > 2010 Microsoft non abbia ritenuto di mettere a disposizione una cmdlet per la configurazione del server di posta in uscita (SMTP), corrispondente al vecchio comando stsadm -o email. Technet riporta infatti ancora lo stesso comando (http://technet.microsoft.com/en-us/library/cc263462.aspx) e anche nella pagina relativa ai mapping stsadm / Powershell (http://technet.microsoft.com/en-us/library/ff621084.aspx) non si trova corrispondenza.

Questo non signifca però che non si possa fare, bastano poche righe 🙂

Prima di tutto memorizzo i dati da configurare all’interno di quattro variabili.

$smtpServer = ‘mail.sharepoint.corp’
$smtpFrom = ‘admin@sharepoint.corp’
$smtpReplyTo = ‘admin@sharepoint.corp’
$smtpCharset = 65001

In una nuova variabile memorizzo l’oggetto “Web Application” corrispondente alla Central Administration*.

$caWebApp = Get-SPWebApplication -IncludeCentralAdministration | ?{ $_.IsAdministrationWebApplication }

e utilizzo infine il metodo UpdateMailSettings di questo oggetto per configurare il server di posta in uscita.

$caWebApp.UpdateMailSettings($smtpServer, $smtpFrom, $smtpReplyTo, $smtpCharset)

* Dato che la configurazione del server SMTP può essere personalizzata per Web Application basterà selezionare la web application desiderata al posto della Central Administration per modificarne la configurazione.

Una volta apportata la modifica al server di posta è consigliabile effettuare un test per verificare che tutto funzioni a dovere. Anche per questo possiamo usare poche righe di Powershell. Tramite il metodo SendMail dell’oggetto SPUtility (http://msdn.microsoft.com/en-us/library/ms477270.aspx) invieremo un email sfruttando la configurazione SMTP di un sito SharePoint. Più facile a farsi che a dirsi.

$web = Get-SPWeb “http://intranet
$sent = [Microsoft.Sharepoint.Utilities.SpUtility]::SendEmail($web,$false,$false,”riccardo@sharepoint.corp”,”Oggetto del messaggio”,”Corpo del messaggio”)

La variabile $sent assumerà il valore di True o False a seconda che l’invio del messaggio riesca o meno. Semplice no?

– Riccardo

Annunci

Ripristinare timer job definition

Recentemente mi è capitato di seguire un attività di troublshooting su una farm MOSS “gambizzata”. Per errore erano state eliminate tutte le timer job definitions. Per alcune di queste una soluzione, forse poco elengante, è quella di (ri)creare la web application ed effettuare quindi il restore dei dati. Di fatto il solo restore non è sufficiente affinchè vengano ricreate le timer job definitions.

Ma questo non vale per tutti i timer job. Ad esempio non vale per l’Application Server Timer Job e l’Application Server Administration Service Timer Job, dettagli no?? Dopo un po di ricerche ho scoperto che questi timer job vengono creati dalla feature Shared Services, quindi per ripristinari “basta” reinstallare la feature via stsadm. Il comando completo è il seguente:

stsadm -o installfeature -name SharedServices -force

I timer job che vengono ricreati sono: Application Server Timer Job, Application Server Administration Service Timer Job, Licensing Synchronizer Job.

<Edit>
Prima di arrendermi all’evidenza ho provato anche la strada Powershell, ho letto più di un post che parlava di come creare timer job definition con ps. Purtroppo mi blocco alla lettura delle timer job definition presenti per la mia web application. Condivido con voi lo script, se qualcuno avesse voglia e tempo di completarlo mi faccia sapere, sono curioso 🙂

[void][reflection.assembly]::LoadWithPartialName(“Microsoft.SharePoint”)
[void][reflection.assembly]::LoadwithPartialName(“Microsoft.Office.Server”)

$SPSite = New-Object Microsoft.SharePoint.SPSite(“http://moss“)

$webApp = $SPSite.WebApplication

foreach ($timerjob in $webApp.JobDefinitions){
    Write-Host $timerjob.TypeName, $timerjob.Name, $timerjob.ID, $timerjob.Parent;
}

Qui potete trovare maggiori dettagli sulle informazioni disponibili in JobDefinitions. Ai fini pratici questo script non mi è servito proprio a niente, in compenso mi sono divertito a fare un po’ di pratica su Powershell 😉

</Edit>

– Riccardo