2017-09-14 36 views
1

此刻我正在使用Powershell在SQL Server數據庫上運行SQL查詢並將結果輸出到Excel電子表格中。在PowerShell輸出文件中使用上個月的名稱

目前,它通過

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 

這是工作的罰款,因爲我手動指定在SQL查詢日期過濾器,在WorksheetName輸出,並在文件名。

我的目標是使整個過程自動化,以便它在每個月的第一天運行並報告整個上個月。

我現在已經修改了我的SQL查詢來篩選上個月,但是我希望輸出文件的工作表和文件名只包含上個月的名稱(例如,如果我正在運行「August」它今天)。

我已經試過

invoke-sqlcmd -inputfile "C:\scripts-and-reports\all_new-matters-for-last-month.sql" -serverinstance "PE-SERVER\PRACTICEEVOLVE" -database "PracticeEvolve_c1" | 
    Select-Object * -ExcludeProperty "RowError","RowState","Table","ItemArray","HasErrors" | 
    Export-XLSX -WorksheetName "$(get-date AddMonths(-1) -f MMMM)" -Path "C:\scripts-and-reports\$(get-date AddMonths(-1) -f MMMM) Taree PE new clients.xlsx" -Force -Verbose 

,但它不工作。我收到有關該字符串不是有效日期時間的錯誤。

我哪裏錯了,它應該是什麼?

回答

6
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,然後使用該轉換爲文本的日期時間的方式,因爲你不能使用-Format參數在這裏,因爲cmdlet調用較早完成。

+0

+1。我們可以在第二次調用'Get-Date'(即'(Get-Date).AddMonths(-1)| Get-Date -Format'MMMM'')時使用'-Format' ...但這並不完全簡潔的調用'.ToString()'。 – BACON

+2

@BACON如果你想簡潔..'日期|%* hs -1 |%* ost * MMMM';) – TessellatingHeckler

+0

感謝您的答覆和解釋。我是大多數腳本的業餘愛好者,所以這非常有幫助! –

相關問題