2017-09-14 8 views
1

Powershellを使用してSQL ServerデータベースでSQLクエリを実行し、その結果をExcelスプレッドシートに出力しています。PowerShellの出力ファイルで先月の名前を使用する

それは、現在、私は手動でworksheetnameを内、およびファイル名に、SQLクエリで日付フィルタを指定していますので、正常に動作している

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 

を経由して出力します。

このプロセス全体を自動化して、毎月1日に実行し、前月全体をレポートすることを目指します。

私は今月のフィルタリングのためにSQLクエリを変更しましたが、出力ファイルのワークシートとファイル名に前の月の名前を含めることができます(たとえば、それは今日)。

私は

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 

を試みたが、それは動作しません。有効なDateTimeではない文字列に関するエラーが表示されます。

どこが間違っていて、どうすればよいですか?

答えて

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 

に変更します。あなたは-Formatパラメータを使用することはできませんので、日付を取得

(Get-Date).AddMonths(-1).ToString('MMMM') 

は、その後、その後、テキストにそれを変換する日時の方法を使用して、その戻り値にAddMonthsを呼び出しますここでは、コマンドレットの呼び出しが以前に終了したためです。

+0

+1。 'Get-Date'(すなわち'(Get-Date).AddMonths(-1)| Get-Date -Format 'MMMM'')の2回目の呼び出しで '-Format'を使用することもできます。 '.ToString()'を呼び出すと簡潔になります。 – BACON

+2

@BACONもし簡潔にしたいなら、 'date |%* hs -1 |%* ost * MMMM';) – TessellatingHeckler

+0

答えと説明をありがとう。私はほとんどのスクリプトでアマチュアなので、これは大いに役立ちます! –

関連する問題