2014-10-27 2 views
0

У меня есть текстовый файл, который будет содержать что-то вроде подобные:Split пункт на трубопроводе

Code,Server,Success,Failures 
ABC,ABCSRV01,4,5 

В зависимости от какой-то логики в сценарии - Успех или количество Неудачи будет обновляться. Сейчас на данный момент самый простой способ я могу думать, делать это в:

$currentStats = Get-Content "C:\ONL\stats.txt" | Where-Object {$_ -like "ABC,ABCSRV01,*"} 
$split = $currentStats.split(",") 
$newSuccessCount = $split[2] -as [int] 
$newSuccessCount++ 
$newStats = "ABC,ABCSRV01," + $newSuccessCount + "," + $split[3] 
$updatedStats1 = Get-content "C:\ONL\stats.txt" | Where-Object {$_ -notmatch "ABC,ABCSRV01,*"} 
$newStatsTxt = $updatedStats1 + $newStats 
$newStatsTxt | Out-File "C:\ONL\stats.txt" 

Однако, я не могу помочь, но чувствую, что должен быть более простой способ достижения этой цели - может быть на трубопроводе?

+0

Ваш входной файл отформатирован как CSV. Использование Import-CSV было бы самым benificial – Matt

ответ

3

Взаимодействие с вашим файлом как объектом было бы наиболее полезным для вас и вашего кода.

$currentStats = Import-Csv "C:\ONL\stats.txt" 

Затем вы можете получить доступ к свойствам Success и Failures как свойства объекта. Не уверен, что вы делаете с информацией, но вы можете просто сделать что-то подобное.

$currentStats = Import-Csv "E:\temp\data.txt" 
$update = $currentStats | ForEach-Object{ 

    If ($_.Code -eq "ABC"){ 
     $_.Success = [int]$_.Success + 1 
    } Else { 
     $_.Failures = [int]$_.Failures - 1 
    } 
    $_  
} 
$updatedStats | Export-Csv -Path "C:\ONL\stats.txt" 

То есть, очевидно, не то, что вы собираетесь делать, а должно проиллюстрировать потенциал, который у вас есть.

+0

Полностью забыл о командлете Import-CSV! – PnP

Смежные вопросы