簡體   English   中英

PowerShell腳本不會在ISE外部運行

[英]PowerShell script won't run outside of ISE

我是PowerShell的新手,在此先致歉。 我從這里找到的腳本開始: 通過電子郵件獲取事件日志的內容 (感謝和感謝),並根據我的需要對其進行了調整。 基本上,當發生此錯誤代碼時,它每60秒發布一次,所以我只希望每隔一段時間發送一封電子郵件,並將20個最近的事件轉換為基本表中的HTML。 在ISE中執行腳本時,一切工作都很好,但是在常規PowerShell控制台中或作為計划任務運行時,不會發送電子郵件。 需要注意的一件事是,我可以在PowerShell控制台中將所有內容運行到“電子郵件”部分,並將其寫到HTML文件中EventID-To-HTML | Out-File -FilePath $filePath -Append EventID-To-HTML | Out-File -FilePath $filePath -Append 作為新手,我敢肯定我沒有正確地處理事情,因此反饋總是值得贊賞的。 非常感謝

Clear-Host

# ========================
# Collection Data Section
# ========================

function EventID-To-HTML($ComputerName = $env:COMPUTERNAME) {
    $FROMTIME = (Get-Date).AddMinutes(-60)
    $Event = get-eventlog -log Application -newest 20 | where {$_.EventID -eq 7071 -AND $_.TimeGenerated -gt $FROMTIME}
    $eventstring = @()
    Foreach ($i in $Event) {
        $eventstring += $i.Message + ", " +$i.TimeGenerated
    }

    if ($eventstring -eq $NULL){exit}

    $GetEventDate = get-eventlog -log Application -newest 1 | where {$_.EventID -eq 7071 -AND $_.TimeGenerated -gt $FROMTIME}
    $EventDate = $GetEventDate.TimeGenerated

    $htmlStart = "<HTML>
                    <HEAD>
                      <style> 
                        body {background-color:rgb(238, 238, 238);}
                        body, table, td, th {font-family:Calibri; color:Black; Font-Size:11pt}
                                         th {font-weight:bold; background-color:rgb(78, 227, 48);}
                                         td {background-color:rgb(255, 190, 0);}
                      </style>
                    </HEAD>
                  <BODY><div align=center>
                  <h2><b><br><br>Security Alert: <span Style='font-style:normal; color:Blue'>**Camera(s) Down**</span></b></h2>
                  <p><b><br>This event occurred at: <span Style='font-style:italic; color:Blue'>$EventDate on $ComputerName</span></b></p>"

    $htmlEnd = ''
    $htmlStart

    $eventstring | ForEach-Object {Add-Member -InputObject $_ -Type NoteProperty -Name Camera -Value $_; $_} | ConvertTo-Html -Property Camera
    #$eventstring | %{ New-Object PsObject -Prop @{Length = $_.Length; String = $_} } | ConvertTo-HTML

    $htmlStart = ''
    $htmlStart = $htmlStart + "<br><br><br><i><span Style='color:red'>This report has been generated by software</i> <br><i>Please DO NOT reply.</i></div>"
    $htmlStart
    $htmlEnd = ''
    $htmlEnd 
}

# ======================
# Email Section
# ======================

# Make sure $eventstring has something in it first as to not send an empty message
if ($eventstring.count -ge 1) {
    $strFrom = "Sender@domain.com"
    $strTo = "recipient@domain.com"
    $strSubject = "Subject"
    $strSMTPServer = "SMPT Server name"

    $objEmailMessage = New-Object system.net.mail.mailmessage
    $objEmailMessage.From = ($strFrom)
    $objEmailMessage.To.Add($strTo)
    $objEmailMessage.Subject = $strSubject
    $objEmailMessage.IsBodyHTML = $true
    $objEmailMessage.Body = EventID-To-HTML

    $objSMTP = New-Object Net.Mail.SmtpClient($strSMTPServer)
    $objSMTP.Send($objEmailMessage)
}

我懷疑問題是$ eventstring的范圍界定問題。 它是在EventID-To-HTML函數中創建的。 由於作用域在ISE中的工作方式,該變量在函數運行后仍然可用。 通常,一個函數在其自己的作用域中運行,並且當存在該作用域時,該作用域將被處置,並且它將使用在該作用域中創建的所有變量。

您可以通過對函數進行點源測試來測試它,使其在當前范圍內運行。

. EventID-To-HTML | Out-File -FilePath $filePath -Append

注意點和函數名稱之間的空格。 那必須在那里。

避免這種情況的一種方法是使用類似數組列表的集合類型而不是數組。

$eventstring = new-object collections.arraylist
    Foreach ($i in $Event) {
        $eventstring.add("$($i.Message), $($i.TimeGenerated)") > $nul

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM