CIAOPS Need to Know Microsoft 365 Webinar – June

laptop-eyes-technology-computer

Join me for the free monthly CIAOPS Need to Know webinar. Along with all the Microsoft Cloud news we’ll be taking a look at Microsoft Teams.

Shortly after registering you should receive an automated email from Microsoft Teams confirming your registration, including all the event details as well as a calendar invite.

You can register for the regular monthly webinar here:

June Webinar Registrations

(If you are having issues with the above link copy and paste – https://bit.ly/n2k2206 – into your browser)

The details are:

CIAOPS Need to Know Webinar – June 2022
Friday 24th of June 2022
11.00am – 12.00am Sydney Time

All sessions are recorded and posted to the CIAOPS Academy.

The CIAOPS Need to Know Webinars are free to attend but if you want to receive the recording of the session you need to sign up as a CIAOPS patron which you can do here:

http://www.ciaopspatron.com

or purchase them individually at:

http://www.ciaopsacademy.com/

Also feel free at any stage to email me directly via director@ciaops.com with your webinar topic suggestions.

I’d also appreciate you sharing information about this webinar with anyone you feel may benefit from the session and I look forward to seeing you there.

Every business today is a software business

pexels-pixabay-270348

Following on from a post I wrote recently:

We all need to automate more

I’d like to continue my musing about the challenge of finding qualified staff, especially if you are a technology provider.

Traditionally, IT Providers have looked for staff that can perform a certain defined role in their business and that has kind of been where it ends. When that person leaves, they need to find a similar soul to replace them. There ain’t much leverage here if we are honest is there? Technology and technology businesses should be about leverage.

The main fault lies with the skill set that IT providers are recruiting for these days.

A very famous tech luminary wrote an article back in 2011 called:

Why software is eating the world

and if you haven’t read it, you should. You should also be mindful of that fact that it is now over ten years old! Given that context, I feel pretty confident in saying that EVERY business is in fact a software business today. Every business relies more on IT systems that it ever has and the core of IT systems is software NOT hardware or infrastructure. Problem is, most business don’t yet realise they ARE a software business!

So why is it that most IT businesses recruit people for old world hardware and infrastructure roles? Don’t they realise the world has well and truly been eaten now it is 2022? Perhaps a reason they can’t successfully recruit is what they consider ‘suitable’ candidates has moved on so much from such traditional roles to roles that embrace what modern technology is all about today. Software. Perhaps the reason people can’t be found is that no one wants those traditional roles anymore! Maybe?

In essence, any modern role, especially in industries that provide technology services should include software as a core capability, most importantly, the ability to code. No, I am not saying that everyone needs to be a C sharp developer. What I am saying that our world today is built on code and it takes people who understand that and can speak that language to successfully support it. The past is about speed and feeds, aka hardware. That is now pretty much an arcane ancient language. Bandwidth is the principal commodity of the modern workplace not CPU speed or RAM.

A traditional IT provider should therefore be looking for DevOps people. Those that can do the IT operations, create users, reset passwords, etc as infrastructure types have done for years but also be comfortable with creating automation processes and scripting to reduce the precious amount of human capital that needs to be invest to achieve these aims.

Another benefit of employing DevOps types is that the code they develop can be leveraged across many customers, unlike their time. A typical infrastructure tech is limited to a fixed linear set of tasks between certain times in a day. Code however, can run constantly across multiple environments with minimal human interaction.

Still further, when a DevOps type leaves the organisation their code stays with the organisation, whereas when a traditional infrastructure technician leaves they leave no real value beyond their actual time in the business. That is not playing smart business in my books, that is simply trying to throw resources at a problem which you can never win, because you are always going to have to replace the resource at some point in time. That situation has taken many business this long to realise. Problem is, now they have, they are not well placed to deal with it. All they can do is scramble for more resources which are becoming scarcer everyday. In short, your staff are going to move on, that is a fact. You will need to replace them. Is your only solution simply to replace staff as they leave with similar candidates? That isn’t a game you can win because you’ll always be time poor when recruiting and never find an exact replacement, and even if you do, that replacement could resign immediately and you are again faced with the same dilemma. What’s the definition of insanity again?

I think another reason why so few people want to do traditional IT infrastructure work is that it is purely and simply ‘slog’ work. By this I mean that your reward for closing a trouble ticket is, guess what? Another trouble ticket and then another and then another at infinitum. If you want to disincentivise  and burn people out, keep giving the same grinding work over and over again like trouble tickets. Most IT managers would hate that themselves yet they enforce it on their subordinates. To me, that is utter madness because you are treating people like machines and to my knowledge we should have all left that behind in the Victorian age!

An emphasis on code and software allows expression, it allows the human brain to to what it is good for. To create, to be imaginative and innovate. Most people entering the workplace are more digitally native than any previous generation. They have grown up with technology and the Internet. They don’t fear the technology but most businesses today still constrain their workers by time management methodologies rather than measuring them on result based outcomes. Most are more comfortable seeing workers put in the ‘hours’ (whether or not they are being efficient is irrelevant, as long as they are visibly burning time is the key) rather than providing incentives based on outcomes (like say adding value to a customers business). Again, pure and utter madness in our modern technology landscape.

Anyone today who as even a slight interest in IT is going to be into software and coding as they should be. In fact, EVERYONE, yes EVERYONE needs to learn how to code. It is the language of our age. This, as I said earlier, doesn’t mean you need to be a developer. What it does mean is that you have a greater array of tools you can use to solve problems for one piece of code can build on another and be shared with others thereby leveraging the initial input invested to create it.

Software is a problem solving tool that should be part of everyone’s professional skills. It ain’t hard. There is so much free stuff out their on the myriad of languages available to code in. BASIC, PowerShell, C++, Java, and so on, and so on. Just go to Youtube and you’ll find someone willing to teach you code. The more time you spend learning and implementing code, the better you’ll get at it. Coding is a skill, it ain’t a talent. Everyone who already codes at some point learnt how to code, they weren’t born with the ability to write quality Python out of the womb!

If your are selling your skills into today’s market, skill up on programming. Even knowing Excel macros is going to put you at least one step in front of your competition who can’t code. Because, if you can’t code you’ll be consigned to role where people take advantage of your time not you brain. In essence, you are trading your personal time for money and no matter what they pay you, that transaction is never enough as you’ll never get your time again.

So ask yourself the question, have I (and the business I may run) truly embraced the modern technology world that software has ‘eaten’ or are you living in the past hoping to trade time for money? Because if you are living in the past still, eventually the appetite of software will catch up with you and automate what you do faster, better and cheaper than you ever could. Where will that then leave you?

If you own a business, you should looking for people who support this model. That is, those who are software aware. Those who can use software to solve problems better than anyone else. Allow them to unleash the true capabilities of the human mind rather than constraining them to a treadmill of endless problem tickets. We want creators, not biological robots to burn out and throw away. That means businesses need to create the environments to support this. Look around and ask yourself whether your business today truly supports that environment. I’d have a guess and say that it probably doesn’t. You better watch out then, the software tyrannosaurus rex now roams freely.

We all need to automate more

A common challenge today many business, including IT resellers, face is the lack of suitably qualified staff. There seems little doubt this situation will continue for an extended period due to various reasons. However, I believe the situation has been greatly exacerbated by many businesses failing to truly embrace the power of automation, especially IT automation, in their business.

A common process I see in many businesses undertake is simply adding more technology without the drive for improved effectiveness. Many business seem to add more technology because they ‘believe’ it will make them more effective. However, unless there is a plan and desire to become more effective it rarely happens. In reality what happens is, they become less effective, as technology systems add increased burdens, costs and demand more resources. In many cases, they make things far worse and introduce more inefficiencies due to complexity and a lack of integration.

If you take a step back and look at the wider picture here, it was a common belief that computers and technology systems in general would remove the mundane burden of repetitive and undesired work in our society. However, if you look around today most people and businesses are far more stressed, are far more ‘time poor’ than they have even been and yet we have all this wonderful and powerful technology at our finger tips. We carry super computers in our pocket, but when was the last time everyone turned up to a meeting on time?

One of the reasons I suggest is that fact that most are merely using the ‘system default’ configuration that comes with any technology. They don’t invest in learning and exploring how to make the technology work best for them. Technology developers can only supply their products with a single configuration that ‘hopefully’ suits most users. That is rarely the case. Unfortunately, merely ‘accepting the defaults’ leads to inefficiencies which leads to being more time poor, which leads to less time being available to learn and optimise technology, which leads to merely ‘accepting the defaults’…. and so on through an ever more inefficient spiral.

Another reason is the fact that today we live a very much ‘now’ society. People don’t want to wait. They want instant gratifications. The days of investing for the long term no longer take primacy, which is strange, given that things like compound interest have been referred to by some pretty smart people as the eighth wonder of the world.

“Compound interest is the eighth wonder of the world. He who understands it, earns it … he who doesn’t … pays it.”

― Albert Einstein

Unfortunately, this fallacy of constant technology efficiency is unlikely to change. I would actually contend that it is, in fact, only going to accelerate. That, however, does present an opportunity for those who are prepared to invest some time and truly take advantage of what things like automation can achieve.

I like to think of technology automation along a spectrum. In the past, we have had things like scripting such as PowerShell that provides a huge mount of leverage. You can write a PowerShell script to do just about anything in the Microsoft environment these days. It allows a single person to obtain a consistent result once it has been developed. The problem is however, someone still needs to run that script. If an IT reseller is managing an environment for a customer, that customer can’t run the script themselves, they need to get the IT reseller to run that script. That is still not as efficient as it could be. It also centralises the power of automation, placing it in the hands of a small, technically savvy audience.

Next on this spectrum is the automation we see today in technologies like the Power Platform that allow an army of citizen developers to easily create ‘low-code’ solutions for business challenges. This means that most customers using Microsoft 365 have this capability. You can also see Microsoft raising the awareness of this audience to the possibilities without the need for dependencies on IT resellers to run these automation processes. Sure, they solutions developed by ‘citizen developers’ may not be as elegant as those created by a skilled developer, but does that really matter any more if it gets the job done? A growing army of people entering the workplace are ‘digitally native’ and more than willing to ‘try’ technology. By doing so, using the Power Platform, they are not only solving business challenges but they are increasing their own skill and career value.

Where I think we are going is to a world where automation are wrapped up inside a bot or something like Power Virtual Agents. Recently, I wrote this article:

Automated user tenant access control

In essence, it allows you to control when users can login to a Microsoft 365 tenant. Even thought this solution was created using Power Automate, it still needs someone to execute it if perhaps you wanted to use it when an employee goes on leave. The friction is much lower than using a PowerShell script, but it still could be better.

Think about wrapping this tenant access control solution inside a Power Virtual Agent bot and having that published to a channel in Teams. Then, when a user wants to take leave, they converse with the bot for approvals as well as automating the process of denying access while they are away. The bot can ensure that all the correct information is collected and correct processes are followed and documented, every time! Most importantly, this puts the power of automation in the hands of the people that use it. Using a bot, it does this in a friendly a conversational manner. It doesn’t introduce IT complexity to scare the end user away from actually using it. There are lots and lots of benefits.

The good news is that there are already lots of automation options you can take advantage of. The bad news is that you are unlikely to using them enough in your business. A modern approach to staff shortages shouldn’t be ‘where do I get good staff’. Instead, it should be ‘how can I automate more to reduce that dependency’.

Without doubt, the best place to start for most ‘non-IT’ types is the Power Platform in Microsoft 365. Yes, there is an upfront investment to be made, but like compound interest it will produce significant returns over time.

There are real opportunities for smart businesses to leverage the automation capabilities already inside most systems today. These are available to all but the smart ones will take them, implement and transform their impact on the market and their own businesses. Let’s put technology to work to do thing it supposed to do. That is, to make our lives easier and better, not simply as adding more that we don’t need. Simplicity is truly the effectiveness superpower.

Using Power Automate to send SMS

I recently had the need to send an SMS programmatically. The reason I wanted to be able to do this si because Microsoft Bookings currently doesn’t send SMS reminders to attendees of a booking outside the US. That means, here in Australia, I needed to add the capability via another SMS integration option.

The most obvious choice, once again, is Power Automate. To handle the SMS component I needed to work with a SMS provider. The one who came to party was Mondotalk.

The first step was to consult the Mondotalk API to discover how to send an SMS using code. Luckily, their documentation contained a handy PowerShell script:

$messagebody1 = @{

id = $id

key = $key

username = $username

password = $password

to = “<phone>”

sender = “<phone>”

msg = “hello world”

replyto = director@ciaops.com

}

$url = <API url>

Invoke-RestMethod -Method POST -Uri $url -Body $messageBody1

In essence you create the body of the API request using an array and then you simply POST that to the API URL. Pretty straightforward and after I worked out all the variables like username, id and key, I had this working.

image

The key action is HTTP as shown above. It is important to remember that this a ‘premium’ connector and you may need a more advanced license to use this.

Initially, I thought I’d just bung in the parameters into the HTTP action as I have done before and it would be good to go. Not the case as it turned out. Everything I tried came back with a variation of the following error:

{“_meta”:{“status”:”ERROR”},”records”:{“errorCode”:401,”userMessage”:”Must login or provide credentials.”,”devMessage”:”Please provide credentials by either passing in a session token via cookie, or providing password and username via BASIC authentication.”,”more”:null,”applicationCode”:”Unauth:1″}}

In essence, the API is failing to login to my account to send the SMS. The PowerShell worked fine but Power Automate didn’t.

The solution ended up lying with adding a header field to the HTTP action:

Content type: application/x-www-form-urlencoded

and formatting the body with an ‘&’ between the fields i.e:

username=#####&password=*******&to=61######&id=#####&key=<GUID>msg=hello&replyto=director%40ciaops.com&sender=61########

as well as setting the authentication in the HTTP action to None as it was being done in the body of the request.

After all of that, I finally had success. The lesson here is that APIs don’t always want JSON!

image

I then decided to wrap a Power Virtual Agent bot around the Flow and publish it into a Team to allow users to send SMS directly from Teams. They simply use a key phrase to call the bot and tell it when number to send to. The bot passes those details to the Flow and runs what I had worked out previously

image

The only change here from the initial on demand Flow was the passing of a variable into the Flow from the bot and creating the body of the API request, also as a variable.

image

Again, it is important to get the body field in EXACTLY the right format for the API request when it is created.

So, that’s how you connect an SMS API gateway to Power Automate and Power Virtual Agents. The real trick was getting the right format of the API POST request which had to be deduced from the documentation. Hopefully, sharing that process here gives others a shortcut to getting it working in their environments because it took me a LONG time to work it out!

Thanks again to Mondotalk for being kind enough to give me a demo account and assist getting this working.

Displaying a percentage with two decimal places in Power Automate

image

In this section from my Power Automate I initialise two variables (currentscore and maxscore) with values using the Set variable action. I want a third variable, sspercentage, to be equal to:

(currentscore) / (maxscore) * 100

that is, a percentage but with only two decimal places. To do that I need to use the following formula in the Set variable 3 action:

formatNumber(mul(div(variables(‘currentscore’),variables(‘maxscore’)),100),’0.00′,’en-US’)

which you will note, if you look carefully, actually results in sspercentage being a string not a float!

(div(variables(‘currentscore’),variables(‘maxscore’))

handles the division

mul(div(variables(‘currentscore’),variables(‘maxscore’)),100)

multiples the division by 100 to get the percentage value.

The 0.00 in the formula is the actual formatting that you can adjust if you need and the en-US is the language format for the number. The Microsoft reference is for the formatnumber function is here:

https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#formatNumber

The end result looks like:

image

If the formatnumber function is not used then the result contains a lot of numbers after the decimal place and remains of type float, which I would only need if I wanted to display the value of Pi!

CIAOPS Need to Know Microsoft 365 Webinar – May

laptop-eyes-technology-computer

Join me for the free monthly CIAOPS Need to Know webinar. Along with all the Microsoft Cloud news we’ll be taking a look at OneDrive for Business.

Shortly after registering you should receive an automated email from Microsoft Teams confirming your registration, including all the event details as well as a calendar invite.

You can register for the regular monthly webinar here:

May Webinar Registrations

(If you are having issues with the above link copy and paste – https://bit.ly/n2k2205 – into your browser)

The details are:

CIAOPS Need to Know Webinar – May 2022
Friday 20th of May 2022
11.00am – 12.00am Sydney Time

All sessions are recorded and posted to the CIAOPS Academy.

The CIAOPS Need to Know Webinars are free to attend but if you want to receive the recording of the session you need to sign up as a CIAOPS patron which you can do here:

http://www.ciaopspatron.com

or purchase them individually at:

http://www.ciaopsacademy.com/

Also feel free at any stage to email me directly via director@ciaops.com with your webinar topic suggestions.

I’d also appreciate you sharing information about this webinar with anyone you feel may benefit from the session and I look forward to seeing you there.

Set up PAYG for Power Platform

The Power Platform now has the ability to be Pay As You Go (PAYG) for licensing. This is a great option to get access to many advanced capabilities on demand. When you configure this option the billing is done via Azure rather than Microsoft 365. This means, prior to setting up PAYG for the power Platform, you’ll need to have an Azure subscription in place. As I have highlighted before:

Deploy Office 365 and Azure together

Once you have the Azure subscription in place, inside the same tenant where you want to enable PAYG for the Power Platform, you’ll need to have or create an Azure Resource group that will be associated with the PAYG option. You need to create this ahead of time. The following will show you how to create one if you need to:

Manage Azure resource groups by using the Azure portal

image

You’ll then need to visit the Power Platform admin center which is at:

https://admin.powerplatform.microsoft.com/

then select Billing policies. From the top menu now select New billing policy as shown above.

image

Give the policy a name, the name needs to be at least 10 alphanumeric characters. Select Next to continue.

image

Now select the Azure subscription you want the billing ties to. Then select the Resource Group that you want to use, the must already be in your Azure subscription as aI noted earlier. Finally select the region and press Next to continue.

image

Now add any environment to the subscription and press Next to continue.

image

Here select Create Billing Policy.

image

The policy should now be created and displayed as shown above.

You create additional billing policies if you wish by simply repeating the above process. Doing so would allow you to tie that policy to a different Azure subscription and/or Resource Group for billing and management if needed.

For more details on the Power Platform PAYG option see:

Set up pay-as-you-go