Precisa de ajuda com o erro do Powershell "O lado esquerdo de um operador de atribuição ..."

3

Eu tenho um script do Powershell que estou tentando configurar para que ele possa enviar um e-mail de status do Exchange para mim todos os dias. Eu tenho o script funcionando muito bem quando eu executá-lo manualmente a partir de uma janela do console do EMS, mas quando eu tento adicioná-lo como uma tarefa agendada, eu preciso adicionar a linha Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin no topo. Esta adição parece estar causando um problema, como quando eu tento executar o script a partir da janela de tarefas, recebo este erro:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin   
param(
$MailServer = "mailserver",
$MailTo = "[email protected]",
$Mailfrom = "[email protected]",
$Subject = "Exchange System Status " + (Get-Date))
$body = Get-MailboxDatabase -Status | select Name,LastDifferentialBackup,LastFullBackup | 
Out-String
$body2 = Get-ExchangeServer | where {$_.ServerRole -Match "HubTransport"} | Get-Queue | select Identity,Status,MessageCount,NextHopDomain | Out-String
$email = new-object system.net.mail.mailmessage
$email.to.add($MailTo)
$email.from = $Mailfrom
$email.subject = $Subject
$email.isbodyhtml = $False
$email.body = $body,$body2
$client = new-object system.net.mail.smtpclient $mailserver
$client.send($email)

Quando eu tenho essa linha PSSnapin no topo e executo a tarefa, recebo este erro: Expressão de atribuição inválida. O lado esquerdo de um operador de atribuição precisa ser algo que possa ser atribuído a uma variável ou a uma propriedade

Tirar a linha e tentar executar a tarefa, obviamente, não funcionaria, pois ela não tem o snap do Exchange na janela padrão do PowerShell. Estou chamando o script usando um arquivo em lotes na tarefa agendada com o comando: Comando Powershell "& {C: \ Scripts \ exchemail.ps1}"

    
por Agent 03.08.2009 / 21:27

4 respostas

1

Em vez de tentar descobrir o que está errado, sugiro o que funciona 100% para mim.

Este script obtém as estatísticas da caixa de correio, mas você pode adaptá-lo para fazer o que quiser.

Conteúdo de Get-MailboxStatistics.ps1:

$FromAddress = "[email protected]"
$ToAddress = "[email protected]"
$MessageSubject = "Exchange Mailbox Size Report"
$MessageBody = "Attached is the current list of mailbox sizes."
$SendingServer = "exchange.company.local"

Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | Select-Object DisplayName, @{Name="Size(MB)";Expression={$_.TotalItemSize.Value.ToMB()}}, ItemCount, LastLogonTime | Export-CSV -path "mailboxstats.csv" -notypeinformation

###Create the mail message and add the statistics text file as an attachment
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
$Attachment = New-Object Net.Mail.Attachment("mailboxstats.csv")
$SMTPMessage.Attachments.Add($Attachment)

###Send the message
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

Isso é executado por um arquivo de lote agendado que contém esta linha:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "D:\Exchange\Bin\ExShell.psc1" -Command C:\Scripts\Get-MailboxStatistics.ps1
    
por 03.08.2009 / 23:43
3

este script deve estar faltando coisas. Você está usando o Param, que deve ser a primeira linha no bloco de script. O que provavelmente está acontecendo é que o powershell está olhando para isso como se você tivesse digitado

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin   mailserver","[email protected]","[email protected]",Exchange System Status ...

Você está faltando uma declaração de função e chaves (se é isso que você está tentando fazer). Não há nenhuma função na página que você menciona como fonte

    
por 04.08.2009 / 00:24
1

Poderia ser um problema com aspas e / ou caracteres de escape? Talvez a diferença não esteja na única linha adicionada / removida, mas na maneira como você a executa?

    
por 03.08.2009 / 23:06
0

Pode não ser que uma linha seja o problema ... apenas quando é comentada, a coisa toda quebra, então o erro real não tem a chance de aparecer.

Tente dividir esse script em várias linhas, atribuindo variáveis e propriedades separadamente, e você poderá refinar o problema.

    
por 03.08.2009 / 21:59