删除txt文件的内容(第一行除外)

时间:2019-06-17 08:32:58

标签: powershell

我有两个PowerShell脚本:

  • 每天平均备份的虚拟机数量并将其保存到.txt文件中:

    render() {
        console.log("foo");
        return (
        ....
    
  • 使用此.txt文件的值每月平均一次。

有问题。问题出在这部分。

我想对这两个脚本进行升级,其中包括平均VM数量和非备份VM的平均数量。所以我做到了:

$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"

但是由于该脚本每个月启动一次,所以我无法像“ moy,nb_total_vms,nbackedup_vms”那样做第一行,但是我有值,然后是这行。如果我将其放在其他脚本中,则每行都会这样:

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

以此类推。

我想总是在我的.txt文件的第一行上写这一行(moy,nb_total_vms,nbackedup_vms)。

2 个答案:

答案 0 :(得分:2)

首先不要使用*-Content cmdlet来编写输出文件。创建自定义对象并使用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 :(得分:1)

看,标题的答案:

(Get-Content "your.txt" -TotalCount 1) | Set-Content "your.txt"