如何将get-item cmdlet的输出作为字符串输出到变量

时间:2011-02-17 07:24:36

标签: .net powershell

我的意思是当我用目录调用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 个答案:

答案 0 :(得分:6)

如果我理解你所追求的是什么,这应该有效:

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

然后将$ a放入您的电子邮件正文中。

答案 1 :(得分:3)

您应该查看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)