Eugh. Configuring Powershell for remote Exchange management

I use a mixture of Mac and Linux for most of my needs. I’ve run Windows virtual machines of same flavour or another but since .NET core 3 landed I’ve barely had to do even fire it up. There’s nowadays very little you can’t do in a non-Windows environment. That doesn’t really extend (yet?) to remote administration of your Office365 tenant using Powershell. I’m trying to configure some DNS bits for one of our domains that needs the Exchange Online V2 Powershell module.

Read more

Basic web scraping with Python: Episode 3!

This is the third edition of this post. It was originally an intro to web scraping with Python (in Python 2) using the Requests library. It was then updated to cover some extra topics and also update for Python 3. The scenario is to download the back catalogue of the excellent MagPi magazine which is published monthly and the PDF is available for free. More info on the background is in the original post. However, since the original post a fair bit has changed: the MagPi website was updated so the scraping broke, Python has moved on and I found that despite downloading the issues, having them on a Pi meant I never actually read them because I forgot they were there!

Read more

Nintex site workflow + lookup columns

Scenario: you have a Nintex workflow and you want to create an item in a list, where one of its column is a lookup column to another list. Background: this took *too* long to figure out. I had an initial version of a workflow; it was actually a list workflow, running on an item which already had the lookup value I needed. Using the ‘Create Item’ action to create an item in a different list (which had the same lookup column) was straight-forward; you simply reference the current item in a list lookup

Read more

ASP.NET Core OAuth Facebook cancel causes 500 fix

If you’re using ASP.NET Core built-in authentication to allow your users to sign up / login to your web application using alternative providers, Microsoft provides various out of the box, such as Microsoft, Google, Twitter and Facebook. Chances are you have something like the following in your startup.cs services.AddFacebook(options=> ...) This works pretty nicely. All you need are you keys and secrets (hello Urban Cookie Collective) and all should rock. However, an issue arises if your user clicks ‘Sign in with ’, which (if they are not already signed-in) takes them to that app to sign in, but if they then cancel that (e.

Read more

Visual Studio regex replace for 7 year old issue...

I still work on a lot of old technology. Today I was updating one of my client’s systems that consumes a (3rd party) web service - the service was moving from -gasp- anonymous auth to requiring a username and password. (Sent in plain text over non-SSL, mind, but… baby steps. I’m guessing this was good enough to close an audit point.) The original implementation used the old Visual Studio ‘Web Service reference’ (for old style SOAP .

Read more

Bulk delete items from SharePoint Document Library with Powershell - with filters

I recently posted some Powershell for bulk / batch emptying a SharePoint document library (https://www.matt-thornton.net/tech/sharepoint/bulk-delete-items-and-folders-from-sharepoint-document-library-using-powershell) which works nicely. (As long as you remember that the Batch Delete XML syntax is incredibly fiddly and sensitive! Case is important and backticks are required to escape stuff.) Anyway; it works great to empty an entire library, but you may prefer to just be tidying up really old stuff. Well, that’s what I was doing anyway, and therefore wanted to expand it a bit.

Read more

Troubleshooting Word Automation Services in SharePoint

Continuing the theme of obscure SharePoint issues; this one on a new topic - Word Automation Services. A client has a new requirement to automate some documents and using Word templates and converting them to PDF all from a Nintex workflow would be… nifty. So away we go. In Word, we created a Word document and then inserted some ‘Content Controls’ - have some options here, but for proof of concept, started with a simple text control.

Read more

Why I hate no-reply / unmonitored inboxes: British Airways

You know the story. You get an email from miscellaneous business that’s trying to coax you in to buying / clicking / agreeing to / on something. You look at the email. You have an issue. You -gasp- reply to the email. And instantly a response back is received - This is an unmonitored inbox. If you wish to contact us, please do so via our website. Or some variant on the above. This is hands-down one of the laziest, most-irritating behaviours these companies can have.

Read more

Ben Nevis, North Face via Tower Ridge

We (my Father and I) ascended Ben Nevis via Tower Ridge on 10th May 2019. We had a pretty hairy experience. I’ve been meaning to write this up since - but things have been busy so it… slipped. But news today that a climber died after being struck by lightning prompted me to do it because… well, read on. Nevertheless, my sincere condolences go out to all those affected by the recent tragedy. The Trip We had only a short trip.

Read more

Basic web scraping - Part 2: thoughts on debugging and Python3

Update: 2020-04-13. The main article has been overhauled and republished here! Includes Python3 updates, Dropbox uploading and a code repo. I’m leaving the below in place for info and posterity and for misc useful tidbits. A while ago, I posted a basic tutorial on how to do some simple web scraping in Python using requests and beautifulsoup. It obviously got found in Google because the hits were good. There were however, a couple of comments highlighting issues with it - Brett and Sean saying issues with “TypeError: ‘NoneType’ object is not callable”

Read more