3 ms·
If you convert to CSV, emailing the non-payers is a one-liner in Powershell. Even converting the XLSX to CSV is pretty easy with the Excel .NET libraries, and w
by stephengillie 10y ago
If you convert to CSV, emailing the non-payers is a one-liner in Powershell. Even converting the XLSX to CSV is pretty easy with the Excel .NET libraries, and well-documented in blog posts and StackOverflow.
Sometimes, the bigger challenge with automation is getting users to see a service, function, or utility as the underlying algorithms and calls, and not as this immutable black box interface. Once viewed this way, it's easier to separate automation into more easily defined goals.
---
Foreach ($nonpayer in (Import-CSV ("C:\billing\" + (get-date -F MM) + ".CSV") | where {$_.pmt -eq 0})) { Send-MailMessage -from Billing@example.com -to $nonpayer.email -SMTPserver relay.example.com -title " Payment Overdue" -body "Hello $($nonpayer.first-name), your payment for $(get-date -f MMMM) was not received. Please send payment today."};
(I wrote this on the bus on my phone)
- kazinator 10y agoYou probably don't want to be hard-coding the address of your SMTP forwarding host in a script. If you have to change to a different one, you will have to hunt down this sort of usage and fix it.
- stephengillie 10y agoYes, but if it weren't hard-coded, it wouldn't count as being a one-liner. ;) Besides, it's rare for DNS names to change; the point of DNS is the underlying server addresses can change without changing the name. And a service like SMTP relay should be less likely to change than other types of host. But still, good point. This could easily be a Param if the function would be used in many environments.
- kazinator 10y agoOh the DNS name will change if you use your ISP-provided SMTP server and you change your ISP from Acme Internet Services to A-1 Networks. :)
- stephengillie 10y agoAh, that's exactly the kind of situation where you'd want a param with a default. As an example: PS C:\> New-Parameter SMTPSvr -TopHeader -BottomHeader -ParameterType string -DefaultValue "mail.example.com" Param( [string]$SMTPSvr = "mail.example.com" ) #end Param