Необходимо отправить информацию о процессоре и памяти в лист Excel - PullRequest
0 голосов
/ 31 октября 2019

Я автоматизирую проверку работоспособности некоторых серверов Windows. Я очень новичок в PowerShell (началось сегодня).

Я хочу, чтобы загрузка ЦП и памяти сервера Windows в одно мгновение записывалась в книгу Excel на разных листах. После поиска в Google и проверки документов я нашел команды для получения этих данных с использованием классов Win32_processor и win32_operatingsystem.

Я использую командлет Export-CSV, который напрямую копирует выходные данные в excel.

Я использую командлет New-Object и создал psobject, чтобы оба вывода были добавлены к свойству, а затем вставлены в Excel.

$Memory = gwmi win32_operatingsystem | Select-Object @{Name = "MemoryUsage"; Expression = {"{0:N2}" -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize) }}
$CPU = gwmi win32_processor | Measure-Object -property LoadPercentage -Average | Select Average
$Props = @{"Memory"= $Memory ; "CPU Utilization" = $CPU}
$Mydata = New-Object -TypeName psobject -Property $Props
$MYdata | Export-Csv C:\Users\Mitu\Desktop\output-excel.csv -nti

Есть ли другой способ добиться этого?

Кроме того, я хочу отправить этот CSV на наш электронный идентификатор. Какие вещи необходимы для достижения этой цели с помощью powershell?

1 Ответ

1 голос
/ 31 октября 2019

Я бы сказал, что лучший способ сделать что-то подобное - это тот, который дает вам честный результат, быстро, без большой нагрузки на систему.

Сказав это, есть несколько вещей, которые яЯ не уверен, что понимаю. Это моментальный снимок общего использования свободной оперативной памяти и процессора за последнюю секунду - я не уверен, что данные будут особенно полезны. Даже запуск нескольких вкладок Chrome может кардинально изменить его.

Когда один из наших специалистов хотел что-то похожее сегодня (некоторые серверы вышли с неправильно настроенными сетевыми картами), я помог ему написать очень похожий сценарий - за исключением того, что он его кормилсписок из 450 машин, и он сделал запрос WMI удаленно. Мне также нравится использовать Get-WmiObject .

Наконец, мне лично не безразлична идея отправки этих данных по электронной почте - кому-то придется читать все эти письма и приниматьдействие. Я предпочел бы записать его в базу данных SQL или, по крайней мере, зарегистрировать его в CSV на общем файловом ресурсе.

Сказав все это, введите этот список имен компьютеров и обновите последнюю строку с помощьюадреса электронной почты и SMTP-сервер, и запустите его с учетной записью, имеющей права на удаленные компьютеры (… и права на отправку электронной почты на ваш сервер), и он должен выполнить запросы WMI на всех компьютерах, выбросить результаты в одинCSV-файл и отправьте его вам по почте.

$computers = Get-Content -Path "ListOfcomputers.txt"

foreach ($computer in $computers) {
    $Memory = Get-WmiObject win32_operatingsystem -ComputerName $computer| Select-Object @{Name = "MemoryUsage"; Expression = {"{0:N2}" -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize) }}
    $CPU = Get-WmiObject win32_processor |  Select-Object -property LoadPercentage 
    $Props = @{"Memory"= $Memory.MemoryUsage ; "CPU Utilization" = $CPU.LoadPercentage}
    $Mydata = New-Object -TypeName psobject -Property $Props
    $MyData
    $MYdata | Export-Csv "output-excel.csv" -Append 
}

Send-MailMessage -From 'Script <Script@Example.com>' -To 'User <user@Example.com>', 'User 2 <user2@Example.com>' -Subject 'Sending the Report' -Body "Here's the report" -Attachments "output-excel.csv" -SmtpServer 'smtp.example.com'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...