我想從一個 txt 檔案中提取一個字串來顯示我的 SQL Server 備份運行的速度。這向我顯示了包含資訊的行:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec"
問題是文本行超過 2000 個字符,所以我想將其通過管道傳遞給子字串以僅獲取一部分。不幸的是,這段代碼:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec" | ForEach-Object { $_.substring(42,30) }
給
方法呼叫失敗,因為 [Microsoft.PowerShell.Commands.MatchInfo] 不包含名為“substring”的方法。
關于如何讓它作業的任何提示?
肯
[編輯] 解決方案由 JosefZ 提供。為了我自己將來的參考,資料庫名稱用單引號括起來,速度用左圓括號和右圓括號括起來。這段代碼:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec" |
ForEach-Object {
$_.Line.substring($_.Line.IndexOf(''''), $_.Line.IndexOf('''', $_.Line.IndexOf('''') 1)-$_.Line.IndexOf('''') 1) " " $_.Line.substring($_.Line.IndexOf('('),$_.Line.IndexOf(')')-$_.Line.IndexOf('(') 1)
}
產生如下所示的輸出:
'DBA' (796.230 MB/sec)
'ReportServer' (488.596 MB/sec)
'ReportServerTempDB' (139.270 MB/sec)
'TSTGP' (420.375 MB/sec)
uj5u.com熱心網友回復:
Select-String:默認情況下,輸出是一組MatchInfo物件,每個匹配項對應一個物件。
將.substring方法應用于$_.Line字串,例如如下:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec" |
ForEach-Object { $_.Line.substring(42,30) }
uj5u.com熱心網友回復:
Select-String正在回傳一個MatchInfo物件,因此您需要迭代Matches該物件的屬性。
所以你可以這樣做:
(Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec").Matches |
ForEach-Object { $_.substring(42,30) }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534704.html
標籤:电源外壳
上一篇:在PowerShell中決議輸出
