2016-01-14 8 views
0

Avec le script suivant, mon intention était d'atteindre les objectifs suivants:Exportation au format CSV basé sur la date et la fixation de ce fichier à un e-mail

  1. Créez un fichier CSV à partir d'une série de commandes Exchange avec le fichier être nommé en fonction de la date et l'heure.
  2. Joignez le même fichier à un courrier électronique.

L'itération actuelle de mon script est la suivante:

$ems = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ` 
     http://exchangehubcas.mydomain.com/powershell 

Import-PSSession $ems -DisableNameChecking 

function getRepQ { 
    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | 
     Sort-Object mailboxserver | 
     Select-Object -Property mailboxserver, name, status, copyqueuelength, 
      replayqueuelength, contentindexstate | 
     Export-Csv -Path "c:\admin\scripts\exchange\ExchangeReplication_$((Get-Date).ToString('yyyy-mm-dd_hh-mm-ss')).csv" 
} 

function qchk { 
    $nowfile = getRepQ 
    $data = Get-Content -Path $nowfile | Select-Object -Skip 1 | 
      Out-String | ConvertFrom-Csv | 
      Select-Object -Property status -Unique 
    $repStat = $data.Status 
    foreach ($_ in $repStat) { 
     if ($_ -eq "Healthy") { 
      Send-MailMessage -Attachments $nowfile -From [email protected] ` 
       -To [email protected] -Subject "Database replication failed" ` 
       -Body "Review attached CSV file for more details." ` 
       -SmtpServer exchangehubcas.mydomain.com 
     } 
    } 
} 

qchk 

En fin de compte « santé » sera remplacé par « Échec », mais alors que le fichier .csv est généré correctement, il échoue sur le qchk fonction indiquant que le chemin pour Get-Content est null.

Qu'est-ce que je fais de mal et quelle est la bonne façon d'atteindre mon objectif?

Répondre

0

Votre fonction getRepQ exporte les données de Get-MailboxDatabaseCopyStatus vers un fichier CSV, mais ne renvoie rien. Par conséquent, rien n'est assigné à la variable $nowfile lorsque vous appelez la fonction au qchk.

Modifier ceci:

function getRepQ { 
    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | 
     Sort-Object mailboxserver | 
     Select-Object -Property mailboxserver, name, status, copyqueuelength, 
      replayqueuelength, contentindexstate | 
     Export-Csv -Path "c:\admin\scripts\exchange\ExchangeReplication_$((Get-Date).ToString('yyyy-mm-dd_hh-mm-ss')).csv" 
} 

à ceci:

function getRepQ { 
    $date = (Get-Date).ToString('yyyy-mm-dd_hh-mm-ss') 
    $csv = "C:\admin\scripts\exchange\ExchangeReplication_$date.csv" 

    Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | 
     Sort-Object mailboxserver | 
     Select-Object -Property mailboxserver, name, status, copyqueuelength, 
      replayqueuelength, contentindexstate | 
     Export-Csv -Path $csv 

    $csv 
} 

et la fonction à la fois exporter les données vers un fichier CSV et et retourner le chemin de ce fichier CSV à l'appelant .

+0

Merci! Pour une raison quelconque, il échoue encore sur la ligne get-content avec path est null. La fonction qchk commence en appelant getRepQ. J'ai essayé d'ajouter une ligne de variable supplémentaire $ nowfile = $ csv, mais dans les deux cas, cela ne semble pas fonctionner dans la commande get-content. Le csv est en effet créé correctement. –

+0

Umm ... ça marche, ou ça ne marche pas? Si cela ne fonctionne pas: veuillez ajouter le code modifié et tout nouveau message d'erreur à votre question. –

+0

Désolé pour la réponse différée. Oui, cela fonctionne selon vos suggestions. Merci encore pour votre aide. –