我正在使用.ps1-Powershell-Script,但是我被卡住了。
我有以下代码:
$a=0
$b=0
$c=0
$freeRam=0
$strComputer = "localhost"
$date = get-date
$a=Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer | fl *freePhysical* | Out-String
$b=Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer | fl *totalvisiblememory* | Out-String
$c=Get-WmiObject win32_processor -ComputerName $strComputer | fl *LoadPercentage* | Out-String
$a = $a -replace '\D+(\d+)','$1'
$b = $b -replace '\D+(\d+)','$1'
$c = $c -replace '\D+(\d+)','$1'
$c = $c.Insert(1,",")
$freeRam=[math]::Round($a/$b*10000)/100
$seperator="Es ist der " + $date + "; der verfuegbare Arbeitsspeicher betraegt: " + $freeRam + " % " + "und die Auslastung der CPU in % betraegt aktuell " + $c
$seperator | Out-File -append "D:\Logging\FreeRAM.txt"
此代码使用Powershell生成一个.txt文件,查询WmiObjects以获得可用的物理内存和CPU的实际负载百分比。
工作正常,但生成了win32_processor LoadPercentage-Query空白链接。
我已经尝试过将.Trim()用于此类文件
$c=Get-WmiObject win32_processor -ComputerName $strComputer | fl *LoadPercentage* | Out-String.Trim()
,但不起作用。我试过使用
-NoNewLine这样的$seperator | Out-File -append "D:\Logging\FreeRAM.txt" -NoNewLine
for Out-File,但它不起作用。
我的输出如下:
Es ist der 03/04/2019 08:13:31; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,2
Es ist der 03/04/2019 08:13:35; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,0
Es ist der 03/04/2019 08:13:39; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,1
Es ist der 03/04/2019 08:14:00; der verfuegbare Arbeitsspeicher betraegt: 71.84 % und die Auslastung der CPU in % betraegt aktuell 1,0
我想要这样:
Es ist der 03/04/2019 08:13:31; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,2
Es ist der 03/04/2019 08:13:35; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,0
Es ist der 03/04/2019 08:13:39; der verfuegbare Arbeitsspeicher betraegt: 71.86 % und die Auslastung der CPU in % betraegt aktuell 1,1
Es ist der 03/04/2019 08:14:00; der verfuegbare Arbeitsspeicher betraegt: 71.84 % und die Auslastung der CPU in % betraegt aktuell 1,0
答案 0 :(得分:3)
[编辑-修改后的处理器负载百分比计算以考虑处理器数量。]
我看到您有您的答案...但是您使用的代码有些round回,似乎没有必要。所以我写了一个比较直接的版本。 [咧嘴]
它做什么...
*_OperatingSystem
类.LoadPercentage
.NumberOfProcessors
获得CIM_ComputerSystem
.LoadPercentage
个项目的[可能]数组相加并除以.NumberOfProcesors
来计算实际负载%Format-List
调用-f
字符串格式运算符构建输出字符串我为此使用英语,因为我不确定您所用语言的措词。我认为您可以比我翻译得更好... [咧嘴]
$ComputerName = $env:COMPUTERNAME
$TimeStamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
$CIM_OS = Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName $ComputerName
$CIM_CS_ProcessorCount = (Get-CimInstance -ClassName CIM_ComputerSystem).NumberOfProcessors
$FreeRAM_Pct = [math]::Round($CIM_OS.FreePhysicalMemory / $CIM_OS.TotalVisibleMemorySize * 100, 2)
$ProcLoad_Pct = [math]::Round(((Get-CimInstance -ClassName CIM_Processor -ComputerName $ComputerName).
LoadPercentage |
Measure-Object -Sum).Sum / $CIM_CS_ProcessorCount, 2)
'Time stamp = {0}; Free RAM % = {1}; Processor load % = {2}' -f $TimeStamp, $FreeRAM_Pct, $ProcLoad_Pct
输出...
Time stamp = 2019-03-06 06:18:04; Free RAM % = 43.61; Processor load % = 5
答案 1 :(得分:1)
您的变量$ c似乎包含空的新行。要快速修复,您可以按以下方式添加修剪功能:
$c = $c.Insert(1,",").trim()
答案 2 :(得分:0)
尝试这种构造:
$a=(Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer | fl *freePhysical* | Out-String).Trim()
或最后一行:
$seperator.Trim() | Out-File -append "D:\Logging\FreeRAM.txt"