使用PsObject在While循环中自动填充表行

时间:2019-04-15 21:51:20

标签: powershell loops auto-populate psobject

我正在寻找一个Powershell脚本,它将脚本的新行添加到输出文件上的HTML表中,直到被用户终止为止。正在编写此特定示例,以将当前硬盘使用的空间以及每两秒钟的时间戳记写入HTML文件。

我尝试使用CSV文件作为输出,但是脚本无法写入CSV文件并使其同时打开。这很重要。

$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: gray; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #E1DEDC;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: gray;}
</style>
"@

$DateTime = Get-Date -Format G
$FreeDiskSpace = Get-WmiObject -Class Win32_logicaldisk -Filter "DriveType ='3'" | Select -ExpandProperty FreeSpace

Write-Output $Table1| ConvertTo-Html -Head $Header | Out-File -FilePath C:\users\public\documents\FreeSpaceTimeStamp.html

while ($True)
{

$Table1 = new-object psobject
$Table1 | add-member noteproperty Date/Time $DateTime
$Table1 | add-member noteproperty FreeSpace $FreeDiskSpace

Start-Sleep -Seconds 2
}

现在,代码不会继续在同一HTML文件中添加行,而只是挂在while循环中,我不明白为什么。

感谢您的帮助。

谢谢

塞思

1 个答案:

答案 0 :(得分:0)

至于……

  

有没有向PsObject添加行的方法

...请参阅此问答。

Powershell: Add lines to a custom objects

# array of objects (not 'lines'). So
$serverList= @() 
$serverList+= @{ServerName= 'blabla1'; OSType='Windows XP'}
$serverList+= @{ServerName= 'blabla2'; OSType='Windows XP Profesional'}

#display as table
$serverList | % { new-object PSObject -Property $_}

您可以在内存中执行此操作,直到用户完成操作,然后写入或更新序列化的文件。不会在被另一个尚未锁定的进程打开时打开。一次只能编辑一个文件。这不是PowerShell的限制,它是一个操作系统。