Удалить содержимое текстового файла, кроме первой строки - PullRequest
1 голос
/ 17 июня 2019

У меня есть два сценария PowerShell, которые:

  • составляют среднее число ежедневно зарезервированных виртуальных машин и сохраняют его в файл .txt:

    $file = "E:\PS\Malik\valeurs.txt" 
    $success_rate = 100 - ($nbckp_vms * 100 / $total_vms)
    $success_rate_round = [Math]::Round($success_rate,2)
    
    #Exported into the $file path
    Add-Content -Path $file -Value "$success_rate_round,$total_vms,$nbckp_vms" 
    #        $text = Get-Content -path $file
    
    # Backup rate for production KPI
    
    $body = $body + "`r`n" + "*** Backup success rate for production KPIs ***" + "`r`n"
    
    $body = $body + "`r`n" + "Daily success rate = $success_rate_round%"
    $body = $body + "`r`n" + "Total VMs = $total_vms"
    $body = $body + "`r`n" + "Daily unbacked up VMs = $nbckp_vms" + "`r`n"
    
  • сделать среднемесячное число со значениями этого файла .txt.

И есть проблема.И проблема в этой части.

Я хотел обновить эти два сценария, включая среднее количество виртуальных машин и среднее количество резервных виртуальных машин.Итак, я сделал это:

$csv1 = Import-Csv -Path $path -Delimiter ','

$moy = $csv1.moy | measure -Average | select -expand average
$nb_total_vms = $csv1.nb_total_vms | measure -Average | select -expand average
$nbackedup_vms = $csv1.nbackedup_vms | measure -Average | select -expand average

Write-Host "moy = $moy / $nb_total_vms / $nbackedup_vms"

Но так как этот скрипт запускается каждые месяцы, я не могу сделать свою первую строку вроде "moy, nb_total_vms, nbackedup_vms", но вместо этого у меня есть значения, а затем эта строка.Если я добавлю его в другой скрипт, у меня будут все строки:

value
moy,nb_total_vms,nbackedup_vms
value
moy,nb_total_vms,nbackedup_vms

и т. Д.

Я хотел бы написать эту строку (moy, nb_total_vms, nbackedup_vms)всегда в первой строке моего .txt файла.

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Не используйте командлеты *-Content для записи ваших выходных файлов. Создайте пользовательские объекты и используйте Export-Csv. Это автоматически создаст нужную вам строку заголовка.

$prop = @{
    moy           = $csv1.moy |
                    Measure-Object -Average |
                    Select-Object -Expand Average
    nb_total_vms  = $csv1.nb_total_vms |
                    Measure-Object -Average |
                    Select-Object -Expand Average
    nbackedup_vms = $csv1.nbackedup_vms |
                    Measure-Object -Average |
                    Select-Object -Expand Average
}

New-Object -Type PSObject -Property $prop |
    Select-Object moy, nb_total_vms, nbackedup_vms |
    Export-Csv $file -NoType

Select-Object в приведенном выше коде (который работает на всех версиях PowerShell) просто для обеспечения порядка столбцов в выходном CSV. Если у вас PowerShell v3 или новее, вы можете упростить его, используя ускоритель типа [PSCustomObject], который автоматически использует упорядоченную хеш-таблицу.

[PSCustomObject]@{
    moy           = $csv1.moy |
                    Measure-Object -Average |
                    Select-Object -Expand Average
    nb_total_vms  = $csv1.nb_total_vms |
                    Measure-Object -Average |
                    Select-Object -Expand Average
    nbackedup_vms = $csv1.nbackedup_vms |
                    Measure-Object -Average |
                    Select-Object -Expand Average
} | Export-Csv $file -NoType
1 голос
/ 17 июня 2019

Смотрите, ответ на ваш заголовок:

(Get-Content "your.txt" -TotalCount 1) | Set-Content "your.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...