目前,我正在使用Powershell在SQL Server数据库上运行SQL查询,并将结果输出到Excel电子表格。
目前通过
输出Dictionary<string,object>
工作正常,因为我在SQL查询,WorksheetName和文件名中手动指定了日期过滤器。
我的目标是使整个过程自动化,使其在每个月的第一天运行并报告整个上个月。
我现在已经修改了我的SQL查询以过滤上个月,但是我想让输出文件的工作表和文件名只包含上个月的名称(例如,如果我运行它,则为“August”)今天)。
我试过
invoke-sqlcmd -inputfile "C:\scripts-and-reports\all_new-matters-since-last-run.sql" -serverinstance "PE-SERVER\PRACTICEEVOLVE" -database "PracticeEvolve_c1" |
Select-Object * -ExcludeProperty "RowError","RowState","Table","ItemArray","HasErrors" |
Export-XLSX -WorksheetName "15-05-2017 to $(get-date -f dd-MM-yyyy)" -Path "C:\scripts-and-reports\15-05-2017 to $(get-date -f yyyy-MM-dd) Taree PE new clients.xlsx" -Force -Verbose
但它不起作用。我收到有关字符串不是有效DateTime的错误。
我哪里出错了,它应该是什么?
答案 0 :(得分:7)
get-date AddMonths(-1) -f MMMM
这一行是不同语法的混合,并不适合。
Get-Date is a cmdlet which takes a parameter -Format which can be shortened to -f
Get-Date returns a [datetime] object
.AddMonths() is a method on a [datetime] object, not a parameter to Get-Date
更改为:
(Get-Date).AddMonths(-1).ToString('MMMM')
获取日期,然后在该返回值上调用AddMonths,然后使用datetime方式将其转换为文本,因为您不能在此处使用-Format
参数,因为cmdlet调用已在之前完成。 / p>