none
如何一次將字串中所有符合正規式的資料,經過運算式處理後,取代原來的值 RRS feed

  • 問題

  • $Content = Get-Content -Path $LogFile -ReadCount 0 可以一次讀取檔案內容,存到 $Content

    但是我需要將 LogFile 當中多筆的日期時間,從GMT 轉成 LocalTime +8

    $Content -replace "^(\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2})", (([datetime]$1).AddHours(8))

    上面的語法是無法運作的

    雖然可以一行一行處理,但是效率很差。

    不知道有沒有方法可以一次將所有日期時間,經過運算成本地時間後,再取代掉 GMT 時間




    2021年8月20日 上午 09:26

所有回覆


  • Get-Content -Path $LogFile |ForEach-Object {    
        [datetime]$DateTime = $_ -replace "(^\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2})(.*)" ,"`$1"
        $LogDate = $_ -replace "(^\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2})(.*)" ,"`$2"        
        Write-Host  $DateTime.AddHours(8) $LogDate
    }
    可以用Write-Host 輸出到螢幕,也可以改用Out-File 寫入到檔案。

    2021年8月24日 上午 06:44