簡體   English   中英

使用PowerShell腳本跟蹤多個遠程服務器上的日志文件

[英]PowerShell script to tail log file on multiple remote servers

我需要完善這個腳本。 我需要它在多個(5個-都在同一位置的日志文件)Windows系統上運行。 我很難弄清楚如何確保可以同時“尾部”所有5台服務器上的條目的日志並返回“ OK”; 僅當在所有5台服務器上生成日志條目時才終止作業,而不僅僅是說其中4台。

這是要執行的操作:

  1. 啟動服務,
  2. “尾巴”日志文件
  3. 確認日志文件包含條目( $waitfor
  4. 在終止中生成日志條目后
$serviceB = "my application service"
$logfile2 = "F:\App\log\wrapper.log"
$waitFor = "[4.2.3.GA (build: SVNTag=JBoss_4_2]”

Write-Host "Starting $serviceB"
Start-Service $serviceB
Write-Host "Waiting for $waitFor in $logfile2"
while (!((Get-Content $logfile2 -Tail 30) | ? {$_ -match $waitFor})) {
    Start-Sleep -Seconds 5
}

我如何使用foreach循環來完成-拖尾並等待CSV文件中所有5個遠程系統上的日志輸入?

簡而言之,您不能一次不在同一會話中,而不能一次全部。 每個日志必須位於其自己的會話中。 我怎么知道,因為我花了很多時間來嘗試實現這一目標。 好吧,您可以一次只配置一台服務器,完成后使用循環將其移至下一台服務器。

您可以使用for循環命中每個服務器主機,但是您需要為每個服務器彈出一個單獨的PowerShell實例。

好吧,您可以在一個控制台會話中,一次只處理一台服務器,等待其完成,然后向其發送消息,然后使用循環將其移至下一個。 但是,如果要花一些時間才能找到那根弦,那就像看着油漆變干一樣。

foreach ($RemoteHost in (Import-Csv -Path 'D:\Temp\serverlist.csv')) 
{
    # You code here
    Invoke-Command -ComputerName $RemoteHost -Credential 'domain\adminname' -ScriptBlock {
        # the rest of your code here:

    }
}

由於您說的是遠程主機,所以這意味着您需要為他們啟用PSRemoting,以利用隱式刪除會話並使用遠程主機本地管理組中的帳戶。

您可以使用-tail -wait,並且也不需要該Start-Sleep和Line Grab步驟。

使用-tail -wait,將在創建條目時在寫入每個條目行時顯示日志。

Get-Content -Path $CurrentHostLog.FullName -Tail 0 -Wait 

因此,盡管我不確定自己為什么要-tailtail並觀看這些日志滾動,因為您只是在尋找簡單的字符串

恕我直言,我建議您同時並行啟動每個作為后台作業,並讓該作業提醒您; 文字,電子郵件,屏幕警報等,當他們返回您想要的結果時。

暫無
暫無

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

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