Powershell没有为csv返回正确的值

时间:2018-12-04 04:54:10

标签: powershell export-to-csv

我有一个小脚本,可每60秒为PC电池电量分级并写入一个文本文件(我尝试过export-csv)。但是,脚本只会将相同的值写入文件,并且不会更改或增加正确。

$csvfile = "c:\Users\PC-battery.csv"
$Battstatus = (Get-WmiObject -Class Win32_Battery).estimatedchargeremaining 
while ($true) 
    {
        "$Battstatus" | Add-Content $csvfile   
    Start-Sleep -Seconds 60
    }

1 个答案:

答案 0 :(得分:3)

您遇到的问题是,$Battstatus的值在您首次设置后就永远不会更新。您要向系统询问一次电池状态,然后进入一个无限循环,在该循环中您只需返回该值即可。

相反,您需要在循环内 检索值,如下所示:

$csvfile = "c:\Users\PC-battery.csv"
while ($true) 
    {
        $Battstatus = (Get-WmiObject -Class Win32_Battery).estimatedchargeremaining 
        $Battstatus | Add-Content $csvfile   
        Start-Sleep -Seconds 60
    }

我也取消了变量引用的引号,因为我认为它们不是必需的(除非我误解了变量的值,如果需要可以将其重新使用)。

还要注意:Add-Content仅附加到文件,它不支持CSV。您可以利用PowerShell使用对象的优势,并将所有电池信息放入适当的CSV中,如下所示:

$csvfile = "c:\Users\PC-battery.csv"
while ($true) 
    {
        $Battstatus = Get-WmiObject -Class Win32_Battery
        $Battstatus | Export-Csv $csvfile -NoTypeInformation -Append   
        Start-Sleep -Seconds 60
    }

(未经测试,可能会有一些怪癖)