April 28, 2026

March 6, 2026 | Dan

Get Chat Transcripts with Power Automate

Get Chat Transcripts with Power Automate

We have all been there. You have told your users the best way to get support is to email the helpdesk, but they insist on sending a message directly to you on Microsoft Teams. This post shows you how to Get Chat Transcripts with Power Automate.

I showed you in an earlier post how to set up an auto-reply with power automate when a user sends a Microsoft Teams message to an unmonitored Help Desk client.

Why Use Get Chat Transcripts with Power Automate?

Without automation, you end up cutting and pasting an awkward trail of messages from your teams account to your Helpdesk software or an email. With the mismatched formatting between the two systems. You will be spending more time formatting the request than working on it.

How to Create the Power Automate Flow

  1. Go to https://make.powerautomate.com/ and sign in.
  2. On the left-hand side click “+Create”
  3. Choose Instant Cloud flow.
  4. Give your flow a name and select “Manually Trigger a flow”.
  5. Click Create.
  6. You will be presented flow design screen.

I prefer the classic design screen, but you are more than welcome to keep the new designer toggle on. For this post I will be using the classic designer.

I will show you the complete flow first and then I will break it down as best I can.

The Entire Flow

Get Chat Transcripts with Power Automate

Yes, it seems like a long flow to do a simple task. Just because it seems simple doesn’t mean it is. It is just the way Power Automate rolls! Let me show you…..

Get Chat Transcripts with Power Automate Broken Down

This very first step already does a lot. First, you add “for selected messages” and then edit its adaptive card:

Get Chat Transcripts with Power Automate

We are going to collect some input to help extract as much information as possible from the chat transcript. It is a very simple adaptive card. All we want to know is what subject we want to give to this chat transcript (usually a description of what the issue is) and how many chat messages you want to include total (including the selected chat message).

Get Chat Transcripts with Power Automate

Now, you need to load the input collected into variables to be used by the flow:

Get Chat Transcripts with Power Automate

The variables you created from the adaptive cards are now part of the flows dynamic content and can be loaded into other parts of the flow. Once the variables are loaded, the next step is to get the URL of 1:1 chat. This is where the fun begins. I will show the screen shot and then explain each step:

Get Chat Transcripts with Power Automate

The following are all variables that use the “initialize variable” step.

ChatUrlBeforeParse – This the URL link of the team’s message. If you right-click on any message in your chats and choose “copy link”, you will get this link. The first step “for a selected message” has the dynamic content of “Message Link” which we will use to get the entire message link. We will parse it out to get the information we need to create the rest of the flow.

BeginningOfUrl – This is a static variable. All 1:1 chat links begin with https://graph.microsoft.com/v1.0/me/chats/

MiddleOfUrl – When we initialize this variable, we don’t use dynamic content but an expression (substring(variables(‘ChatUrlBeforeParse’),38,91)). This effectively gets the ChatID of the message we want get the transcript from. This is the part of the URL from “19:” to “@unq.gbl.spaces”

NumOfMessage – This is a variable that is needed to build the finished URL and it is the variable form the Adaptive card about loaded into a variable that can be used by final step “AssembeldUrl” which we will talk about soon.

EndOfUrl – When we initialize this variable, we don’t use dynamic content but an expression (concat(‘/messages?$top=’, variables(‘NumOfMessages’)), this finished the parts of the URL we need to extract the transcript.

AssembledUrl – When we initialize this variable, we don’t use dynamic content but an expression (concat(variables(‘BeginningOfUrl’), variables(‘MiddleOfUrl’), variables(‘EndOfUrl’)). The URL we need is finally put together and is ready for our next step.

Send a Microsoft Graph HTTP request

Get Chat Transcripts with Power Automate

In this step, you add “send a Microsoft Graph HTTP request” as a step and us the variable “AssembledURL” as the value for you URI

Parse JSON to Get Chat Transcripts with Power Automate

Add the “Parse JSON” step next:

Get Chat Transcripts with Power Automate

The dynamic content “Body” will be available for you to put into the content field. For the Schema click generate from sample and use this text as a sample schema:

{
    "type": "object",
    "properties": {
        "@@odata.context": {
            "type": "string"
        },
        "@@odata.count": {
            "type": "integer"
        },
        "@@odata.nextLink": {
            "type": "string"
        },
        "@@microsoft.graph.tips": {
            "type": "string"
        },
        "value": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "replyToId": {},
                    "etag": {
                        "type": "string"
                    },
                    "messageType": {
                        "type": "string"
                    },
                    "createdDateTime": {
                        "type": "string"
                    },
                    "lastModifiedDateTime": {
                        "type": "string"
                    },
                    "lastEditedDateTime": {},
                    "deletedDateTime": {},
                    "subject": {},
                    "summary": {},
                    "chatId": {
                        "type": "string"
                    },
                    "importance": {
                        "type": "string"
                    },
                    "locale": {
                        "type": "string"
                    },
                    "webUrl": {},
                    "channelIdentity": {},
                    "policyViolation": {},
                    "eventDetail": {},
                    "from": {
                        "type": "object",
                        "properties": {
                            "application": {},
                            "device": {},
                            "user": {
                                "type": "object",
                                "properties": {
                                    "@@odata.type": {
                                        "type": "string"
                                    },
                                    "id": {
                                        "type": "string"
                                    },
                                    "displayName": {
                                        "type": "string"
                                    },
                                    "userIdentityType": {
                                        "type": "string"
                                    },
                                    "tenantId": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    },
                    "body": {
                        "type": "object",
                        "properties": {
                            "contentType": {
                                "type": "string"
                            },
                            "content": {
                                "type": "string"
                            }
                        }
                    },
                    "attachments": {
                        "type": "array"
                    },
                    "mentions": {
                        "type": "array"
                    },
                    "reactions": {
                        "type": "array"
                    }
                },
                "required": [
                    "id",
                    "replyToId",
                    "etag",
                    "messageType",
                    "createdDateTime",
                    "lastModifiedDateTime",
                    "lastEditedDateTime",
                    "deletedDateTime",
                    "subject",
                    "summary",
                    "chatId",
                    "importance",
                    "locale",
                    "webUrl",
                    "channelIdentity",
                    "policyViolation",
                    "eventDetail",
                    "from",
                    "body",
                    "attachments",
                    "mentions",
                    "reactions"
                ]
            }
        }
    }
}

Load Array into String

If you want to Get Chat Transcripts with Power Automate you will need to get the array data created by the parse JSON step and load it into a text variable that you can use to send as part of an email.

To do that we need to first initialize a variable outside of an “apply to each” step:

Get Chat Transcripts with Power Automate

What the “Apply to each” step does is iterate through each item in the “value” of the JSON array (the entire JSON of the chat we specified from our Team Graph HTTP request) and grabs each “content” value and concatenates to our “AllResultString” variable. We are in the home stretch!

Preparing to Send the Email

On the other side of the “Apply to each step”, we have the completed variable load AllResultString in a Variable called AssembleChatText (We will need this to put in the email we are going to send:

Get Chat Transcripts with Power Automate

The next steps get the users profile and mimic a forwarded email:

Get Chat Transcripts with Power Automate

It uses the following:

To – email you specify (normally someone in your organization)

From – the user who’s chat selection you will choose).

Subject – The Subject you specified from the adaptive card at the beginning of the flow.

Chat Transcript Details – The outputs for the AssembledChatText variable

How it Works – Get Chat Transcripts with Power Automate

Now that you have the flow built, let’s see Get Chat Transcript with Power Automate in action. Go to the most recent chat exchange you have had with someone. Click the three dots (you might need to click “More actions) and choose your flow:

Get Chat Transcripts with Power Automate

The adaptive card will show and gather the necessary information to build the graph command for the chat transcript and the subject you would like for the email forward.

Get Chat Transcripts with Power Automate

An email will be sent to the address you specify in the flow with the number of chats you have specified.

How it Works

  1. You select first chat (from the user who initiated the request, NOT YOU) and then select “more actions” and launch the flow.
  2. The adaptive card shows.
  3. You enter the Subject for the request.
  4. You enter the number of messages you want. This includes the initial chat message you chose.
  5. Click submit.
  6. An email is sent to the email you specified in the flow with the chat transcript details.

Limitations of the Flow

You need to remember that Power Automate is a low code / no code solution to work process automation. Please do not expect it to be as robust as a custom coded solution using lower-level languages.

It only works if you send the most recent 1:1 chat exchange. It uses the MS Teams Graph query (?$top=X) to grab the number of chats you want from the most recent exchange. So, if you want to grab an exchange from before that it won’t work.

What will happen is if you pick a chat from say a day ago and want to extract the last three exchanges you will get the last three most recent exchanges from your 1:1 chat with this user. It won’t make sense.

This flow is for a specific use case. You have a recent chat exchange with a user and want to capture the transcript to email. That’s it.

Also, you can’t cherry pick messages in the chat. For example, you want to send a chat on email that has 7 messages in it, but you only want messages 1,3,5 and 7. It won’t do that. The best it could do is leave out X number of chats near the end of the exchange. So instead of specifying 7 messages in the adaptive card, you could specify 5, leaving out the last two if you did not want them in the email.

Conclusion of Get Chat Transcripts with Power Automate

So, you finally see how you can Get Chat Transcripts with Power Automate. Is it worth it? Of course it is. It always takes time to develop automation. Once it is in use you and your department will wonder how you got on without it! Power Automate is a Microsoft product that actually makes sense. Their ecosystem is getting very complicated and this helps out!

Share: Facebook Twitter Linkedin
January 19, 2026 | Dan

Can’t Login to Teams

Can't Login to Teams

Thanks to botched Windows 11 updates you may find when starting work in the morning you can’t login to Teams.

A lot of times you encounter this error right before you need to get into a meeting. I would keep this article handy for just such an emergency. It will most definitely help you out ! At least you will not be late for your meeting!!

Windows 11 has changed many things. Eventually, you will get used to it but I am sorry, getting used to a heavy flawed update process is not one of them.

It could be a lot more than Microsoft teams but this article is only going to tackle one Windows 11 problem at a time…..

How to fix Can’t Login to Teams

  1. Try rebooting your computer.
  2. If that doesn’t work, search “Settings” in the search bar at the bottom of the screen then go to apps, search for “Teams” and then go to “Advanced Settings”:

Can't Login to Teams

3. Once in advanced settings for Teams, scroll down until you see “reset”.

Can't Login to Teams
  1. Click that and it will reset your teams and get you to login again.

If Using the Desktop app Doesn’t Work

If you are still having, you can use the web version here: https://teams.microsoft.com or use Linux instead :p

Share: Facebook Twitter Linkedin
November 12, 2025 | Dan

Windows 11: Where Did Run as Go?

Where Did Run as Go

Well, Windows 11 has done it again. Where Did Run as go? Never mind the wonky AI or the complete invasion of privacy. They can’t even get the basics of day-to-day Desktop administration right.

Lets not even talk about what they are doing to some of their flagship software…

I will give you an anecdote. I received a request from a user to install a piece of software that required administration privileges. When the machine was Windows 10 it was as easy as right clicking on the EXE file, selecting “Run As” and go about my merry way installing the software. But the machine is now running Windows 11…..

Why Did Windows 11 Remove Run as

They claim, “Windows 11 did not remove “Run as”. Instead, recent updates changed how the “Run as” command is accessed, often by removing it from the default context menu and sometimes by hiding the “Run as different user” option. Microsoft’s focus on security, especially with the new Administrator protection feature and the introduction of the Sudo command, is likely the driving force behind these changes, as they aim to enforce least privilege and reduce attack vectors. “

If it is not removed, it is hidden. As if an IT professional doesn’t have enough work. We need to spend more time doing something that took no time at all before. That was sarcasm.

Where Did Run as Go and How to get it Back

So, I guess I should say Windows 11 has “hidden” the “Run as Command”. To get it back, you need to go to Settings / System /For Developers and turn Developer Mode on:

Where Did Run as Go

Then you must go to Settings / System /For Developers / File Explorer and turn on “Show Option to run as Different User in Start”:

Where Did Run as Go

Then, hold the shift key as you are right clicking on the EXE file you wish to run as a different user and the Run As option will reappear:

Run the program and voila! You got you functionality back.

Something that used to take 15 seconds now takes 5-10 minutes to complete. Way to go Windows…

Where Did Run as Go
Share: Facebook Twitter Linkedin
October 27, 2025 | Dan

Reset Outlook App Mobile

Reset Outlook App Mobile

I am sure when you enroll a phone in InTune all the apps you deploy are functioning. Part of the process when you enroll a phone is to make sure all of the apps are working. Upon initial enrollment all apps should work out of the box. In time tough, some of the apps will start malfunctioning. One of them will be email or Outlook. You will probably have to Reset Outlook App Mobile. It is almost inevitable.

What Causes This?

This is a good question. I find that when users are travelling and come back home to their home network and occasionally things go awry. A reset actually works well. Other times, it is a corruption in the synchronization process that causes this. Either way, a reset usually does the trick.

Of course, if that doesn’t work you can always delete and re-add the account. More on that later.

How to Reset Outlook App Mobile

This is how you do it….

Open Outlook. Tap your account picture and then the settings gear.

Reset Outlook App Mobile

Tap Accounts.

Reset Outlook App Mobile

Tap Your Account listing.

Reset Outlook App Mobile

Scroll down until you see “Reset Account”. Tap it.

Reset Outlook App Mobile

Tap continue to reset your Outlook account.

Reset Outlook App Mobile

Reboot your phone and connect to Outlook. A Good practice is to re-boot the phone afterward and reload the Outlook app. It should start syncing again.

Doing this should clear out any corruption the the above cause may have had something to do with.

Users have come to rely on Outlook mobile on their phone and if it not working as expected, be sure to get a help desk call. It is very important to their workflow and the last thing they need is to be slowed down.

Using the steps above should resolve their problem and get them working as soon as possible. Worst case, if this doesn’t work, deleting and re-creating the account will get the synchronization for sure.

Share: Facebook Twitter Linkedin
October 10, 2025 | Dan

Sync to Samsung Cloud Missing Intune Enrolled Device

Sync to Samsung Cloud missing

Users are complaining about Sync to Samsung Cloud missing on their Samsung Notes App. You have set up either an Android Enterprise corporate owned fully managed (COBO) or an Android Enterprise corporate owned work profile (COPE) and deployed the Samsung Notes App to the devices….

Why are they not syncing?

What Sync to Samsung Cloud Missing Looks Like

When you deploy this app through your Google Managed Play store as an approved app, for security purposes, the app does not allow syncing to a cloud (Who wants Microsoft info in the Samsung Cloud, right?). Ultimately, sync to Samsung Cloud is missing.

So, when you go into the settings of the Samsung Note this is what you see:

Sync to Samsung Cloud missing

When your users want to see this:

Sync to Samsung Cloud missing

Read below to see how you can fix sync to Samsung Cloud missing.

How to Enable Sync to Samsung Cloud on an Intune Enrolled Device

I have written an article on how to do this with Samsung Smart Switch and it essentially the same process, however, you need to enable the settings specific to Samsung Notes.

First you will need to create an app configuration. Go to Manage Apps / Configuration in the Intune portal and Select Create / Managed Devices. You will go through the wizard of creating an App Configuration.

Give it a name and Description. In this case it could be “Allow Samsung Notes Sync with Cloud”, etc. Choose the platform as Android Enterprise and the profile types you want to apply it to are Fully Managed and Corporate Work Profile Only. You can Apply to all profile types if you want but this should take care of the profile types that matter. Select the target app as Samsung Notes from the Associated App fly-out on the right and then click next:

Sync to Samsung Cloud missing

Next, you will be able to configure the setting so sync to Samsung cloud is missing goes away! In the next screen Choose “Use Configuration Designer “from the drop-down field and then click add. There is only one setting you can pick anyway. It is “Allow Note Sync” and you can check it from the configuration Fly out on the right. Click OK and then Next:

Sync to Samsung Cloud missing

From Here you can add which Entra Device Group to include or exclude from this App Configuration:

Sync to Samsung Cloud missing

All you have to do is click “Create” on the last screen and your App Configuration for Samsung Notes is created. The Device group you chose in the previous steps in the configuration setup will have the new configuration pushed out to their device as soon as they check in!

The Sync to Samsung cloud missing mystery is solved!

Share: Facebook Twitter Linkedin
September 19, 2025 | Dan

High Volume Emails in Exchange Online

High Volume Emails

It has been a bit since I posted. When you are in IT you are involved in a lot of projects apart from day to day work, but here is a good one I came across in my work. Dealing with High Volume Emails through Exchange online.

What Would Use High Volume Emails?

That s a very good question. In an organization you could have an individual who sends a lot of email from their inbox, a device like a scanner or copier that send to recipients through email to LOB Apps that send out email notifications as part of the apps process.

Microsoft has done what they can enabling sending High Volume Email email through Exchange but they have to be careful not to clog up the system. Especially if it gets compromised. They have default limits in place.

Exchange Sending limits

The following limits have been put in place for mailboxes by default. They are:

Recipient Rate Limit: 

This is a rolling 24-hour limit on the total number of recipients a mailbox can send to. 

  • A typical limit is 10,000 external recipients per day. 
  • This limit includes both internal and external recipients. 
  • For trial tenants, the limit is 5,000 external recipients. 

Recipient Limit: 

This is the maximum number of unique recipients an email message can have. 

This limit is often set at 1,000 recipients per message. 

Message Rate Limit

This limits the number of emails a single mailbox can send per minute. 

  • The default is 30 messages per minute. 
  • Emails that exceed this limit are throttled and delayed. 

Why These Limits Exist in High volume Email

  • Preventing Bulk and Spam Email: Exchange Online is designed for email and collaboration, not for bulk commercial email campaigns. These limits help prevent abuse and maintain service quality for all users. 
  • Protecting Your Organization: The recipient rate limit is a safeguard against compromised accounts from being used to send large volumes of spam and potentially damaging your organization’s reputation. 

What Happens When You Hit a Limit

  • If you hit the recipient rate limit, you will receive Non-Delivery Reports (NDRs) for your undelivered messages. 
  • You’ll need to wait for the 24-hour period to pass before you can send more messages to that recipient group. 

What can you do to Send High Volume Email?

Microsoft recommends using a specialized third-party provider for legitimate High Volume emails. Examples include Mailchimp or Constant Contact are built for sending high volumes of email and are much more suitable for marketing and bulk communications.

However there is a new service in preview by Microsoft you can try called High Volume Email. It looks to be in its infancy but it has some functionality. Let me lay it out for you.

First, you will need to go the new High Volume Email section in the Exchange Online Admin portal. From their, you will need to add an HVE Account. You can also use PowerShell to add an HVE account. Once you have done that, you can use the following info for you Device or App to send email:

Printer/Application settingValue
Server/smart hostsmtp-hve.office365.com
PortPort 587
TLS/StartTLSEnabled
Username/email address and passwordSign in with credentials of HVE account

Limitations or High Volume Email

You still may need to go to third party services if the following limitations do not fit your needs:

High Volume email exchange is limited by sender reputation risks, strict rate limits for external recipients (e.g., 2,000 per day per tenant in Exchange Online), restrictions on sending to external domains, and requirements for updated authentication methods and potential application code changes.

So it looks like you have options!

Share: Facebook Twitter Linkedin
August 20, 2025 | Dan

Use the Managed Folder Assistant to Archive Users Mail 

Archive Users Mail

Oh no! A user has come to you and has complained they are running out of storage space in their Outlook. What? You exclaim… you are on Exchange Plan 2 and have 100 GB of storage space. How is that possible? This is an opportunity to Archive Users Mail. 

I have been in this game long enough to tell you that users have been using email storage space as file storage space for decades. It really makes file server administrators happy, but it pisses off the email server admins. Hey, aren’t we supposed to be on the same team? 

Since there isn’t an Exchange Online Plan 3 (LOL) you are tapped out at 100 GB. What to do…what to do… 

Well luckily you can take advantage of the Exchanged Managed Folder Assistant (MFA). This is not to be confused with Multi Factor Authentication. We IT types love our acronyms (sic). It is a simple process, but you do have to get a few things set up. Lucky I am here to show you. 

Configure Your MRM Retention Policy to Archive Users Mail 

  1. Sign in to the Microsoft Purview portal: Access the portal at https://compliance.microsoft.com/ and sign in with your administrator credentials.  
  1. Navigate to MRM Retention policies: Go to Data lifecycle management > Exchange (legacy) > MRM Retention policies.  
  1. Create a new policy: Click + New policy.  
  1. Name the policy: Give your new policy a descriptive name, such as “Company Archive and Delete Policy”.  
  1. Add retention tags: Click + Add tag.  
  1. Select tags: Choose the relevant retention tags from the list, including custom tags you’ve previously created.  
  1. Review and submit: Review your policy settings and click Next to submit and apply the new policy.  

I set the policy to Archive Users Mail older than 3 years and to delete any emails after 7. Seven years is a standard policy and if your are holding on to emails older that 7 years, well that’s on you. 

Enable Online Archive for the User 

Online Archiving is not enabled by default for users. It takes a lot of time and processing for this so only users that require it should be enabled. It is the best way to Archive Users Mail. But we do it only when a user requests it. All we must do is go to their mailbox in EAC and enable archiving with the policy we configured above. This setting is located in the “other” tab of the users mailbox properties. It is done like this: 

Archive Users Mail
Archive Users Mail

Notice the Name is Blank. Leave it so. It just populates it as “<Last Name>, <First Name> – Online Archive” after you enable and save configuration. 

Apply Policy for the User 

In order for Online Archiving to work properly you need to create a retention policy for your tenant. After yo do that, just apply it to the user after you have created an Archive for them. This setting is located in the “mailbox” tab of the users mailbox properties. It is done like this: :

Archive Users Mail
Archive Users Mail

Wait or Force Synchronization 

Now you can wait for the synchronization to occur to Archive the Users Mail in Outlook. It will eventually mount as an archive mail store just like local archiving but it is online. So, it will be available to any outlook you run with you logged in. This is a definite benefit to local auto-archive. 

However, it could take a few hours to a few days and in some cases a few weeks to finish the initial synch. This is dependent on several factors. Like, size of mailbox, network traffic, speed, a how fast or slow the M365 cloud is operating at any given moment. There is an easy way to kick it off. Here’s how you do it: 

Login into Exchange Online in PowerShell, then execute this command: 

start-managedfolderassistant -identity mailboxname 

Where mailbox name is the user who you set up the Managed Folder Assistant for. Before you know it you will see the Online Archive start to populate in the users Outlook! Also, if you subscribe to an M365 backup solution, it will get backed up to the cloud with the original mail store of the user. One last thing to note is the online archive can grow to a size of 1.5 TB. If they need more than that…..I GIVE UP! 

Share: Facebook Twitter Linkedin
August 15, 2025 | Dan

Temporarily Sign in as a User in M365

Temporarily Sign in as a User

As an M365 administrator you have your security set up. You have your devices enrolled and you have even made sure MFA has been set up for the much-needed security required in today’s IT Landscape. But how do you Temporarily Sign in as a User?

Why Temporarily Sign in as a User

You may need to set up a device for them that may require you to log in as them. Some say this is not good practice and I agree if you can do it another way, it is great, but sometimes you do not really have a choice.

Besides, you must be an administrator to set this up and you are the only one who knows the temporary passcode. Let’s begin:

How to Do it

I already mentioned that you must be an administrator. Simply go into Entra and look up the user you need to log in as.

Temporarily Sign in as a User

Go to the users Overview and Authentication Methods and Click Add Authentication Method.

Temporarily Sign in as a User

Choose Temporary Access Pass from the dropdown list:

Temporarily Sign in as a User

Options When You Temporarily Sign in as a User

From here you can configure a few things. Namely, you can specify how long the TAP is good for (Activation Duration), If you can use the TAP multiple times (One-Time Use) and if you would like a time delay before you start using it (Delayed Start Time).

When you are done configuring the settings, click Add.

When you are done, you are taken to this screen:

Temporarily Sign in as a User

The temporary password is provided above. Copy it to a notepad document or like so you will have it ready to use. When you log on as the use you will be presented with a password screen like this:

Temporarily Sign in as a User

Enter the TAP that you copied from above and voila, you have access to the user account for set up purposes. It even bypasses MFA. So, you don’t have to constantly bug your users for MFA push numbers!

Why Use this to You Temporarily Sign in as a User

This is a very good question. Sometimes you can’t avoid it. Enrolling a device in Intune comes to mind. Whatever, the case, it will save you a lot of time in setting up the device and you will be non-intrusive to the user in doing so.

Share: Facebook Twitter Linkedin