Ошибка Powershell: указанное приведение не является допустимой ошибкой при Get-Date - PullRequest
1 голос
/ 07 марта 2019

Я создаю сценарий для чтения данных процессора и памяти за определенное время и экспортирую их в электронную таблицу Excel.

Кажется, что все работает правильно, пока не дойдет до "$ sheet.Cells.Item ($ rowStartTime + $ i, $ colStartTime) .value = $ StartTime", где я публикую дату и время в ячейке.

Я протестировал изменение переменной $ StartTime для строки, такой как «TIME», и она записывает в ячейку, но если я это сделаю и $ StartTime = $ StartTime.ToString (), я получу то же самое «Указанное приведение недействительно"ошибка, что заставляет меня думать, что проблема может быть связана с форматом даты.

Ниже сценария приветствуется любая помощь.

$timeout = new-timespan -Minutes 10
$file = "C:\Users\i859241\Desktop\resultilz.xlsx"
$sheetName = "UNO"

$objExcel = New-Object -ComObject Excel.Application
$workbook = $objExcel.Workbooks.Open($file)
$sheet = $workbook.Worksheets.Item($sheetName)
$objExcel.Visible=$false

$i=0
$rowStartTime,$colStartTime = 2,1
$rowCPULoad,$colCPULoad = 2,2
$rowpctFree,$colpctFree = 2,3

$sw = [diagnostics.stopwatch]::StartNew()
Get-WmiObject -Class Win32_logicaldisk
while ($sw.elapsed -lt $timeout){

    $StartTime = Get-Date
    $os = Get-Ciminstance Win32_OperatingSystem
    $CpuLoad = (Get-WmiObject win32_processor | Measure-Object - 
    property LoadPercentage -Average | Select Average ).Average
    pctFree =[math]::Round(($os.FreePhysicalMemory/$os.TotalVisibleMemorySize)*100,2)


    Write-Host $StartTime, $pctFree, $CpuLoad

    $sheet.Cells.Item($rowStartTime+$i,$colStartTime).value = $StartTime
    $sheet.Cells.Item($rowCPULoad+$i,$colCPULoad).value = $CPULoad
    $sheet.Cells.Item($rowpctFree+$i,$colpctFree).value = $pctFree

    start-sleep -seconds 2
}
write-host "Timed"
$workbook.save()
$workbook.close()
$objExcel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel)
Stop-Process -Name EXCEL -Force

1 Ответ

0 голосов
/ 11 марта 2019

Попробуйте:

$timeout = new-timespan -Minutes 10
$file = "C:\Temp\resultilz.xlsx"
$sheetName = "UNO"

$objExcel = New-Object -ComObject Excel.Application
$workbook = $objExcel.Workbooks.Open($file)
$sheet = $workbook.Worksheets.Item($sheetName)
$objExcel.Visible=$false
$row=1

$sw = [diagnostics.stopwatch]::StartNew()

while ($sw.elapsed -lt $timeout){

    $StartTime = Get-Date
    $os = Get-Ciminstance Win32_OperatingSystem
    $CpuLoad = (Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Select Average ).Average
    $pctFree =[math]::Round(($os.FreePhysicalMemory/$os.TotalVisibleMemorySize)*100,2)

    Write-Host $StartTime, $pctFree, $CpuLoad

    $sheet.Cells.Item($row,1).value = [string]$StartTime
    $sheet.Cells.Item($row,2).value = [string]$pctFree
    $sheet.Cells.Item($row,3).value = [string]$CpuLoad
    $row++

    start-sleep -seconds 2
}
write-host "Timed"
$workbook.save()
$workbook.close()
$objExcel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel)
Stop-Process -Name EXCEL -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...