2016-08-09 19 views
1

Ich arbeite mit einem Skript zum Abrufen eines Ordners. Sobald eine Datei in diesem Ordner abgelegt wurde, wird eine E-Mail an einen Empfänger gesendet.Warum ist meine lokale Variable null?

Hier ist der Code:

$folder = "D:\\temptest" 
$filter = "*.txt" 

$fsw = New-Object System.IO.FileSystemWatcher $folder, $filter -Property @{ 
    IncludeSubDirectories = $false 
    NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' 
} 

$actionToRun = { 
    $path = $Event.SourceEventArgs.FullPath 
    $name = $Event.SourceVentArgs.Name 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 

    Write-Host $name # --> Here $name contains the file name 

    $Recipient = "Peter Rundqvist <to address>" 
    $Sender = "SocSupport <from address>" 
    $Subject = "New document" 
    $Body = $name # --> But here, $name is null 

    Send-MailMessage -To $Recipient -From $Sender -Subject $Subject -Body $Body -SmtpServer "some mail server" 
} 

$onCreated = Register-ObjectEvent -InputObject $fsw -EventName Created -SourceIdentifier FileCreated -Action $actionToRun 

Warum ist es, dass $name kann nicht als Parameter in der Send-MailMessage verwendet werden (es dehnt sich als null), während sie als Parameter in Write-Host funktioniert gut mit?

Antwort

4

Es gibt einen Tippfehler, nahm mich ein paar Läufe, um es zu finden.

$name = $Event.SourceVentArgs.Name 

Sollte sein:

$name = $Event.SourceEventArgs.Name 

Es ist schwer zu sagen, warum Sie einen Wert in $ name haben könnte hatte jemals an den Host schreiben zu können.

+0

Danke, Chris! Ich weiß nicht, wie ich das verpasst haben könnte ... Du hast meinen Tag gerettet! –