在Powershell变量中使用通配符

时间:2019-02-05 15:52:41

标签: powershell variables wildcard

我有一个包含每周报告的文件夹。每个报告在名称示例“ report-A_2_05_19.pdf”,“ report-B_2_05_19.pdf”等中都有创建日期。我想为其创建变量,但是由于日期会每周更改报告的名称我正在尝试这样做:

$rA = "c:\reports\report-A*.pdf"
$rb = "C:\reports\report-B*.pdf

执行此操作并尝试使用通配符打开报告时,它只会打印到屏幕上:

  

c:\ reports \ report-A * .pdf

$pw = Get-Content C:\MailPW.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential name@domain.com, $pw
Send-MailMessage -To name@domain.com -from name@domain.com -Subject "Attachments" -Body "Attachments." -attachments $rA, $rB -Smtpserver mail.domain.com -UseSsl -credential $cred

1 个答案:

答案 0 :(得分:1)

如果查看Send-MailMessage的文档,您会发现-Attachments 不支持通配符

  

类型:字符串[]

     

别名:PsPath

     

位置:已命名

     

默认值:无

     

接受管道输入:True(ByValue)

     

接受通配符:错误

因此,您可以做的是合并Resolve-Path,它从通配符字符串推断出路径。

Send-MailMessage .... -attachments (Resolve-Path $rA, $rB).Path

请注意,这可能比您预期的要匹配。在附加文件之前,您可能需要验证结果。


当提供大量参数和值时,我也建议使用splatting

$sendMailMessageParameters = @{
    To          = "name@domain.com"
    from        = "name@domain.com" 
    Subject     = "Attachments" 
    Body        = "Attachments." 
    attachments = (Resolve-Path $rA, $rB).Path
    Smtpserver  = "mail.domain.com "
    UseSsl      = $true
    credential  = $cred
}

Send-MailMessage @sendMailMessageParameters