PowerShell 遍歷檔案
Windows PowerShell 在命令列指令上執行,為 Windows、Mac 和 Linux 使用者提供類似於基於命令列的類 Unix 系統的靈活性。
PowerShell 是支援指令碼、自動化幷包含配置管理框架的解決方案。PowerShell 可以被視為支援跨平臺自動化設施的指令碼解決方案。
PowerShell 由 Microsoft 合作開發和釋出。從 Windows 7 開始的所有 Windows 版本中都安裝了 PowerShell。
但是,如果是 macOS 計算機,則必須下載並安裝適合你的 macOS 版本的 PowerShell 版本。
PowerShell 的自動化功能對於在伺服器等環境中自動執行復雜任務非常有用,在這些環境中,需要維護、處理、比較和分析諸如系統日誌檔案之類的複雜檔案。
PowerShell 支援通過迴圈處理這些日誌檔案、拖尾檔案以等待檔案更改、比較不同檔案以瞭解更改等。
我們將通過他的文章重點介紹遍歷目錄中的檔案。當我們遍歷一組檔案時,我們可以比較這些檔案,在這些檔案中找到特定的東西並編輯這些檔案。
我們正在使用 Windows 10 機器來執行以下操作。你可以嘗試使用你的版本以檢視相同的輸出。
使用 Get-ChildItem
和 get-Content
迴圈並檢索日誌檔案的內容
日誌檔案的目錄很大,必須根據系統管理員的不同要求進行編輯和編輯。
因此,我們將討論在此上下文中迴圈檔案的通用方法。Foreach-Object
應用於遍歷專案。
我們正在嘗試做的事情有點複雜。
- 首先,遍歷檔案列表,按
file.txt
檔案型別過濾用於測試目的。Foreach-Object
for
迴圈用於遍歷檔案。 - 然後,我們將尋找包含
AA
的檔案。我們用作輸入的檔案的螢幕截圖如下圖 1 所示。 Get-Content
用於獲取過濾型別檔案的內容。- 然後,所有檔案都經過查詢匹配行。
我們要刪除檔案中所有不包含 AA
的行。
- 然後,通過
Set-Content
命令,我們可以輸出僅包含過濾值的行。 - 使用過濾後的行建立具有給定結尾的新檔案。
在這裡,下圖包含輸入檔案。
以下是可用於執行上述功能的程式碼。
C:\Users\Agni> Get-ChildItem "C:\Users\Agni" -Filter *.txt |
>> Foreach-Object {
>> $content = Get-Content $_.FullName
>>
>>
>> $content | Where-Object {$_ -match 'AA'} | Set-Content $_.FullName
>>
>>
>> $content | Where-Object {$_ -match 'AA'} | Set-Content ($_.FullName + '_out.log')
>> }
然後使用輸出檔案儲存包含過濾行的值。
以下是更改後的輸出檔案。在這裡我們必須記住,原始檔案也只會更改為具有過濾值,並且所有其他行都將被刪除。
此處的第一張影象將顯示命令執行後的原始檔案。
下圖顯示了 PowerShell 建立的輸出檔案。
因此,這個特定的命令可以與不同的檔案型別一起使用來執行上述任務。我們需要練習將其與 .log
檔案一起使用,這些檔案包含大資料行,很難手動完成。
在這種情況下,你可以按 .log
檔案過濾以獲取指定位置的日誌檔案。
這不是完成此任務的唯一方法。但最被接受的方法之一是輕鬆有效。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.