iT邦幫忙

0

Powershell 每月最後一個工作日跟日期格式

各位大大好,
小弟公司在每個月會將共用區的暫存資料夾清空,
清空前會發一個通知信給全公司,

小弟想將這個流程給自動化,
所以使用Powershell去執行發信這個工作,

以下是我的腳本:

$smtpServer = "192.168.1.205"
$smtpFrom = "mis@domain.com"
$smtpTo = "alluser@domain.com"
$messageSubject = "暫存區清理通知"
$MonthDate = (Get-Date 0).AddYears((Get-Date).Year - 1).AddMonths((Get-Date).Month).AddDays(-1).AddHours(17)

$AppName = "Dear all,<br>
本月暫存區清除時間:<span style='font-family:Verdana;font-size:16pt;font-style:italic;'><b><font color='FF0000'>$MonthDate</font></b></span><br>
若有問題,請洽MIS,感謝大家的配合。"

$body = "$AppName"
Send-Mailmessage -smtpServer $smtpServer -from $smtpfrom -to $smtpTo -subject $messageSubject -body $body -bodyasHTML -priority High -Encoding ([System.Text.Encoding]::UTF8)

這是實際信件的內容:

本月暫存區清除時間:10/31/2021 17:00:00
若有問題,請洽MIS,感謝大家的配合。

小弟有以下兩個問題想麻煩各位大大解惑 :

  1. $MonthDate 只想抓取每月的最後一個工作日(一~五)的下午17:00
    (EX: 10月就是10/29。)

  2. 日期格式希望能是這樣子 2021/10/31 17:00

麻煩各位大神了

哇喔! 我家的IT都寫不出來這些程式碼了。通常應用到工作日的情境要考慮週休兩日、國定假日、彈性休假、調假上班、公司日。我的小愛同學鬧鐘10/1的鬧鐘就沒給我響害我睡過頭。總之,比較彈性的作法是是參考到一個行事曆,這行事曆最好還是公示的由人資維護。就懶人作法就每月1日凌晨整點清零,再加上前1小時到前1日發系統計畫維護通知來教育使用者是最簡單實用不找碴的方法了。

1 個回答

1
nwm310
iT邦新手 4 級 ‧ 2021-10-19 09:20:32
最佳解答
$a = (Get-Date -Day 1 -Hour 17 -Min 0).AddMonths(1).AddDays(-1)

if ($a.DayOfWeek -eq 6) {$a = $a.AddDays(-1) }
if ($a.DayOfWeek -eq 0) {$a = $a.AddDays(-2) }
$s = $a.ToString('yyyy/MM/dd HH:mm')

Write-Host $s
pause

我要發表回答

立即登入回答