Назад | Перейти на главную страницу

Powershell - электронная почта с информацией о свободном пространстве

я сейчас использую:

$emailFrom = "user@host.com"
$emailTo = "destination@host.com"
$subject = "subject"
$body = "message"
$smtpServer = "mail.host.com"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)

и я знаю, что с помощью следующей команды я могу узнать свободное место на всем моем жестком диске:

Get-WmiObject WIN32_logicaldisk | sort -desc freespace | select -first 3 | format-table -autosize deviceid,devicetype,providername,freespace,size,volumename;

когда я пытаюсь сделать это:

$body = Get-WmiObject WIN32_logicaldisk | sort -desc freespace | select -first 3 | format-table -autosize deviceid,devicetype,providername,freespace,size,volumename;

но все, что я получаю по электронной почте, это следующее:

    Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData 
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData

как я могу получить свободное место по электронной почте с помощью PowerShell ???

Пытаться:

$ body = Get-WmiObject WIN32_logicaldisk | sort -desc freespace | select -first 3 | формат-таблица -autosize идентификатор устройства, тип устройства, имя провайдера, свободное пространство, размер, имя тома | вне строки

Я только что попробовал это на своем ПК, и это сработало.

Чтобы узнать, почему это работает, см .:

http://blogs.msdn.com/powershell/archive/2006/04/25/how-does-select-string-work-with-pipelines-of-objects.aspx

JR

Вы можете попробовать это:

$body_array = Get-WmiObject WIN32_logicaldisk | sort -desc freespace | select -first 3 | format-table -autosize deviceid,devicetype,providername,freespace,size,volumename;
$body = $body_array.ToString();

Вы могли бы адаптироваться из моего сообщения в эта тема.

PowerShell берет поток объектов из Get-WMIObject, сортирует и выбирает подмножество, а затем создает текстовое представление остальных объектов, а не просто работает с чистым текстом. Если вы хотите получить чистое текстовое воспроизведение, вы можете просто изменить свой вызов на format-table, чтобы вместо этого использовать select-object.