首页 > 解决方案 > Powershell - 实时获取昨天的文件名

问题描述

我是 PowerShell 中的菜鸟,并试图用它来发送带有附件的电子邮件。

今天的日期是 2021-02-18。我有一个文件夹,里面有很多ERP系统每天创建的文件,文件名如下:

2021-2-17WO_rate.xlsx
2021-2-16WO_rate.xlsx
2021-2-15WO_rate.xlsx
2021-2-14WO_rate.xlsx
2021-2-13WO_rate.xlsx
2021-2-12WO_rate.xlsx
...

我希望脚本总是选择最新的文件作为附件

(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')可以得到昨天的日期,但是当我将它集成到下面的脚本中时,它失败了。在搜索了许多网站后,我不知道如何解决它。

任何人都可以帮助我吗?非常感谢。

我使用的代码如下:

$UserName = "XXXX@XXXXX.com"      
$Password = ConvertTo-SecureString XXXXXX -AsPlainText –Force
$cred = New-Object System.Management.Automation.PSCredential($UserName,$Password)
$a = (Get-Date).AddDays(-1).ToString('yyyy-MM-dd')


$mailParams = @{
    SmtpServer                 = 'smtp.office365.com'
    Port                       = '587' # or '25' if not using TLS
    UseSSL                     = $true ## or not if using non-TLS
    BodyasHtml                 = $true
    Credential                 = $cred
    From                       = $UserName
    To                         = 'XXXXXX'
    Subject                    = "WORK ORDER STATUS"
    Body                       = 'XXXXXXX'
    Attachments                = '\\us-fs\us-Groups\Operationsus\Public\erpoutput\date\${a}WO_rate.xlsx'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}
Send-MailMessage @mailParams

标签: powershell

解决方案


名称未填充的原因是因为您使用了单引号'。如果要从变量中获取值,则需要使用双引号字符串"

<# Only relevant parts of the script, other lines removed #>

# Specify correct formatting string, based on the information from the question it should be either
$dataFormat = 'yyyy-M-d'
# or
$dataFormat = 'yyyy-M-dd'

$formattedDate = (Get-Date).AddDays(-1).ToString($dataFormat)


$mailParams = @{
    <# other params #>
    Attachments                = "\\us-fs\us-Groups\Operationsus\Public\erpoutput\date\${formattedDate}WO_rate.xlsx"
}
Send-MailMessage @mailParams

注意:我还更改了变量名,以便清楚它的用途。


编辑:根据@Theo的评论更正日期格式


推荐阅读