как получить вывод командлета get-item в переменную в виде строки - PullRequest
3 голосов
/ 17 февраля 2011

Я имею в виду, когда я вызываю get-item с каталогом, он выводит на консоль вот так

    ----                -------------     ------ ----
d----         2/16/2011   8:27 PM            2011-2-16
-a---         2/13/2011   8:24 PM 3906877184 SWP-Full Database Backup_2011-02-13
                                           0
-a---         2/16/2011   8:23 PM 3919766476 SWP-Full Database Backup_2011-02-16.bak
                                           8
-a---         2/12/2011   8:18 PM 3906877747 SWP-Full Database Backup_2011-02-12
                                           2
-a---         2/14/2011   8:21 PM 3875484467 SWP-Full Database Backup_2011-02-14
                                           2

но когда я конвертирую в строку, она меняется как

\\192.168.2.89\BwLive\2011-2-16 \\192.168.2.89\BwLive\SWP-Full Database Backup_2011-02-13 \\192.168.2.89\BwLive\SWP-Full
 Database Backup_2011-02-16.bak \\192.168.2.89\BwLive\SWP-Full Database Backup_2011-02-12 \\192.168.2.89\BwLive\SWP-Full
 Database Backup_2011-02-14

я имею в виду атрибуты длины, размера, времени опущены Как я могу сохранить эти атрибуты при преобразовании в строку?

спасибо.

Ответы [ 2 ]

6 голосов
/ 17 февраля 2011

Если я понимаю, что вы ищете, это должно сработать:

$a = get-childitem <filespec> |
  select name,length,lastwritetime |
   format-table | out-string

Затем вставьте $ a в свое тело письма.

3 голосов
/ 17 февраля 2011

Вам следует изучить различные параметры, которые Powershell предоставляет вам для форматирования результатов, которые вы получаете из конвейера.

Если вы объявите строковую переменную для последующего использования в качестве тела электронной почты, вы получите тот же формат, что и для вывода на консоль. Следующие

$body = Get-ChildItem | Out-String

Вы можете настроить свой результат, добавив Format-Table CmdLet:

$body = Get-ChildItem | Format-Table -Property Name, Length | Out-String

Ваш скрипт для отправки может выглядеть примерно так

$body = Get-ChildItem | Format-Table -Property Name, Length | Out-String

$SmtpClient = New-Object System.Net.Mail.SmtpClient
$MailMessage = New-Object System.Net.Mail.MailMessage

$SmtpClient.Host = "my.smtp.host.com"
$MailMessage.from = "sender@acme.com"
$MailMessage.To.Add("me@acme.com")
$MailMessage.Subject = “Verzeichnisinhalt”
$MailMessage.IsBodyHtml = $false
$MailMessage.Body = $body
$SmtpClient.Send($MailMessage)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...