Skip Ribbon Commands
Skip to main content
  
  
  
Category
  
  
Edit
Body
  
No presence informationTodd O. Klindt11/25/2020 10:41 AMOffice 3650 

Earlier this month, Alex Weinert, the Director of Identity Security at a little company called Microsoft, published a blog post begging us to stop using SMS as the second factor for MFA. I’m an MFA kind of guy, I live the MFA life style, and I’m on board with that. As the majority of the accounts I use can use the Microsoft Authenticator app, that’s what I use the most. Other companies, like Google, also have authenticator apps. I’m sure they’re fine and well loved by their friends and families. Smile

Over the last few months I’ve moved most, if not all, of the apps and sites I can to MFA using the Microsoft Authenticator app and I’ve picked up a few tricks along the way. I thought I’d blog a few of them in case they help anyone else. Keep in mind this blog post was written in November of 2020 and the version of the app I’m using is 6.2010.7266 on Android.

Use Microsoft Your Phone

My first tip for using Microsoft Authenticator is not about using Microsoft Authenticator at all. It’s about using a Windows 10 feature called “Your Phone.” This feature, along with an app running on your phone, allow you to interact with your Android phone on your Windows 10 machine, or machines. I initially started using it to send text messages but it can do so much more. For instance, you can run phone apps on your PC, via screen sharing. One of those apps can be your friend and mine, Microsoft Authenticator. Since web sites (like Microsoft 365) and other services like VPN use codes generated from Microsoft Authenticator it is handy to have quick access to it on your PC. Here’s what it looks like:

image

That saves you fumbling with the UI on your phone, but you’d still need to look at your phone to get the code.

For this to really be helpful you also need to change a setting in the app to allow its screen to be captured. Go into Settings and enable Screen Capture:

image

If you don’t, you’ll see this on your PC when you open Microsoft Authenticator:

image

When I need to log into my GitHub account I fire up Your Phone on my computer, switch to the Microsoft Authenticator app and type the secret 6 characters in. Now I’m logged into GitHub and ready to cause some trouble.

Show the Codes

By default, when you open Microsoft Authenticator you’re greeted with a list of all of the accounts you’ve registered and you select the one you want to log in to. Authenticator takes you to a screen with the one-time passcode for that account. But all that clicking is sooo much work. I take advantage of the “Show Codes” option, like below.

image

That shows me all the codes for the accounts that support it. You can see how it looks in the first screenshot. Combining these two techniques my MFA process went from:

  1. Hunting around for my phone
  2. Unlocking it (unsuccessfully the first couple of times)
  3. Finding the Microsoft Authenticator app
  4. Finding the account I want to log in to
  5. Clicking it (so much work)
  6. Typing all six digits into the MFA prompt on my computer
  7. Collapsing from exhaustion

To this:

  1. Clicking the Microsoft Authenticator app on my Windows 10 Taskbar
  2. Copying the one-time passcode for the account
  3. Pasting into the MFA prompt
  4. There’s no step 4!

Wait, copy and paste the passcode? How’s that again?

Copy and Paste the Passcode

Once you have that set up you can actually copy the passcode from your phone in Windows and paste it into whatever web page or app is asking for it. To take advantage of this magic you need to enable copy and paste in the Your Phone app on Windows 10.

image

You might have to close the Authenticator app both on your phone and your PC for that to take effect. When you have it working, it’s a thing of beauty. Just copy the passcode with your mouse like you would any other application. There’s no visual indication that it’s copying, but trust me, it is. Go ahead, paste it into Notepad and see for yourself. Cool, huh?

Backup Your Settings

I recently heard a sad tale of woe from a friend of mine that uses Microsoft Authenticator for all of his MFA needs. Something went wonky on his phone and he lost a bunch of the account settings. He had to go through a lot of work to get it all set back up. That’s when he and I both noticed the handy Backup functionality. Like all the other fun we’ve looked at it’s in the Settings page of the app. You can read all about it on this Docs Page. But the basic idea is, turn it on. Future you will appreciate your consideration and foresight.

There are a few other fun Authenticator tricks, but these are my favorites. Are you using Authenticator and have tips to share? Put them in the comments below.

tk

ShortURL: https://www.toddklindt.com/MSAuthTips

  
No presence informationTodd O. Klindt9/14/2020 9:30 AMSharepoint; Office 3650 

My friends at SysKit have been kind enough to do all the work for me to put on a free webinar on SharePoint migration. Those folks are the best! They do all the work, and you and I get to chat about one of our favorite topics! The big day is Wednesday September 16th. It’s 10:00 am CDT

The registration is free, and you can find out more details and sign up here.

I’ll give some good advice, and tell some stories, and generally have fun. Join me, I’d love to see you there.

tk

ShortURL: https://www.toddklindt.com/SyskitWebinar

  
No presence informationTodd O. Klindt8/18/2020 11:30 AMOffice 365; PowerShell; Sharepoint0 

Some blog posts just beg to be written, and this is one of them. I swear I’ve had this conversation half a dozen times in last month after having never had it at all before. It just keeps coming up, I’m guessing because the adoption of Office 365 has really taken off in the last 5 months. What’s the topic? It boils down to, “How do I create a Team/Distribution List/SharePoint site that is always available everyone in the company?” The first couple of times the topic came up I tried to talk the customer out of it. I’m usually not a fan of big blast communication like that, and in the case of products that are built on top of Microsoft 365 Groups, there are published limitations to this. It just seemed like a bad idea. But every time a customer asks me about it I understand it a little better, so I threw this blog post together to point people at if they want to do it. This post is meant to be  technical, not prescriptive. I won’t cover why you should employ any of these techniques, but how you can do them if you have already decided they are a good idea. I’ll leave the why up to people that are smarter than me.

The Options

There are several “All User” communication methods that have come up in my discussions with customers. I’ll cover how to enable them. They all leverage the functionality of updating dynamically as people join your company. Your company could already handle adding people to Distribution Lists (DLs) as part of your onboarding process. All of my examples will show how to keep the All User list populated automatically. All of these examples also assume the groups are cloud only, not synced from on-prem Windows Active Directory.

Distribution Lists (DLs)

The first option I’ll cover is the old tried and true email Distribution List. These things have been around since shortly after prehistoric fish came on land from the primordial soup and they’ve been going strong ever since. DLs are email only  and they’re a good way to send out company wide things like “There are donuts in the breakroom. Get here quick before Gary eats them all” or “The CEO is feeling generous and she’s giving everyone (except Gary) Friday off!”

To do this, create a new DL and make it a dynamic DL. This one is a little tricky. When you create a dynamic anything you have to provide a rule so that Azure AD (AAD) knows whether someone should be in the thing or not. In the case of a dynamic DL the way to get everyone is to create no rule. If there’s no rule, emails sent to that DL end up in every mailbox in your tenant. If you currently have any static DLs they cannot be changed to dynamic DLs, but they can be upgraded to Office 365 Groups. Dynamic DLs cannot be upgraded to Office 365 Groups. I’ve also had customers set one of these up and send News Digests from SharePoint Online to it. The owner of the dynamic DL does not need to be IT or have any elevated roles in the tenant.

How do I Create one?

There are a couple of different ways to create a dynamic DL. You can do it in the Exchange admin center in Office 365. Then navigate to the Groups tab. Next to New Microsoft 365 Group click the dropdown and select Dynamic distribution list.

image 

The configuration will look something like this. Do not add a rule.

image 

Once your dynamic DL is created there are some fun settings you can play with. For instance, you can moderate messages and have approved senders.

If you’re super cool, you can create dynamic DLs with PowerShell. First connect to Exchange Online PowerShell, then run New-DynamicDistributionGroup:

New-DynamicDistributionGroup -IncludedRecipients MailboxUsers -Name "Blog Lovers"

Doesn’t that feel better than using the UI? I thought so.

Security Groups and Microsoft 365 Groups

Both AAD Security Groups and Microsoft 365 Groups support dynamic membership, so they can be used the same way. A dynamic, all company, Microsoft 365 Group can be used for a site that you want everyone to have access to, and they’ll all get emails sent to that Group’s DL. Depending on how the Group is configured or how the users configure their mail client the Group’s emails may or may not show up in their Inbox. There will also be a Team for that Group that everyone will be in. Lots of ways to annoy everyone with one of these. I honestly can’t think of a way to leverage a Security Group in the context of Office 365, but I added since it’s the same process as the Office 365 Group, and it makes this blog post look that much longer.

How do I Create Them?

As we are all painfully aware, there are just shy of 117 different ways to create an Microsoft 365 Group. I think two more have been added since I started writing this blog post. There might be more than one way to create a dynamic Microsoft 365 Group, but I’m only going to cover how to do it in the Azure AD Portal and with Azure PowerShell. Navigate to the Groups blade and click "New group.” Under Membership type choose “Dynamic User”

image 

If Membership type is greyed out that’s because the user creating the group does not have an Azure AD Premium license.

To set the rule, click “Edit dynamic query” button to get to the rules page. The rule we want is “user.objectId -ne null”. You can build that in the wizard at the top. Don’t worry about a user’s ID actually being “Null.” The rule knows the difference between null and “Null.” Ned Ull will not be the only member of the Group.

image 

Once you tab out of the Value box the Save button will light up and you’ll be able to save the query and go back to creating your group. The process is the same for Security Groups.

But what about PowerShell?? I’m so glad you asked. Make sure you have the AzureAD module loaded and you’re connected as an account that can create Groups. Then run this little gem to create a Dynamic Microsoft 365 Group:

New-AzureADMSGroup -DisplayName "Dynamic M365 Group From PowerShell!" -Description "Dynamic group created with PowerShell!" -MailEnabled $true -MailNickName "Dynamic-M365-Group-From-PowerShell" -SecurityEnabled $True -GroupTypes "Unified","DynamicMembership" -MembershipRule "(user.objectId -ne null)" -MembershipRuleProcessingState "On"

If you only want a Security Group (I’m not sure why) change the –MailEnabled parameter to $false, and the –GroupTypes to only DynamicMembership, like this:

New-AzureADMSGroup -DisplayName "Dynamic Security Group From PowerShell!" -Description "Dynamic security group created with PowerShell!" -MailEnabled $false -MailNickName "Dynamic-Security365-Group-From-PowerShell" -SecurityEnabled $True -GroupTypes "DynamicMembership" -MembershipRule "(user.objectId -ne null)" -MembershipRuleProcessingState "On"

It is also possible to switch an existing static Security Group or Microsoft 365 Group to dynamic. It’s a long process, and this article does a good job explaining how. I don’t think there’s a way to convert a Security Group to a Microsoft 365 Group.

Happy Dynamic Group Creating!


Question #1: "Can you use Dynamic Groups with Audience targeting?"
Answer #1: Despite this Microsoft Support document saying otherwise, I was able to target links in both Global (top) Nav and Quick (left) Nav by audience with a Dynamic Microsoft 365 Group. 

Question #2: "Does the 'user.objectId -ne null' approach include Guests?"
Answer #2: I'm not sure, I'll look into that and update this blog post. 


tk

ShortURL: https://www.toddklindt.com/CreateDynamicGroups

Edit: 8/24/20 to add questions

  
No presence informationTodd O. Klindt7/29/2020 11:06 AMSharepoint; Office 365; PowerShell0 

Workflow Retirement Series TOC

Part 1 - SharePoint 2010 and 2013 Workflows Kaput in Office 365
Part 2 - Finding All the SharePoint 2010 Workflows in SharePoint Online
Part 3 - Find Only the Active SharePoint 2010 Workflows in SharePoint Online 
Part 4 - Use PowerShell to Work with SharePoint 2010 Workflow Scan

In Part 2 of my much beloved “Workflow Retirement Series” I covered how to scan your SharePoint Online environment for those pesky SharePoint 2010 workflows with the free SharePoint Modernization Scanner. I figured that was that. I was preparing to do my victory lap when I started getting some feedback. It seems some folks have a a lot of workflows in their environment, and a CSV file with a few hundred, or a few thousand rows isn’t terribly helpful. Now, once you get that CSV file into Excel you have one of the best data slicing and dicing tools invented by man at your disposal. You can slap a couple of filters on there, sort a few columns, hide a few others, and you can probably get whatever information you need. But I’m a PowerShell guy. I like to do things the hard way, with maximum typing. Let’s walk through what I did.

One of the reports the SharePoint Modernization Scanner makes is

ModernizationWorkflowScanResults.csv  and that’s the one I’m going to use. Since it’s a pretty well formed CSV file we can import it into an object without much fuss:

$results = Import-Csv .\ModernizationWorkflowScanResults.csv

As a gut check we can see how many rows we brought in:

$results.Count

You can also type $results[0] to see the first row, since it’s just an object. And since it’s an object, it has Members that we can exploit. What are those Members? I’m glad you asked:

$results | Get-Member

image

My eagle-eyed readers will notice that the NoteProperties are the column headers in the CSV file. To get my feet below me I did a simple Select to get a few properties:

$results | select "Definition Name",Version

You can add any of the columns you want. Remember to put quotes around the columns with spaces in the name.

$results | select "Definition Name","Subscription Name","List Title",Version,enabled

Depending on how your PowerShell host is configured that might be wide enough that might switch from table to list. To get it back to table pipe it through Format-Table:

$results | Select-Object "Definition Name","Subscription Name","List Title",Version,enabled,"Flow upgradability" | Format-Table –AutoSize

SNAGHTML192591b3

This report has both SharePoint 2010 and SharePoint 2013 workflows in it. The current fire is around SharePoint 2010 workflows, so let’s just look at those:

$results | Where-Object -Property version -EQ -Value "2010" | Select-Object "Definition Name","Subscription Name","List Title",Version,enabled,"Flow upgradability" | Format-Table -AutoSize

That should give you a better picture of the Herculean task in front of you. There’s one final piece I want to show you, and that’s how to see which sites have the most workflows:

$results | Where-Object -Property version -EQ -Value "2010" | Select-Object "Definition Name","List Title",enabled,"Site Url" | Group-Object -Property "Site Url" | Format-Table –AutoSize

SNAGHTML1926b330

This will help you figure out where to focus your efforts between now and November 1st.

Like I said at the beginning of this post, all of this and more is available in Excel and most of it has been done for you already in the Office 365 Classic workflow inventory.xlsx report that the SharePoint Modernization Scanner creates. But it’s a fun PowerShell exercise just the same.

tk

ShortURL: https://www.toddklindt.com/PoshWorkflowScan

  
No presence informationTodd O. Klindt7/15/2020 11:59 AMOffice 365; PowerShell2 

I have a OneNote file that is full of blog posts that seemed like a great idea at the time, but never saw the light of day for various reasons. Maybe I couldn’t research it as much as I wanted, maybe I couldn’t make it as thorough as I wanted, maybe I just got distracted by something shiny. This blog post is one of them. I was never confident enough to post this one, but given all the Workflow excitement, and a couple of customer requests I decided to dig in and get serious about it. So here it is, two years after I first took the notes for it.

As an administrator, I find myself frustrated a lot by the lack, or at least lack of understanding on how to manage Flows and Power Apps. They never quite behave exactly like I want them to. One of the things that keeps coming up is being able to get a list of all of the Flows in a Tenant. This could be for licensing questions, migrating questions, or just plain curiosity. Whatever it is, it’s never as easy as I want it to be. Being the fanboy of PowerShell that I am, that’s where I looked. Without boring you with a lot of story part, I’ll show you the PowerShell I settled on.

Get-AdminFlow | ForEach-Object { $user = Get-UsersOrGroupsFromGraph -ObjectId $_.CreatedBy.userId;[PSCustomObject]@{ FlowName = $_.DisplayName; OwnerName = $user.DisplayName ; OwnerEmail = $user.UserPrincipalName ; }; }

Let’s break that down a bit. You’ll need to install the PowerApps and Flow for Admins module. Install the PowerApps and Flow for Makers module while you’re at it. If you don’t run Add-PowerAppsAccount and add your Tenant Admin account you’ll get prompted for authentication the first time you run Get-AdminFlow.

Get-AdminFlow lists all of the Flows in a tenant, but not in the most user friendly way:

image

So I cleaned it up a bit. Using ForEach-Object I walk through each Flow. I use Get-UsersOrGroupsFromGraph to get the Owner object. Then I create a PSCustomObject and populate it with the Flow’s DisplayName and the user’s DisplayName and UserPrincipalName properties. It looks like this:

image

Making it an object is a little extra work as opposed to just spewing it onto the screen with Write-Host. But it’s worth the extra effort because I can send it down the pipeline and do more with it. For instance, I can easily pipe it out to a CSV file by appending | Export-Csv -Path .\Flows.csv –NoTypeInformation to the end.

image

That seems a bit anticlimactic at first, but open up that CSV file and prepare to be amazed.

image

If you want different information about each Flow, run Get-AdminFlow | Get-Member and see what other properties are exposed to you.

Let me know if this helps and what else you’d like help with.

tk

ShortURL: https://www.toddklindt.com/POSHFindAllFlows

Edit 7/15/2020 – Changed the PowerShell to be more efficient, but now it doesn’t match the screenshots.

  
No presence informationTodd O. Klindt7/14/2020 10:25 AMOffice 365; Sharepoint3 

Workflow Retirement Series TOC

Part 1 - SharePoint 2010 and 2013 Workflows Kaput in Office 365
Part 2 - Finding All the SharePoint 2010 Workflows in SharePoint Online 
Part 3 - Find Only the Active SharePoint 2010 Workflows in SharePoint Online   
Part 4 - Use PowerShell to Work with SharePoint 2010 Workflow Scan  ​

   ​

In the last episode of “Oh my god, SharePoint Workflows are Going Away!!!” I covered how to find the SharePoint 2010 and 2013 Workflows that might be lurking about in your SharePoint Online environment. As I wrote that blog a big smile crept across my face. I figured this was going to solve everyone’s problem. I assumed I would be cheered as a hero, parks would named after me, the whole thing. Imagine my surprise when the response was, “That’s great Todd, but how can I tell which ones are actually being used?” No directions to the Todd Klindt Celebratory Highway or nothing. Ingrates!

After I dried my tears I did decided that question had some legitimacy to it, so I put pen to paper and wrote this blog post.

I was never much of a workflow guy, either on-prem or in SPO. But in the deep, dark recesses of my mind I did remember an on-prem issue where the “Workflow History List” would get huge and cause database issues. “Workflow History List” sounds promising. I wondered if SPO has such a beast. Sure enough, it does, and it seems to be exactly what we’re looking for.

Like the name suggest, it’s a List of the Workflow History. Since it’s a list it’s a child of a web, or the root web of a site. That list covers the Workflow History of the entire web or site. When you run the SharePoint Modernization Scanner from my previous blog post the ModernizationWorkflowScanResults.csv file lists all the Workflows in your tenant and which site (Columns A and B) that Workflow is in. It also shows when that Workflow was last edited (Column T) but not when it was last used. Fortunately we can take the URL in Column A, tack /lists/Workflow%20history/AllItems.aspx at the end of it and get which Workflows are being executed. Here is what we see in the report:

image 

In my browser I pasted https://m365x541279.sharepoint.com/sites/SalesAndMarketing/lists/Workflow%20history/AllItems.aspx and I got a page like this:

image 

From this I can tell that the “Create Home Schedule” Workflow is being used regularly and I need to find an alternate for it before November 1st, 2020. If a Workflow shows up in the Scan Results spreadsheet, but you can’t find it in the Workflow History List you probably don’t need to rewrite it. However, in the Workflow’s settings it is possible to assign a different list for that Workflow’s history.

image 

Of course you won’t know that unless you look at every Workflow’s settings in SharePoint Designer, which sounds pretty tedious. I was able to whip up some PowerShell that looks for Workflow History lists:

Get-PnPList | Where-Object -Property BaseTemplate -EQ -Value "140" | Select-Object Title, @{Label="URL";Expression={$_.RootFolder.ServerRelativeUrl}}, BaseTemplate

image 

You can run that against the sites that show up in the ModernizationWorkflowScanResults.csv file. If another list shows up there you’ll want to see which workflow is writing its history to that list. By default the Workflow History list is hidden in the UI, so you won't see it in the site's Site Contents page. You can unhide the list in SharePoint Designer, or my preferred method, PowerShell:

Set-PnPList -Identity "Workflow History" -Hidden $false

It’s also important to note that the Workflow History List purges entries over 60 days old. In this case that’s not a problem. Any Workflow that hasn’t been run in the last 60 days probably doesn’t deserve saving.

Look at all the time you just saved! More time to watch hamster videos on YouTube.

tk

ShortURL: https://www.toddklindt.com/FindActiveWorkflows

​​
  
No presence informationTodd O. Klindt7/9/2020 2:53 PMOffice 365; SharePoint 2010; SharePoint 2013; Sharepoint11 

Workflow Retirement Series TOC

Part 1 - SharePoint 2010 and 2013 Workflows Kaput in Office 365
Part 2 - Finding All the SharePoint 2010 Workflows in SharePoint Online 
Part 3 - Find Only the Active SharePoint 2010 Workflows in SharePoint Online
Part 4 - Use PowerShell to Work with SharePoint 2010 Workflow Scan 

   
By now you’ve probably seen Microsoft’s announcement that they’re going to remove SharePoint 2010 Workflows on November 1st, 2020. SharePoint 2013 Workflows aren’t too far behind. Not only did they not give us much time to rewrite these workflows in Power Automate, there aren’t any great ways to find out where they are in the first place. Since the beauty of SharePoint is how it empowers users to create, it’s likely that users are making workflows all over and admins have no exposure to it. Today I’m going to show you how to use the SharePoint Modernization Scanner (SMS) to find those Workflows that will soon be shown the door. The SMS is a general tool that helps people already in Office 365 to Modernize individual pieces of the platform. Workflow is one of those pieces.  So while the tool wasn’t meant for exactly this scenario, it fits nicely.

To get started, download the SMS from the link on this page. It’s going to come down as an EXE, there’s no installation. I recommend copying it to its own location. When it creates its logs it creates them in the folder it was run from, and I’ve found it helpful to keep all of that in one place. In the screenshots in this blog post, I copied

SharePoint.Modernization.Scanner.exe to D:\SMAT. When you run the tool without any parameters it guides you through a UI Wizard. The first decision you have to make is how you’re going to authenticate against your tenant.

image 

The default option is “Azure AD App Only” and it’s my recommendation that you go that route. You’ll notice there’s a very comfy looking “Username and password” option farther down the list. It’s tempting to go that route, as it’s much easier, but if you’re running the tool seriously in production, go to the extra work and create an App Registration for it. If there’s interest, I might do a blog post on that, too. It’s less scary than it seems. Here’s what my screen looked like all filled out.

image 

The Application ID can be copied directly from the Overview page of the App Registration itself. The domain is the Azure AD domain, and it will most likely be a *.onmicrosoft.com address. This can be a bit confusing since we’re doing all of this in the context of SharePoint. It can feel like you should use tenant.sharepoint.com, but that won’t work. The App Registration is an Azure AD thing that happens to work with SharePoint. If you’re not sure what the correct Domain is, go to the Azure Active Directory Dashboard Overview page and find Primary Domain.

image 

You will also need the PFX file for the certificate that was used for the App Registration, and the password for that cert.

After you’ve entered that hit Next. The next screen lets you choose which Site Collections you’ll be scanning. The environments I’ve run this on are small enough that I’ve been able to stick with the “Complete Tenant” option, but you can also choose them individually or feed the tool a CSV file. These options are handy if your tenant is large. You also need to enter your SharePoint tenant name in this screen.

image 

The next screen is the whole reason we’re here, to scan those Workflows. The tool can find all manner of objects that can Modernized, and I encourage you to scan for all of them at some point, but I just chose Workflows to speed things along.

image 

The final screen has some options. I always go with the defaults.

image 

Hit “Start scan” and then anxiously await the report. It’ll look like this.

image 

Maybe pop some popcorn. It might take a minute. Finally you’ll get this:

image 

If you want to run it all from the command line like a hot shot, run this command with your own values in place of mine.

.\SharePoint.Modernization.Scanner.exe --azuretenant M365x541279.onmicrosoft.com --certificatepfx "d:\smat\SMAT App Reg.pfx" --certificatepfxpassword pass@word1 --tenant M365x541279 --mode WorkflowOnly --clientid a204b312-c2a9-4a47-861c-b0c874e8219a

If you're running version 2.14.0.0 or later you need to change the operation to WorkflowWithDetailsOnly. Starting in 2.14.0.0 WorkflowOnly gives fewer details about the individual Workflows. My 2.14.0.0 and later command line looks like this:

.\SharePoint.Modernization.Scanner.exe --azuretenant M365x541279.onmicrosoft.com --certificatepfx "d:\smat\SMAT App Reg.pfx" --certificatepfxpassword pass@word1 --tenant M365x541279 --mode WorkflowWithDetailsOnly --clientid a204b312-c2a9-4a47-861c-b0c874e8219a​ 


It looks like this:

image 

Once the scanner is finished it’ll drop a bunch of files into the folder listed above. Mine looked like this:

image 

Since we only care about Workflows we can jump right into the ModernizationWorkflowScanResults.csv file and see where workflows are hiding out in our tenant. You may also want to give Errors.csv a once over just to see if everything went fine. Here’s my workflow report:

image 

The report is pretty good. We can see I have two workflows, one 2010 and 2013. We can see which site and list they’re in. We can also see that the 2010 is published (Enabled) and the 2013 is only saved. If you go farther to the right there are also columns that indicate when it was changed last. Lots of good information there. At this point you’ll probably want to reach out to the site owner and have them verify if the Workflow is being used. You or they will have to connect with SharePoint Designer (still free) and start figuring out how to turn that workflow into a Flow.

I could end the blog post here. I’ve delivered the promised content, and did a fine job if I do say so myself. You’ve gotten your money’s worth. Smile I want to add one additional bit though. In that same report directory is Office 365 Classic workflow inventory.xlsx. That’s another Excel document with workflow information, but it uses a fancy Pivot Table to show it. You and I, we’re technical folks. The raw spreadsheet with sites and lists is what we wanted. But we likely have bosses (with or without pointy hair) and they like pictures. That’s where this last file comes in. Open up Office 365 Classic workflow inventory.xlsx and click “Enable” in the bar at the top. When you click Enable the spreadsheet will load the information from the ModernizationWorkflowScanResults.csv file and make it look all pretty.

image 

That version will look better on a PowerPoint. You’ve got some filters to play with, really put some polish on it. Smile 

Hopefully this will help you chase down the SharePoint 2010 and 2013 Workflows in your Office 365 tenant. Let me know how it worked. You can leave a comment here, or reach out on Twitter at @toddklindt.

tk

ShortURL: https://www.toddklindt.com/FindO365Workflows

Edit (7/9/20): Edited to replace wrong tool name with SharePoint Modernization Scanner.

Edit (7/10/20): Edited to add command line syntax.

Edit (7/27/20): Edited to add the 2.14.0.0 and later command line syntax.

  
No presence informationTodd O. Klindt7/6/2020 9:37 PMOffice 365; SharePoint4 

Workflow Retirement Series TOC​

Part 1 - SharePoint 2010 and 2013 Workflows Kaput in Office 365
Part 2 - Finding All the SharePoint 2010 Workflows in SharePoint Online
Part 3 - Find Only the Active SharePoint 2010 Workflows in SharePoint Online 
Part 4 - Use PowerShell to Work with SharePoint 2010 Workflow Scan  ​


Hot off the presses! Today Microsoft announced the SharePoint 2010 workflow retirement in Office 365. They sort of buried it, but SharePoint 2013 workflows are meeting the same fate. Here’s a quick breakdown of the dates where stuff stops working:

SharePoint 2010 workflows turned off for new tenants

August 1, 2020

SharePoint 2010 workflow turned off for ALL tenants November 1, 2020
SharePoint 2013 workflow turned off for new tenants November 1, 2020
SharePoint 2013 workflow turned off for ALL tenants TBD

The following built-in workflows will also be removed; Approvals, Collect Feedback, Collect Signatures, Classic pages publishing Approval, and Three-state.

How do you know which workflow engine your workflows are using? It doesn’t really matter. They’re both going away. They should both be replaced with Power Automate flows. If you’ve been putting it off, now is the time to get on it. You do, however, need to know where all of these workflows are in your tenant. Microsoft has a tool, the SharePoint modernization scanner, that will search out classic workflows, among other things. It’s pretty painful tool to use, so I wouldn’t break it out late in the afternoon on Halloween. If I’m feeling sadistic, I may make a walkthrough of it. Once you have a good handle on where the workflows are being used in your tenant you can decide which ones to jettison, and which ones get to be reborn into flows.

Let me know what you think about it. Let me know how this impacts you. The July 15th, 2020 episode of Ask Sympraxis will cover this topic. Join us. It’s free. It’ll be a hoot, and worth every penny you spend on it.

tk

https://www.toddklindt.com/SP2010Workflows

  
No presence informationTodd O. Klindt6/1/2020 3:34 PMOffice 3650 

Every couple of weeks me and my fellow Sympraxians get together on Wednesday for an open forum we call Ask Sympraxis. Anyone can get on and chat with us. We take questions to seed the discussion and then we all sit around and chat. If you’re not already attending, we’d love for you to join us. You can add it to your calendar, or you can just jump into the Teams meeting the first and third Wednesday of the month at 11:30 Central Time.

If you want to get some free advice from us, or just talk about how great Marc’s hair is, stop by and say hello.

tk

ShortURL: https://www.toddklindt.com/AskSympraxis

  
No presence informationTodd O. Klindt5/21/2020 11:26 AMPowerShell; Office 3650 

I recently had a fun task come across my desk. A customer of mine has a large tenant, with a lot of Power Apps and a lot of Power App makers. They’re doing a tenant migration, and the Power Apps themselves will likely move over pretty easily. A lot of them are connecting to the tenant’s SharePoint site, and after the tenant move those SharePoint URLs are going kaput. The customer wanted to be able to find out which Power Apps were going to be broken so they could reach out to the owners to get them fixed. That’s where I, and my PowerShell prowess came in.

I had whipped up some quick and dirty PowerShell for this customer before so they asked if I could work my magic with this. I have dabbled a bit with the Power Apps and Flow Power Automate PowerShell in the past, and while I found it… lacking, I figured this was something it could handle. Here is the PowerShell I eventually went with:

Get-AdminPowerApp | ForEach-Object { if (Get-AdminPowerAppConnectionReferences -EnvironmentName $(Get-PowerAppEnvironment).EnvironmentName -AppName $_.AppName | Where-Object -Property ConnectorName -EQ -Value "shared_sharepointonline") {$_ | Select-Object DisplayName, @{Label="Owner";e={$_.Owner.displayName}},@{Label="Email";e={$_.Owner.userPrincipalName}}, AppName }}

Here’s what it looks like when it runs:

image

I have the following two Power Apps modules installed with these versions:

2.0.61 Microsoft.PowerApps.Administration.PowerShell
1.0.9
Microsoft.PowerApps.PowerShell

(Full list of Office 365 PowerShell modules)

You’ll get prompted to log in. The account will have to have the necessary permissions to enumerate all of the Power Apps in the tenant.

I know what you’re thinking, “Todd, that’s amazing! Solid work! I hate to seem greedy, but, um, where is the URL of the SharePoint site the Power App is connecting to?” That’s a funny story, but the punchline is, there isn’t a way. At least not from the PowerShell modules we have today. Apparently the Center of Excellence Starter Kit has a way to get that information, but it’s a really big hammer for a nail this small.

This will work for any of the Connectors. You can use the following PowerShell to see all Connectors that are in use:

Get-AdminPowerAppConnection | Select-Object ConnectorName

That will give you the value you need to search for with the Where-Object. If you’re looking for more ways to abuse Power Apps and Power Automate with PowerShell (so many Powers there) you can watch Shane’s so-so PowerShell for PowerApps and Flow video. It’s okay. I guess. In a pinch.

Enjoy.

tk

ShortUrl: https://www.toddklindt.com/PoshFindPowerAppsConnectors

  
No presence informationTodd O. Klindt4/17/2020 12:55 PMPodcast0 

Today Todd has Marc Anderson from Sympraxis on to talk. They start with talking about the changes taking place everywhere with the response to the virus. They do talk a bit about technology while talking about how this has impacted the way everyone works. They do spend a little time talking about Teams updates that are coming as well as an event they're doing to try to stay connected. And talk a bit about community content to share real world solutions.

Recorded 4/8/2020

Audio File

Video File

Podcast 454 - Quarantine Beard (Time 0_24_14;21)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 47:07

Links:

27:00 SharePoint Mobile App Branding
26:55
Microsoft Monitoring Cloud Services
40:03
Ask Sympraxis
41:48
Microsoft 365 Community Content

ShortURL: https://www.toddklindt.com/Podcast454

  
No presence informationTodd O. Klindt4/14/2020 3:20 PMPodcast0 

Much life all of life these days, today's podcast focuses on the Covid-19 pandemic and its impact on technology. Todd talks about Microsoft's response and some ways you can stay connected.

Recorded 3/25/2020

Audio File

Video File

Podcast 453 - Holes All Over My Walls (Time 0_23_11;07)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 39:36

Links:

The Intrazone - Crisis Management and Remote Work
Teams Thursday virtual events
My own presence indicator
Teams Presence Publisher

ShortURL: https://www.toddklindt.com/Podcast453

  
No presence informationTodd O. Klindt4/10/2020 1:08 PMPodcast0 

This week Shane is busy and Todd is taking over on his own for a while. He is able to share some of the things he's been dying to talk about for a while. Things like a change in the default sharing for OneDrive, Web Apps in Chromium Edge, and then of course focusing on PowerShell 7. Then he talks about the current world crisis and how Microsoft is trying to help. Wrapping up with some talk about Tesla and where he's going to be speaking in the coming months.

Recorded 3/11/2020

Audio File

Video File

Podcast 452 - Just Be Me (Time 0_13_42;17)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 35:49

Links:

02:41 "People with Existing Access" will be the default when sharing a file
05:19
Installing Web Apps on Chromium Edge
12:23
PowerShell 7 and a Whole Lot More
15:00
Office 365 PowerShell Module Installs
18:00
How To Use PowerShell ISE Mode In Visual Studio Code
23:43
Microsoft Teams Giving Away Paid Features for Six Months Due to Coronavirus
28:50
Crisis Communication Power App
30:38
Free Supercharging for Tesla Model S purchases
34:10
SharePoint Conference
34:35
Techorama Belgium

ShortURL: https://www.toddklindt.com/Podcast452

  
No presence informationTodd O. Klindt4/1/2020 1:26 PMOffice 365; PowerShell; Speaking0 

In these times of uncertainty and trouble we all need something to feel good about. You know what makes me feel good? PowerShell, that’s what. Tomorrow, April 2nd, at 11:30 CDT, I’ll be remotely presenting my fan favorite “PowerShell with Office 365” presentation for the Omaha SharePoint User Group. Even if you’re not quarantined in Omaha, I’d love for you to join me. I’ll be telling you how I use PowerShell and sharing scripts for you to quietly make fun of.

Here is an ICS file to add the Teams meeting to your schedule. If you’re a crazy person and want to throw caution to the wind, here’s a direct link to the Teams meeting itself.

Thanks to David and Amber at the Omaha SPUG for inviting me. I appreciate it.

tk

ShortURL: https://www.toddklindt.com/OmahaSPUGtalk2020

  
No presence informationTodd O. Klindt3/27/2020 1:52 PMPodcast0 

Shane and Todd are busy this week talking about a lot of fun technology stuff. They start off talking about how they're almost caught up to catching up in production. And then dive into some technical fun about Windows updates followed by some ChrEdge goodies and wrapping up with all the fun you can have with some phones and new apps.

Recorded 2/19/2020

Audio File

Video File

title clip 

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 43:15

Links:

04:20 UN SharePoint Hack. Should I worry?
28:10 Microsoft’s Unified Office App for Android Now Available to Everyone
31:55 Samsung Galaxy Z Flip, Microsoft Your Phone could change the way you use mobile tech

ShortURL: https://www.toddklindt.com/Podcast451

  
No presence informationTodd O. Klindt3/25/2020 4:44 PMTech Stuff; IoT4 

With all of the working from home that’s going on, and all of the kids not going to school, it can be tough to keep the latter out of the former. In my continuing practice of making things more complicated than they need to be, I came up with a way for my kids to know they should not go down into the basement.

20200320_141751 

Come on down. And…

20200320_141733 

You shall not pass!

I posted those pictures on Facebook and a few friends asked me what I was using. It’s not as complicated as I’d like it to be, but it’s a work in progress. I can control it with an IR remote, an app on my phone, and with my digital assistant, Alexa. When I’m at my desk I only need to bark out, “Alexa, set busy lights to Red!” and she does.

I cobbled my solution together with parts I already had in “that damned box.” Since some of you don’t have that box (I feel so bad for you), here’s a link to a comparable package, Nexlux LED Strip Lights. If you want to put your own package together you’ll need three pieces; a power supply, a controller, and an LED light strip. You’ll find a nearly endless supply of combinations of those on Amazon. I used double-sided tape to stick the light strip to the door frame. The light strip has adhesive on the back, but my experience has shown that the heat from the LEDs degrades that adhesive pretty quickly.

I mentioned above that I have a few ways to change the light colors based on the controller I have. There is the included IR remote, the included app, and Alexa integration. Right now I don’t have any automation set up where the lights change based on my presence in Office 365 or my calendar. That may come later.

I was telling a friend of mine about this. He’s less inclined to nerd out on things like this. His loss. He thought he might just connect a string of Christmas lights up to a smart plug and get the same result. That would work too and would have all the same integration points depending on which smart plug you get. I have a few Wemo smart plugs from Belkin and they’ve treated me pretty well. They also integrate with IFTTT so I can have them flash a lamp when the garage door opens, fun things like that.

If this article was interesting, let me know. I’ll post some of my other home automation projects.

I've seen a couple of blog posts of people that have done this better than I have. Check out April Dunham's post​ on it and also Elio Struyf's

tk

ShortURL: https://www.toddklindt.com/SmartBusyLight

  
No presence informationTodd O. Klindt3/25/2020 2:35 PMPodcast0 

Shane and Todd are back. They start with a summary of where all the podcasts have been hiding lately. Todd shares the total of the birthday charity drive this year. Then we talk about ChrEdge and how easy it is to question whether something is real or fake anymore. Wrapping up with a quick summary of upcoming events where one or both of them may be found.

Recorded 2/12/2020

Audio File

Video File

Podcast 450 - The Lost Episodes (Time 0_03_36;17)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 46:22

Links:

22:55 Microsoft relented on Bing-Jacking
36:45 Home Stallone [DeepFake]

ShortURL: https://www.toddklindt.com/Podcast450

  
No presence informationTodd O. Klindt3/24/2020 1:51 PMPodcast0 

ChrEdge, PowerShell, and the Super Bowl top the topics on this week's Podcast.

Recorded 2/5/2020

Audio File

Video File

Podcast 449 - One Big Hot Blob (Time 0_31_27;22)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 44:07

Links:

PowerPoint Live Presentations
SharePoint Continues to push you to Modern
Intro to Microsoft Forms

ShortURL: https://www.toddklindt.com/Podcast449

  
No presence informationTodd O. Klindt3/23/2020 4:19 PMPowerShell; Office 3650 

I recently was working on a customer project and I was trying to find the name of a certain SharePoint list item property. (Spoiler, it was “_ModerationStatus”) I knew it was hiding in the item’s FieldValues property, but I wasn’t sure where. To get you up to speed, here’s the PowerShell that got me to this spot:

Connect-PnPOnline -Url https://m365x246038.sharepoint.com/sites/ContosoWeb1
(Get-PnPListItem -List "SitePages" -Id 5).FieldValues

SNAGHTML155621a

Not only is the list of FieldValues as long as my kids’ Christmas Lists, also like those lists, it’s not in alphabetical, chronological, numerical, or any other order I can conjure up. To say it’s random seems to be giving it more order than it really has.

While I didn’t know exactly was the name of the property I did have a few ideas. Trying to find those random property names would make swimming upstream look like a piece of cake. Fortunately I’ve fought this battle before and I have the scars to prove it. I’m hoping I can save you all the pain I went through, over and over.

The secret is the GetEnumerator() Method of the Hash Table. This got me what I was looking for:

(Get-PnPListItem -List "SitePages" -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key

SNAGHTML17b6b87

Isn’t that much better?

Once you introduce .GetEnumerator() into the picture you can also get crazy with things like Where-Object, like this:

(Get-PnPListItem -List "SitePages" -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key  | Where-Object -Property Key -Like -Value "*mod*"

or

(Get-PnPListItem -List "SitePages" -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key  | Where-Object -Property Value -Like -Value "true"

SNAGHTML1825780

Normally you would put the Where-Object before the Sort-Object so that the Sort has fewer items to churn through.

While I did this in the context of a hash of SharePoint list item properties, it’s applicable to all PowerShell hash tables.

Happy PowerShelling.

tk

ShortURL: https://www.toddklindt.com/PoshSortHashTables

  
No presence informationTodd O. Klindt3/23/2020 9:52 AMPodcast0 

Chromium Edge, Windows 7 is dead, and everyone should love Microsoft Forms.

Recorded 1/15/2020

Audio File

Video File

Podcast 448 - Never Go Barefoot (Time 0_01_43;28) 

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 40:05

Links:

16:54 Windows 7 is dead

ShortURL: https://www.toddklindt.com/Podcast448

  
No presence informationTodd O. Klindt3/5/2020 2:28 PMPowerShell0 

I’ve been saying for years that you can’t be a good SharePoint or Office 365 admin without having a firm grip on PowerShell. I don’t just say that so you’ll come to my PowerShell sessions at conferences, I really believe it. In the last couple of days there have been a flurry of PowerShell updates and in this blog post I’m going to call them out, in no particular order.

PowerShell 7 is released (Download)

PowerShell Extension for VS Code (Setup instructions)

While you’re downloading all that PowerShell goodness you might as well include this:

Windows Terminal Preview

As always you can go to my blog post Office 365 PowerShell Module Installs to see which PowerShell modules I use with Office 365.

Happy PowerShelling.

tk

ShortURL: https://www.toddklindt.com/PowerShell7andmore 

  
No presence informationTodd O. Klindt2/20/2020 3:53 PMPodcast0 
  
No presence informationTodd O. Klindt2/19/2020 3:22 PMTech Stuff; Office 365; Windows 101 

When Windows 10 came out I found out I had a pretty healthy dislike for the Edge browser that came with it. My dislike turned into public mocking and shaming. I was a Chrome man, like my father before me, and Edge had no chance of supplanting it as my browser of choice. No one liked Edge, probably not even Edge’s mother, and we all got a good chuckle at its expense.

And then Edge didn’t suck anymore.

In December of 2018 Microsoft announced that it was going to move to the Chromium engine for Edge. I remembered being pretty “Meh” about the announcement. It was confirmation of what I had always said, Edge was a stinker, and I was already using Chrome which was built on top of the Chromium engine, obviously, so what on Earth could Edge possibly offer me? I was about to find out.

Last year at Ignite Marc was telling me how he was using the Chromium Edge (henceforth affectionately referred to as ChrEdge) and he liked it. I asked him what was so great about it, besides it not being the crappy Edge. He slow played it and said “nothing much,” but that he enjoyed it. I kept my eye on it though. Considering how much work I do with Microsoft web technologies I had to. Plus I really like making fun of stuff, and if the first Edge was any indication, this Edge was going to find itself in my crosshairs too.

Then it grew on me.

The first thing I really liked about ChrEdge was not only did it have the profiles that I used constantly in Chrome, it allowed me to set up the Sync for those profiles with Microsoft accounts. That made my ears perk up. Most of my work is with Microsoft accounts and this made things a lot easier. I started using ChrEdge more and more each day.

And then it did the undoable, it made me hate Microsoft Teams less!

If there’s one new Microsoft technology I would complain about more than legacy Edge, it was Teams. I don’t want to get into all of my grievances here (it’s a long, long list, and this is a family friendly site) but I will highlight two of them. The Windows Desktop client is excruciatingly slow to switch tenants or identities, and in some cases it will disconnect you from a meeting if you do. Not cool, Teams, not cool. The other thing I hated was if you wanted to do two things at once it was difficult to navigate the interface to do that. For instance two chats, or heaven forbid, a chat and a meeting. And like I mentioned before, if those things were in two different tenants you had to wait for the context switching and your call would get hung up if you were on one. Teams wouldn’t come right out and kick you in the shin when you did it, but I’m sure that’s on the Teams roadmap somewhere.

One day, after a full complement of coffee, I’m sure, I got the bright idea to make the Teams experience suck just a little bit less by opening up the web client. I pointed ChrEdge at https://teams.microsoft.com/ and was able to experience the bliss that is being in a video call with Person A while chatting with Person B. I wasn’t saying anything about about Person A to Person B, I swear.

While I was poking around in ChrEdge I saw this new menu option I had never seen before, Apps. What is this? Chrome doesn’t have this! I clicked it and saw the option, “Install this site as an app!”

image 

I’m the curious sort, I clicked it. Some whirring happened and the next thing I know there’s a new icon in my Taskbar.

image 

The outlined icon, on the left, is the app that ChrEdge installed. The icon next to it is the regular Windows Teams Desktop client. You can see this web app looks like the real app, not like ChrEdge in the Taskbar. The icon is cool and all, but how does the app itself compare? Here’s a side by side comparison.

image 

The ChrEdge web app for Teams is pretty good. In Red I highlighted a couple of the differences between the two. In the lower left the web app has a link to download the full app. Obviously the full app doesn’t have that. Smile The web app also has an extra title bar across the top, which honestly is usually the only way I can tell them apart during the day when I’m flittering about between them. That title bar has a three dot drop down menu that offers some browser specific goodies like printing, zooming, casting, and uinstalling. Nothing obvious is missing from the web app. In Green I highlighted a couple of pleasant similarities. In the upper right of the web app you can see that we can switch tenants just like the full app. This is handy if you are on a call in the full app and want to reply to an IM in another tenant. I also use this to maximize the video in a video call on one screen then have the chat window for that same video call in the web app on another screen. Finally, I was happy to see that the web client can also do audio and video calls just like the full app.  Color me impressed Teams and ChrEdge, color me impressed. <slow clap>

Fresh off of this victorious life hack I started looking for that little “Apps” menu option in other Microsoft web apps. I found it in Outlook, OneNote, and OneDrive, among others. It popped up enough that I knew this wasn’t just a Teams or Office thing. Turns out it’s a web standard called Progressive Web Apps, PWAs. Many companies are taking part in this, not just Microsoft. Microsoft does, though, offer some guidance on making PWAs for Windows.

Since PWAs aren’t simply a Microsoft concoction you can find them all over the Internet. Wikipedia, Disney+, Amazon, and Slack among others have the option of installing a web based PWA.

image 

You may be asking yourself why you’d want a PWA version of something that has a legit app. There are a few reasons. For one, you may be on a platform that doesn’t support the regular app, like a Chromebook or a machine running Windows S mode, like my Surface Go. Or, you just might not want to sully your machine with a big bulky download. Regardless of the reason, they’re worth a look. If you’re on Windows you can find the installed PWAs listed in the “Apps & Features” or at edge://apps in ChrEdge.

image 

I indulged myself in a bit of a PWA sidetrack there. Thanks for sticking around. Long story short, the PWA version of Microsoft Teams in ChrEdge, was a game changer. It made me more productive and lowered my blood pressure by a considerable amount.

tk

ShortURL: https://www.toddklindt.com/ChrEdgeTeams

  
No presence informationTodd O. Klindt2/19/2020 2:15 PMPodcast0 

Todd and Shane are finally back. With the holidays and some conferences, they've had a hard time being able to keep up as well as being able to publish the previous podcasts. They start with catching up on some language fun that they've noticed. They talk about a few technical topics with the Teams changes for private channels and wrapping your head around that, PowerShell for the Graph, and saving files from Power Apps to SharePoint. They also talk about some cord cutting changes. Wrapping up with kicking off the annual TK Birthday Charity Drive.

Recorded 12/18/2019

Audio File

Video File

Podcast 446 - Cascade of Events (Time 0_19_35;22)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 46:49

Links:

05:50 Lexicon Valley
05:51 Because Internet
14:37 SPFest in Chicago
17:48 SysKit Insights
24:17 YouTube TV
36:50 Graph PowerShell
40:35 Save files from Power Apps directly to a SharePoint Document Library
42:42 TK Charity

ShortURL: https://www.toddklindt.com/Podcast446

  
No presence informationTodd O. Klindt2/18/2020 8:37 AMPodcast0 
  
No presence informationTodd O. Klindt2/14/2020 11:14 AMPodcast0 

Shane and Todd talk about PowerApps, cord cutting, and Azure this week.

Recorded 10/30/2019

Audio File

Video File

Podcast 444 - Meh, at Best (Time 0_17_18;12)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 47:14

Links:

Curated PowerApps content
Sony kills Playstation Vue
Hallmark Movies Now
Office 365 User Offboarding Done Right

ShortURL: https://www.toddklindt.com/Podcast444

  
No presence informationTodd O. Klindt1/16/2020 5:21 PMOffice 365; Sharepoint; PowerShell0 

The cat is out of the bag and I’m glad I can talk about it. This picture is worth at least 9 or 10 words:

SPC_2020_SpeakerBanners_KLINDT 

The mighty SharePoint Conference is May 19-21, 2020 at the MGM Grand in Las Vegas.

I’m doing two sessions, PowerShell, a Microsoft 365 Admin's Best Friend and Automating and Standardizing Site Creation with Site Designs and Site Scripts. Both will be amazing, I’m sure.

If you haven’t signed up for SPC yet, first, shame on you! Second, there are still spots. You can sign up here. To really put a bow on that SPC registration, you can use discount code “Sympraxis”. For that, you get $50 off of the already reasonably priced admission, and the eternal love and adoration of the entire Sympraxis gang. Except maybe Mike, he’s a bit prickly. We’re working on him. Marc and Julie are also presenting sessions, so as long they don’t conflict with mine.

Derek and Emily will also be there, so say Hi to them if you see them.

See you there,

tk

ShortURL: https://www.toddklindt.com/SPC20Yippee

  
No presence informationTodd O. Klindt1/8/2020 5:05 PMOffice 3654 

In two previous blog posts I cover how to easily connect to Office 365 with multiple accounts in PowerShell, and in Chrome. Those techniques still work great and I use them daily.

Microsoft will soon be releasing a new version of the much maligned Edge Browser. The new version will be based on the Chromium engine, and along with that it inherits some great functionality. One of those features is Profiles. This means all of the techniques you use in Chrome to manage your Office 365 users works exactly the same. If you are already running the Chromium Edge (lovingly referred to as “ChrEdge”) beta, you can go to t​his page, edge://settings/profiles, to manage the Profiles, or click the Profile icon in the upper right corner of the browser. 

An added benefit of Microsoft’s added touch to the Chromium Profile engine is that you can sync settings with an MSA (Microsoft Account) account like your old school @hotmail.com account. You can also sign in with an Azure AD account, which we all have courtesy of Office 365. I’ll blog more about that later as it’s a feature I’m really excited about.

tk

ShortURL: https://www.toddklindt.com/ChrEdgeProfiles

  
No presence informationTodd O. Klindt11/18/2019 5:42 PMPowerShell; Office 3650 

I’ve recently been working with a customer migrating some content from one SharePoint Online Site Collection to another. They have a lot of content, so automating the migrations with PowerShell was really the only we’d be able to get all of their content migrated before we died of old age. Part of what they wanted migrated over was the custom views they had in their Document Libraries. A couple of extra columns here, a grouping there, nothing too complicated. I fired up PowerShell (really VS Code) and started noodling.

Whenever I’m trying something new in PowerShell I have a standard process. I do a Get-Command to see if there’s a cmdlet that does what I need. In this case there were four cmdlets that piqued my interest, Add-PnPView, Get-PnPView, Remove-PnPView, and Set-PnPView. The process seemed super easy, do a Get-PnPView on the source View, gobble up all the details, then spit them back into Add-PnPView on the other site collection. Easy Peasy. Until it isn’t.

Here’s what the view looked like, roughly.

image

I didn’t do much to it. I added a couple of columns, Created By and File Size and set the view to group by Created By. Pretty standard stuff. Here’s what Get-PnPView told me about said view:

image

I can see the columns I added in the ViewFields property, but there’s no sign of the grouping anywhere. Knowing what I know about SharePoint I know that information is stored in a Query, but the ViewQuery property is conspicuously empty. What gives? The PnP, in an effort to be efficient, doesn’t download all of the property values for the objects we get. It downloads the schema, and then a subset of the properties that it thinks you’re most likely to use. What’s a fella to do if the thing you need is not in the PnP’s favorite list of properties? You break out one of the PnP’s overlooked gems, Get-PnPProperty.

image

Here’s the code for it all:

Connect-PnPOnline -Url https://toddklindt.sharepoint.com/sites/8884aced -Credentials Me
Get-PnPView -List Documents
Get-PnPView -List Documents -Identity 3c4126aa-d2fe-4b57-9a70-e03ebb9c76ef
$view = Get-PnPView -List Documents -Identity 3c4126aa-d2fe-4b57-9a70-e03ebb9c76ef
$view
$view | select *
$view.ViewQuery
Get-PnPProperty -ClientObject $view -Property ViewQuery
$view.ViewQuery
$view
$view | select *

Not only does Get-PnPProperty get the value of the Property, but it also populates the property in the variable. If you’re getting a collection of objects and need to pull one property for each of them it looks like this:

Get-PnPView –List Documents
$viewlist| ForEach-Object { Get-PnPProperty -ClientObject $_ -Property ViewQuery, ListViewXml }

That hydrates the ViewQuery and ListViewXml property for all of the objects in $viewlist.

image

It snuck some other properties in too, but I don’t mind.

In this case I was using the View object, but this method is necessary for any PnP object. In the past I’ve had to use it with PnPFile and PnPLists. Sometimes the PnP gives you an error message telling you you need to get the property value, sometimes it’s just empty and you have to know. Either way, it’s worth trying to get the property’s value with Get-PnPProperty.

tk

ShortURL: https://www.toddklindt.com/PoshGetPNPProperty

  
No presence informationTodd O. Klindt10/31/2019 3:24 PMPowerShell; Office 3650 

I was recently dealt a fun task from a customer. They had a site in SharePoint that had a few links in the Quick Launch (left nav, quick nav, whatever) and they wanted to copy the Quick Launch from another site to it. They wanted to keep the existing links below the new ones. Here are some pictures to help it all make sense:

I want to copy these links:

image

and put them on top of these links on another site.

image

Of course I immediately thought of your friend and mine, the PnP PowerShell for this task. Sure enough, there are cmdlets for that, Get-PnPNavigationNode and Add-PnPNavigationNode. Just what the doctor ordered.

Add-PnPNavigationNode is pretty basic and I had to work a bit to get exactly what the customer wanted. When you add a Navigtation node with Add-PnPNavigationNode it puts it at the end of the list, which makes sense. You can also throw the switch parameter, –First, to put it at the top. In most situations that probably is fine, but mine was tricky. I didn’t want to put the copied nav nodes at the end, I wanted the existing ones to stay there. I also couldn’t just add them all as –First because then they would end up at the top, but in backwards order. When I get the old nav nodes with Get-PnPNavigationNode it returns them in their correct order, so as I walked through them with Foreach the first one would be added on top, but then the second one, also with the –First switch, would end up on top, and so on. Enter [array]::Reverse.

The Array class in PowerShell has quite a few tricks up its sleeve in the form of operations, and Reverse is one of them. If you want to see the rest, go to this page, or type [array]:: in a PowerShell host and tab through the list. It’s quite impressive. 

Here’s what my code looked like:

$oldsiteurl = “https://contoso.sharepoint.com/sites/8884aced
$newsiteurl = “https://contoso.sharepoint.com/sites/PublicTest


$oldsite = Connect-PnPOnline -Url $oldsiteurl -Credentials Compliance -ReturnConnection
$newsite = Connect-PnPOnline -Url $newsiteurl -Credentials Compliance –ReturnConnection


$oldnavlinks = Get-PnPNavigationNode -Location QuickLaunch -Connection $oldsite

[array]::Reverse($oldnavlinks) # <-- The magic goes here

foreach ($link in $oldnavlinks) {
Add-PnPNavigationNode -Location QuickLaunch -Title $link.Title -Url $link.Url -First -Connection $newsite -External
}

There’s a lot of foundation there, but you can see where the Array reversal fits in. Here’s how it looked when I ran it:

image

And here’s what it looked like after I ran it:

image

There’s a lot more tweaking I can do, like make sure “Home” is still on top, stuff like that, but finding Reverse was an important step in the beginning.

tk

ShortURL: https://www.toddklindt.com/PoshReverseArray

  
No presence informationTodd O. Klindt10/28/2019 10:39 AMPodcast0 

Many important topics are discussed in this week's episode. Shane is excited about the new Meet Now button in Teams and his new PowerApps for SharePoint class. Todd is equally excited about the new version of SnagIt that is out. That and more.

Recorded 10/23/2019

Audio File

Video File

Podcast 443 - Read the History Books (Time 0_18_03;06)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 40:14

Links:

PowerApps for SharePoint People
SnagIt 2020 is here
Office 365 User Offboarding Done Right

ShortURL: https://www.toddklindt.com/Podcast443

  
No presence informationTodd O. Klindt10/25/2019 9:11 AMPodcast0 

Todd and Shane are back after a "break" filled with work. They kick off the technical talk with the announcement of the SharePoint Migration Tool updates. Then they mention some cool fun things with PowerPoint presenter, classes they're working on, and articles that they wrote. Then they talk about some fun updates to the Tesla and how much fun playing with the features can be. They wrap up with a little more technology talk about the Surface event and the new releases announced.

Recorded 10/02/2019

Audio File

Video File

Podcast 442 - Masking Tape on a Stick (Time 0_18_56;04)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 44:01

Links:

07:57 SharePoint Migration adds public preview of 2010
39:29 Surface Laptop 3
39:30 Surface Pro
15:24 Everything you need to know about Office 365 September 2019
16:04 PowerPoint Presenter Coach

ShortURL: https://www.toddklindt.com/Podcast442

  
No presence informationTodd O. Klindt10/23/2019 3:46 PMPodcast0 

Todd airs some grievances, Shane talks about his new iPhone and the maze that is PowerApps licensing. All in this week's podcast.

Recorded 9/25/2019

Audio File

Video File

Podcast 441 - That's Great Feedback! (Time 0_35_15;16)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 39:09

ShortURL: https://www.toddklindt.com/Podcast441

  
No presence informationTodd O. Klindt10/23/2019 11:31 AMPodcast0 

Quick catch up today with Todd and Shane as they have a lot of pressing engagements. They chat a bit about security cameras and some cord cutting updates and the jump in to a lot of SharePoint news on web parts, modern sites, site swaps and some page publishing enhancements. A lot of content in a short time.

Recorded 9/4/2019

Audio File

Video File

Podcast 440 - Special Dance that We Do (Time 0_06_50;04)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 23:04

Links:

03:14 Blink XT2 cameras
15:46 New SharePoint Web Parts
18:34 SharePoint Page Publishing got some enhancements
19:03 Using Invoke-SPOSiteSwap to Swap in a New Root Site in Office 365
19:10 Using Invoke-SPOSiteSwap to Swap in a New Root Site in Office 365 – Follow Up

ShortURL: https://www.toddklindt.com/Podcast440

  
No presence informationTodd O. Klindt10/21/2019 5:26 PMPodcast0 

Todd gives valuable Caribbean vacation advise and demystifies supper for Shane in this week's podcast. After that they cover using VS Code with PowerShell and Azure DevOps, password managers, Ring Cameras, PowerApps, and Shane's disappearing IP address.

Recorded 8/21/2019

Audio File

Video File

Podcast 439 - Handsome Faces and Witty Repertoire (Time 0_21_57;16)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 47:33

Links:

42:27 PowerApps Hide Button based on User
43:05 PowerApps Email Attachments

ShortURL: https://www.toddklindt.com/Podcast439

  
No presence informationTodd O. Klindt10/18/2019 3:17 PMPodcast0 

Todd and Shane are both around this week to talk about some fun technology. They start with a nice SysKit care package and compare notes on how to make sure that they get everything level this time. Then they start with the news about Skype for Business retiring and how Teams has impacted collaboration. They do talk a bit about SharePoint and Office 365 including some PowerApps and Flow licensing changes. They also talk about some PowerShell and dates and how confusing that can be. Wrapping up with talking about the upcoming conferences that they will be attending.

Recorded 7/31/2019

Audio File

Video File

Podcast 438 - No Argument. Shut Up. Boom! (Time 0_27_49;15)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 46:00

Links:

04:02 Skype for Business Online to Be Retired in 2021
09:37 13 Million Daily User in Teams
17:38 How many document libraries shall I have in a SharePoint Site?
22:11 10 things you should do with your office365 demo or dev tenant
25:46 Wrangling Dates and Times with PowerShell
26:00 Video PowerShell Date and Time
33:31 PowerApps and Flow Licensing Update
41:01 Why does it take 4-6 weeks to unsubscribe
SharePoint Roadmap
PowerApps Hide Button based on User

ShortURL: https://www.toddklindt.com/Podcast438

  
No presence informationTodd O. Klindt10/18/2019 1:48 PMPodcast0 

Todd and Shane are finally around to do a podcast since they've both been traveling. This week they talk a lot about Azure Functions and how to wrangle long lists in SharePoint. They then talk a bit about certificates before wrapping up talking about Tesla adventures.

Recorded 7/24/2019

Audio File

Video File

Podcast 437 - Not Restricted by Reality (Time 0_12_26;27)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 43:23

ShortURL: https://www.toddklindt.com/Podcast437

  
No presence informationTodd O. Klindt10/17/2019 8:57 PMPodcast2 

Todd and Shane are back after a brief hiatus that wouldn't even be noticed because of the delays in production. They were both renewed as MVPs, but also talk about some PowerShell, Teams, OneDrive, and Power Platform topics. Wrapping up with a little discussion of all of the fun conferences they're going to in the coming months.

Recorded 7/3/2019

Audio File

Video File

Podcast 436 - Just being Jerks (Time 0_28_03;20)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 48:01

Links:

  1. 08:40 How to Store Windows Credentials with the PnP PowerShell
  2. 11:02 Office 365 PowerShell Module Installs
  3. 40:39 Cloudflare took down part of the internet
  4. 20:46 Teams Client is getting bundled in
  5. 28:00 OneDrive Personal gets new security and more storage
  6. 38:33 PowerApps Business Card Scanner
  7. 39:00 PowerApps Object Detector

ShortURL: https://www.toddklindt.com/Podcast436

  
No presence informationTodd O. Klindt10/16/2019 1:36 PMPodcast0 

Todd and Shane spend a little time this week joking about the logos that could be on Todd's wall, then move into a review of the Microsoft Business Applications Summit. Shane tells us all of the great announcements that came out of the event. They also talk a little bit about SharePoint and Yammer updates as they wrap up the podcast.

Audio File

Video File

Podcast 435 - Be the Idiot (Time 0_33_28;09)

YouTube (Subscribe)

Subscribe in iTunes

04:42 Top 10 Office 365 Best Practices Every Admin Should Know
12:00 Pat the SharePoint Cow
14:09 MBAS Resources
23:20 PowerApps AI is awesome
32.53 PowerApps Portal
42:30 All MBAS Sessions on Demand
43:00 SharePoint hubs limit raised to 2,000
44:58 New Yammer files in Office 365-connected groups will be stored in SharePoint
45:00 How do I tell where my Yammer files are being stored?
51:00 https://www.cartalk.com/radio/letter/texting-abbreviations-elderly

Running Time: 52:17

Links:

ShortURL: https://www.toddklindt.com/Podcast435

  
No presence informationTodd O. Klindt10/16/2019 10:22 AMPodcast0 

Todd and Shane give each other a little bit of a hard time about the way they have their office signs decorated. Then they jump into a bit of technology talking about the Apple announcements and the debates around that. They do talk a bit about the Power Platform, specifically PowerApps, and then their own technology tales of new phones and kids using it.

Recorded 6/5/2019

Audio File

Video File

Podcast 434 - Professional Ineptitude (Time 0_01_08;27)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 50:11

Links:

4:50 Apple announced gold plated hardware? Price seemed that way
27:06 Working with complex SharePoint Columns in PowerApps
27:59 Dell u3415W
45:20 Mississippi PowerShell User Group
47:37 Microsoft Business Application Summit

ShortURL: https://www.toddklindt.com/Podcast434

  
No presence informationTodd O. Klindt7/8/2019 8:40 AMPowerShell2 

PowerShell does a pretty good job handling dates and times due to its good foundation with .NET and its focus on being cool to use PowerShell users. For basic DateTime formatting the help for Get-Date shows some great, easy to use examples.

help Get-Date –Examples

image

There’s –Format, –UFormat, and –DisplayHint, and those are all before we get to the flexibility that is .tostring(). There’s a lot of options, sometimes it’s too many options. Sometimes trying to string together exact combination of time and date information I’m looking for is a lot of work. Once again, PowerShell is there for me in the form of .GetDateTimeFormats()

(Get-Date).GetDateTimeFormats()

It lists out a collection of precanned DateTime formats you can select from:

image

You can use one of those formats just by selecting its index number:

image

That’s the good news. The bad news is that you have to specify which number you want, and there are 133 formats in the list. If the one that really tickles your fancy is #87 you have to count the lines until you get to it.

Until now.

I had danced this dance a few times, squinting to find that just perfect DateTime format I was looking for and counting the lines leading up to it. Then I put my PowerShell mojo to good use and came up with this little gem:

(Get-Date).GetDateTimeFormats() | foreach {$I = 0} { Write-Host "$I - $_" ; $I++ }

Edit 7/9/2019

A helpful reader suggested this even shinier gem:

(Get-Date).GetDateTimeFormats() | foreach-object -begin {$I = 0} -process {[pscustomobject]@{Index = $I;Value = $_}; $I++ }

This lists each format, along with its index number.

image

Once you’ve found the format of your dreams you can look to its left and see what its index is.

(Get-Date).GetDateTimeFormats()[27]

image

If you want to use it with a variable instead of Get-Date, it looks like this:

image

Now you have no excuses for getting exactly the DateTime format you want.

tk

ShortURL: https://www.toddklindt.com/PoshFormatDateTime

  
No presence informationTodd O. Klindt7/2/2019 8:16 AMOffice 365; Sharepoint2 

Another July 1st, another nervous couple of weeks. Fortunately the news this year was good, I was renewed.

SNAGHTML635de263

Microsoft’s MVP Program is a way that they reward non-Microsoft folks for the contributions they’ve made to the community over the last year. I’ve done enough over the last year to meet that high bar, which is something that I’ve aspired to every year since 2006 when I got my first MVP award.

Being in the MVP Program has been great for me. I have learned so much and made some great lifelong friends. It has been lifechanging.

Congratulations to the other renewed and newly awarded MVPs.

tk

ShortURL: https://www.toddklindt.com/2019MVPAward

  
No presence informationTodd O. Klindt7/1/2019 9:49 AMOffice 365; PowerShell2 

A few months ago I wrote one of my favorite blog posts, Connecting to Office 365 with Multiple Accounts in PowerShell without Losing Your Damned Mind and I think it’s safe to say that no damned minds have been lost connecting to multiple Office 365 tenants since. A lesser man might have stopped there. He might have felt his mark on the world was made and he might just bask in the glory of all of that love and adoration. Not this guy. Today, I present you an even better way to connect to Office 365 with multiple accounts in PowerShell without losing your damned mind and without loading any additional modules!*

*(as long as you already have the PnP PowerShell module installed, that is)

Between that fateful day and today the delightful folks that work on the PnP PowerShell module have added three cmdlets that work with Stored Credentials, Add-PnPStoredCredential, Get-PnPStoredCredential, Get-PnPStoredCredential.

image

While the PnP cmdlets themselves have been able to pull credentials directly out of the Credential Store you still needed an external module to pull credentials out for use with other modules, namely the Azure AD and MSOnline modules and the SharePoint Online module. I previously met that need with the Credential Manager module. Let’s see how it looks.

Use the Get-PnPStoredCredential cmdlet to retrieve a stored credential by name. I’ve only had it work if I specify the –Type parameter with the PSCredential value.

$creds = Get-PnPStoredCredential -Name MODAdmin -Type PSCredential

You can output the $creds object to make sure it it grabbed the account you expected. Then you can pass that object to another cmdlet, like Connect-AzureAD and use it to authenticate.

Connect-AzureAD -Credential $creds

Here’s how it looks.

image

I haven’t loaded the Credential Manager module since the stored credential cmdlets showed up in the PnP Module. I already have the PnP module installed everywhere, so it seems unnecessary.

Happy Credential Storing.

tk

ShortURL: https://www.toddklindt.com/PoshMultipleAccountsPnP

  
No presence informationTodd O. Klindt6/17/2019 8:52 AMOffice 365; SPDocKit0 

This is a blog post, about a blog post. Smile I recently published a blog post, “Migrating to Office 365 Checklist” for SysKit and I thought I’d better let all of you, my faithful blog readers know about it too, in case you didn’t see it. SysKit has been publishing a lot of great content in addition to the stuff of mine they’re publishing. Another of my favorites is, “Top 10 Office 365 Best Practices Every Admin Should Know” from Toni Frankola.

Check out my article and let me know what you think.

tk

ShortURL: https://www.toddklindt.com/MigO365Blog

  
No presence informationTodd O. Klindt6/4/2019 4:41 PMPodcast0 

Todd and Shane are back together after a few weeks with one or the other or both being away. They talk about all the cool stuff announced at the SharePoint Conference North America. Then they talk a bit about some of their home networking stuff. Lots of fun content.

Audio File

Video File

Podcast 433 - CDXXXIII (Into a Dutch Canal) (Time 0_11_09;01)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 49:26

Links:

Microsoft Search
OneDrive Announcements
SharePoint Home Sites
SharePoint On-Prem in Azure IaaS can use SQL PaaS
Working with complex SharePoint Columns in PowerApps
Microsoft Business Application Summit

ShortURL: https://www.toddklindt.com/Podcast433

  
No presence informationTodd O. Klindt6/4/2019 2:42 PMPodcast0 

Todd runs the show by himself this week. Talks about a few recent announcements from members of the PG for SharePoint Online, some fun stuff to help admins with flow, and then he covers a few announcements made at Build. He talks a little more about the Ubiquiti network configuration and how that works and then wraps with some of the community events.

Audio File

Video File

Podcast 432 - Intimate Podcast (Time 0_20_15;01)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 32:23

Links:

SharePoint Online Can Now Rename Site URLs
Making lists in SharePoint just got easier
Welcome to Microsoft Search
New Fluid Framework
Companion devices to the rescue – Microsoft Teams
Create A Flow That Finds Your Flows
Create A Super Finder Microsoft Flow
SPS Nashville
SPS Charlotte
Microsoft Business Application Summit
PowerScripting Live

ShortURL: https://www.toddklindt.com/Podcast432

  
No presence informationTodd O. Klindt5/13/2019 1:35 PM0 

I can’t believe it’s almost here! The SharePoint Conference 2019 is next week in Las Vegas. If you’re going to be there, and you’d like to hang out here are a couple of events I’ll be at:

Monday May 20th - SharePoint Administrator Day Camp – That joker Shane and I are doing an all-day workshop on SharePoint Administration. There are still seats available. ($500 on top of regular conference registration)

Tuesday May 21st 10:45 – 11:30SysKit Q&A at the SysKit Booth – I’ll be hanging out with my buddies at SysKit chatting about how great Office 365 is, how great the SysKit product line is, and how much we all like chocolate. Swing by, say hi and get some swag.

I’ll also be wandering around spreading good cheer. If you want to catch up email me or tweet me @toddklindt.

See you next week.

tk

ShortURL: https://www.toddklindt.com/SPC2019Meetup

  
No presence informationTodd O. Klindt5/10/2019 10:48 PMPowerShell3 

One of the great things about PowerShell is how easy it is to extend it with modules. The only thing greater is all the modules that are out there. I have a bunch that I use on a daily basis, I couldn’t live without them. But in today’s rapid development cycle it’s easy to get behind on your favorite modules. I wrote this blog post to help people keep up with the Office 365 related PowerShell modules I use, but from what I understand there are other technologies out there with their own suite of modules that people want to keep up with. To help those folks out, I thought I’d share how I keep up to date with my favorite modules.

This method only works with modules that are installed from a repository. If a module has been installed some other way, like with an MSI or EXE you’re out of luck.

The key to this magic is a group of cmdlets that deal with modules, particularly Find-Module and Update-Module. That’s why it only works with modules installed from a repository with Install-Module. To find the relevant cmdlets run:

Get-Command -Noun module

and

Get-Command -Noun InstalledModule

Here’s how I stitch them together to get a list of modules that have updates:

     Get-InstalledModule | foreach { $b = (find-module $_.name).version ; if ($b -ne $_.version) { Write-host "$($_.name) has an update from $($_.version) to $b" } }

Let’s break that down.

Get-InstalledModule

Gets all of the modules that have been installed from a repository.

| foreach

Pipes them all l through a foreach loop.

$b = (find-module $_.name).version

Grabs the current published version of the module in the loop.

if ($b -ne $_.version)

Checks to see if the published version is the same as the Version property of the installed module.

{ Write-host "$($_.name) has an update from $($_.version) to $b" }

If they are not equal, it writes out the module name, the installed version, and the current published version.

It looks like this:

image 

In screenshot I ran Get-InstalledModule to show its full output, then the full command and its output.

Now we know which modules can be updated. We can update an individual module like this:

Update-Module SharePointPnPPowerShellOnline –Force

That will update the SharePointPnPPowerShellOnline module and won’t yell at us because it’s replacing an existing one. If the module has been installed with the “AllUsers” scope (the default) you’ll need to run the Update-Module cmdlet in an Administrator prompt.

image 

Now if I run my command it will not report that that the SharePointPnPPowerShellOnline module has an update.

image 

It would be easy to replace the “Write-Host…” part of the command with “Update-Module $_.name” and have it update them automatically. I didn’t do that mainly because the PowerApps modules’ install is a little hinky and requires some extra handholding. If you don’t have them installed, or you want to upgrade them manually first, you could have the command update them automatically.

I hope you’ve found this helpful.

tk

ShortURL: https://www.toddklindt.com/PoshUpdateModules

  
No presence informationTodd O. Klindt5/8/2019 9:09 AMPodcast0 

Todd and Shane are back this week. They start with a few new things in SharePoint, sticky columns and the round-up announcements. There was a lot of talk about cloud security and recent hack announcements. Then they talk about some personal technical challenges with 3D Printing and home networks. Finishing up with the community events and self-promotion.

Audio File

Video File

Podcast 431 - It's about Time (Time 0_00_41;13)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 1:08:12

Links:

Chris's April Round-Up for SharePoint
Hackers went undetected in Citrix's internal network for six months
Edge Chromium added Chromecasting
Cloud Key Gen 2 Plus
Unifi Security Gateway
8 Port switch with POE
2 x AC LR AP (access points)
SPS Nashville
SPS Charlotte
SharePoint Saturday Atlanta
SharePoint Conference NA
Microsoft Business Application Summit

ShortURL: https://www.toddklindt.com/Podcast431

  
No presence informationTodd O. Klindt5/6/2019 3:08 PMPodcast0 

In this epic episode, Shane and Todd talk about "kids these days" and the effect they are having on everything from how SharePoint is organized to break new cell phones. Maybe not that dramatic but, you get the idea. Google G Suite is made fun of and Todd sets up his new printer. All of that and more. And if you are into Game of Thrones check out the bonus content at the end where the guys talk about episode 2.

Audio File

Video File

Podcast 430 - Everything is Shared (Time 0_00_26;29)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 1:11:14

Links:

Archive Hub Sites
Google G Suite to Office 365 migration tools
Files restore for SharePoint and Microsoft Teams
Outlook’s Option to End Appointments and Meetings Early
Foldable Phones Fail
PowerApps Attachments
SPS Nashville
SPS Charlotte
SharePoint Saturday Atlanta
SharePoint Conference NA
Microsoft Business Application Summit

ShortURL: https://www.toddklindt.com/Podcast430

  
No presence informationTodd O. Klindt4/24/2019 2:12 PM0 

Shane makes a triumphant return and actually has some things to talk about. Todd and Shane start out talking about their recent travels and fun. They do have some good technical content around PowerApps, Edge, and Office 365, then they have some discussion about how they got to watch Game of Thrones (no spoilers) and some other fun new personal technology. After the show they stick around and talk about the actual GOT premier, there are spoilers, stop before that if you don't want the spoilers!

Audio File

Video File

Podcast 429 - Pro Gravity Stance (Time 1_23_17;12)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 1:12:49

Links:

PowerApps - The smallest feature
New renewable Office 365 developer subscriptions
Creating and Deploying a Custom Theme in SharePoint Online
Configure modern search results to search all of your organization (rather than the current site)
PowerApps Components Intro Video
SPS Nashville
SPS Charlotte
SharePoint Saturday Atlanta
SharePoint Conference NA
Microsoft Business Application Summit

ShortURL: https://www.toddklindt.com/Podcast429

  
No presence informationTodd O. Klindt4/22/2019 9:37 AMPodcast0 

Todd is flying solo this week and loving it. He talks about the fun he had in Europe at SEF and he waxes nostalgically about March 2019 being the 10th anniversary of the podcast. He wraps by talking about PowerShell, Teams, and a new, way to provision test sites to see what Office 365 can do.

Audio File

Video File

Podcast 428 - Poorly Made and Askew (Time 0_06_48;16)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 38:00

Links:

Office 365 PowerShell Module Installs
Free Office 365 Groups Webinar with SysKit
PowerShell talk for the Utah UG
Officers respond to a burglary call with their guns drawn only to find a trapped Roomba
Explore SharePoint designs with the preview of the SharePoint Provisioning Service
New Teams functionality
SharePoint Page Performance—Why Does It Matter?
SPS Nashville Call for Speakers
SPS Charlotte
SharePoint Conference NA
ECS

ShortURL: https://www.toddklindt.com/Podcast428

  
No presence informationTodd O. Klindt4/10/2019 8:33 AMPodcast0 

Marc joins Todd this week as they discuss all the traveling they've both done over the last weeks. They also talk about Todd's new Surface Go, new Dev stuff that Marc's all excited about, how important SharePoint documentation can be.

Audio File

Video File

Podcast 427 - The Bottom of the Barrel! (Time 0_02_50;22)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 51:34

Links:

OneDrive and SharePoint Content Team job opening
SharePoint Dev Open Source
Office Dev PnP
How SharePoint Farm Documentation Can Save Your Neck
SysKit Blog
SPS Nashville Call for Speakers
SPS Charlotte
SharePoint Conference NA
ECS

ShortURL: https://www.toddklindt.com/Podcast427

  
No presence informationTodd O. Klindt4/1/2019 3:00 AMOffice 365; PowerShell8 

One of the first things I do when I set up a new machine is install all of the PowerShell modules I need to manage Office 365. Since there are so many different modules, and they update so often, I put them all in this blog post so you (and I) have one place to go to to grab them I’ll. I’ll also keep the versions updated so you’ll know if you need to update them.

For each of the modules I have listed the official page if there is one, and a PowerShell command you can run to install it from the PowerShell Gallery.

To see which modules you have installed and which version they are run this:

Get-InstalledModule | select name, version

To suppress the warning you get when installing from the PowerShell Gallery, run this:

Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

To update to latest version of a module use the Update-Module cmdlet. You can use the technique in this blog post, PowerShell to Update ​your PowerShell Modules​​​, to see which version you have and whether it's the latest. 

Official Microsoft Modules

Sign-in assistant (needed for MSOL and AzureAD Modules)

Microsoft Online (1.1.183.57)
Original Tenant Directory Management
Prefix: MSOL
Install-Module -Name MSOnline

AzureAD (2.0.2.118)
Newer Tenant Directory Management
Prefix: AzureAD
Install-Module -Name azuread

AzureADPreview (2.0.2.119)
Latest Tenant Directory Management
Prefix: AzureAD
Install-Module -Name AzureADPreview

SharePoint Online (16.0.20616.12000)
Manage SharePoint sites and related services
Prefix: SPO
Install-Module -Name Microsoft.Online.SharePoint.PowerShell

Teams
Microsoft Teams Management Preview (0.9.6) ​
(uses Graph beta/preview APIs)
Prefix: Team
Install-Module -Name MicrosoftTeams -RequiredVersion 0.9.6

Microsoft Teams Management (1.1.6)
(uses 1.0 Graph API)
 
Prefix: Team 
Install-Module -Name MicrosoftTeams

Skype for Business​
No PowerShell module install from Gallery
Manage Skype for Business Online with Office 365 PowerShell

Exchange Online Management​ (2.0.3)
Manage Exchange Online without PSRemoting
Prefix: EXO
Install-Module -Name ExchangeOnlineManagement
Connect to Exchange Online PowerShell​

PowerApps and Flow for Makers​ (1.0.18)
User management for Flow and PowerApps
Prefix: PowerApp (for most cmdlets)
Install-Module -Name Microsoft.PowerApps.PowerShell

PowerApps and Flow for Admins (2.0.99)
Tenant admin managent of Flow and PowerApps
Prefix: AdminPowerApp (for most cmdlets)
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell –AllowClobber ​

Graph SDK​ (1.1.0)
Beta for Microsoft Graph​
Prefix: MG
Install-Module Microsoft.Graph


3rd Party Installs

SharePoint PnP PowerShell (3.26.2010.0)
Essential to manage SharePoint and related technologies
Install-Module -Name SharePointPnPPowerShellOnline

Last Updated 11/17/2020

I hope this comes in handy. Let me know if there are any other modules I should consider adding.

tk

ShortUrl: https://www.toddklindt.com/POSHOffice365Modules

  
No presence informationTodd O. Klindt3/27/2019 8:13 AMPodcast0 

Without Todd to keep Shane on point this became the Flow show. Jon Levesque, Microsoft Flow Evangelist, joined Shane in the most epic discussion of Flow ever. Don't fret though Jon kept Shane from messing it up too much. Enjoy

Audio File

Video File

Podcast 426 - Going with the Flow (Time 0_42_30;09)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 45:53

Links:

Setting up OneDrive Folder Protection
Quite Mouse
Connected web parts for SharePoint Online
Flow endpoint allows you to send a message in Teams
SVG Tutorial
Microsoft will stop updating Windows 7
Twilio
Collab with LinkedIn connections
North American Collab Summit
Omaha PowerApps and Flow class
SEF 2019
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast426

  
No presence informationTodd O. Klindt3/25/2019 9:11 AM0 

When Microsoft introduced Office 365 Groups, (also known as “Unified Groups” and “What? more Groups??”) a few years ago there was much confusion. The name is confusing, as there are already about 16 different kinds of groups in the Windows and Office 365 world, and what they do is even more confusing, if that’s possible.

On April 16th I’ll be doing a free Webinar with the folks at SysKit where I’ll explain what Groups are, how best to use them, and I’ll even throw in some administrative goodies at no extra charge.

You can register here for the webinar. The webinar itself is free. If you want to heckle, that costs an extra $10. I hear it’s money well spent. Smile

tk

ShortURL: https://www.toddklindt.com/SysKitGroupsWebinar

  
No presence informationTodd O. Klindt3/12/2019 5:40 PMPodcast0 
  
No presence informationTodd O. Klindt3/5/2019 4:19 PMPodcast0 

Todd is on his own this week. After he finishes celebrating Shane not being there he talks about Azure AD Connect and how you can make it more secure, how to use the PnP PowerShell with SharePoint Server 2019, and how to make Windows 10 smaller. He finishes up showing off his new Surface Go.

Audio File

Video File

Podcast 424 - Pulls and Pushes Go in the Wrong Direction (Time 0_22_05;28)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 39:42

Links:

Azure AD Connect for Red Teamers
PnP PowerShell has a version for SharePoint 2019
Share Point DSC
Windows 10 Debloater
Why I attended SPTechCon Austin 2019
Surface Go
USB C hub
Slate Money Podcast
SharePoint Saturday Kansas City
PowerApps and Flow Training
North American Collab Summit
SharePoint Saturday Omaha
SEF 2019
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast424

  
No presence informationTodd O. Klindt3/4/2019 11:02 AMPodcast0 

Todd and Shane start out talking about some gotchas that recently happened with Teams and patches. Then they talk about some SQL and PowerApps and Flow fun. Wrapping up with some good tidbits about OneNote and Modern vs. Classic before giving a shout to the fan of the week: Bonne Springer.

Audio File

Video File

Podcast 423 - I Like it When I Like it (Time 0_00_06;00)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 55:33

Links:

10:34 Critical regression in February 2019 CU for SharePoint 2016
14:10 SQL Decimal and Numeric are the same column
15:00 SQL Column Definitions
20:06 PowerApps components
33:01 How to Send Emails to OneNote
40:25 Fan of the week, Bonne Springer
50:54 SharePoint Saturday Kansas City
51:00 PowerApps and Flow Training
51:10 North American Collab Summit
51:20 SharePoint Saturday Omaha
51:30 SEF 2019
51:40 SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast423

  
No presence informationTodd O. Klindt2/20/2019 4:28 PMPodcast0 

Todd and Shane are back this week talking about their SPTechCon experience and why that's still a great conference to attend. Todd unboxes some classic technology that we all remember fondly and then they talk about a lot of PowerShell fun. Wrapping up with some discussion about SharePoint and Office 365 versus Office 2019 discussion.

Audio File

Video File

Podcast 422 - Rained Scooters (Time 0_26_15;07)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 45:47

Links:

15:06 Don't use Write-Debug
20:17 SharePoint Page Performance—Why Does It Matter?
26:54 Office 356 vs Office 2019
27:00 Move to monthly release
32:47 The perils of using Internet Explorer as your default browser
SharePoint Saturday Kansas City
SPTechCon Austin 2019
North American Collab Summit
SharePoint Saturday Omaha
SEF 2019
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast422

  
No presence informationTodd O. Klindt2/18/2019 2:54 PMPodcast0 

Todd and Shane are back this week and start with mentioning some needs you might have for those chilly offices that you work in. Then they move on to discussing how DNS can affect everything, including getting into your SharePoint Online site. They also talk about some announcements of things coming to SharePoint Online and OneDrive for Business. Wrapping up with Shane's moral dilemma over his Yeti repair process. They end the show with the community events where you can find them in the next few months.

Audio File

Video File

Podcast 421 - We're Idiots (Time 0_24_25;16)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 53:42

Links:

06:00 Foot warmer
17:50 January 2019 SharePoint Modernization News
25:03 A new mass delete notification is coming to SharePoint Online and OneDrive for Business
26:00 How to Keep up with Office 365 Changes
26:30 Bulk Undelete Files in Office 365 and SharePoint Online with PnP PowerShell
33:07 Organize your site navigation with SharePoint megamenus
34:00 6 tips to get mega value from the new megamenu navigation for SharePoint
36:06 PowerApps Tabbed Forms
SharePoint Saturday Kansas City
SPTechCon Austin 2019
North American Collab Summit
SharePoint Saturday Omaha
SEF 2019
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast421

  
No presence informationTodd O. Klindt2/5/2019 4:33 PMPodcast0 

For the second week in a row Shane joins Todd to talk about things. They start out with a little non-technical stuff reading the card for Todd's birthday charity drive and then talking about purchasing office chairs. Then they move into a lot of technical talk around the Office 365 Issues, managing data gateways, Modern vs. Classic, Teams, Groups, SharePoint lists, and even a little Dropbox before wrapping up with the community events and appearances.

Audio File

Video File

Podcast 420 - Enhance Your Calm (Time 0_20_16;00)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 51:16

Links:

On-premises data gateway management in the Power platform admin center
Modern vs. Classic and the change
The Secret Algorithm Behind Learning
New Teams documentation
Managing Microsoft Groups in Office 365 to Avoid Potential Group Sprawl
Dropbox to Acquire E-Signature Software Company HelloSign
SharePoint Lists getting cooler and cooler
SharePoint Saturday Kansas City
SPTechCon Austin 2019
North American Collab Summit
SharePoint Saturday Omaha
SEF 2019
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast420

  
No presence informationTodd O. Klindt1/28/2019 2:06 PMPodcast0 

Shane decides to rejoin the podcast today. Todd starts off talking about the success of the Birthday Charity Drive. Then Shane and Todd spend a lot of time talking about PnP PowerShell templates and the awesome things coming out of that team. Then they talk a little about some cool stuff announced for PowerApps and related technology. Wrapping up with a tale of woe about Shane's Tesla and some great upcoming events in the community.

Audio File

Video File

Podcast 419 - My Tootsies are Cold (Time 0_16_16;20)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 51:59

Links:

21:16 PowerApps shipped some new UI and CDS functionality
26:45 PowerApps Azure Blob Storage
34:10 PowerApps and Flow Training
48:34 SharePoint Saturday Kansas City
48:54 SPTechCon Austin 2019
48:55 North American Collab Summit
48:56 SharePoint Saturday Omaha
48:57 SEF 2019
48:58 SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast419

  
No presence informationTodd O. Klindt1/28/2019 8:28 AMPodcast0 

Todd invites Marc Anderson to join today while Shane is off gallivanting. Marc and Todd talk about the announcement around classic lists and then a few site design articles and tools for SharePoint. Then they start talking about some of the Patterns and Practices releases for both developers and admin-type folks. They wrap up with a rundown of a lot of community events where you might find them and some good knowledge in the coming months.

Audio File

Video File

Podcast 418 - I'm a Teapot (Time 0_04_25;19)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 58:30

Links:

1:00 HTTP 418
08:04 Charity
16:11 Tenant setting for classis lists/libraries going away on April 1
17:00 SharePoint Modernization Scanner
20:28 THE ULTIMATE GUIDE TO SHAREPOINT SITE DESIGNS AND SITE SCRIPTS
20:29 https://www.sitedesigner.io
20:30 https://sptools.netlify.com
25:00 View and apply site designs from within a SharePoint site
30:12 Office 365 CLI release 1/14 v1.13.0
39:31 PnPJS
39:32 Reusable React controls for your SharePoint Framework solutions
39:33 Reusable property pane controls for the SharePoint Framework solutions
39:34 PnP SPFx Yeoman Generator
52:16 Collab 365 monthly virtual conferences - see re: PowerApps
54:46 SPTechCon Austin 2019
54:47 North American Collab Summit
54:48 SharePoint Saturday Omaha
54:49 SEF 2019
54:50 SharePoint Conference NA
54:51 European Collaboration Summit 2019

ShortURL: https://www.toddklindt.com/Podcast418

  
No presence informationTodd O. Klindt1/22/2019 8:30 AM0 

Here in the US there is currently a government shutdown and a lot of workers are furloughed. One of them recently reached out to me with resume, looking for some work to tide him over until he can go back to work. This got me thinking about what I could do to help. Sadly, not a lot. I can, though, offer some training or consulting to IT workers that have suddenly found themselves with some time on their hands.

If you’re a furloughed US Government worker, and would like one hour of free SharePoint, Office 365, or PowerShell training, or just want to hang for an hour, email me at furlough@toddklindt.com. We’ll work out a time and some topics.

Now, hopefully this will all be resolved soon and no one will be able to take me up on my offer. Smile

tk

ShortURL: https://www.toddklindt.com/Furlough

  
No presence informationTodd O. Klindt1/9/2019 4:42 PMPodcast0 
  
No presence informationTodd O. Klindt1/8/2019 2:48 PM0 

In this episode, the guys spend a good bit of time talking about PowerShell instead of Todd's New Year's vacation. Almost shocking how well they stayed on topic. They also discuss WeMos, how it took Shane four hours to get it working, and how Shane feels it wasn't his fault but the wireless's fault. Updating Office 365 to Monthly update cadence, Surface Laptop 2, and Todd's love of OneDrive round out the show. Not too bad and no stupid New Year's resolutions so you can safely listen.

Audio File

Video File

Podcast 416 - 30 Second Skip (Time 0_34_58;03)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 54:23

Links:

Pause Syncing with PowerShell
Help me pause OneDrive Sync with PowerShell
Change your Office update cadence
How to Enable Windows Sandbox
WeMo Mini Smart Plug
PowerApps and Flow Training
SPTechCon Austin 2019
North American Collab Summit
SharePoint Saturday Omaha
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast416

  
No presence informationTodd O. Klindt1/4/2019 11:37 AMPowerShell0 

I recently had to do some testing for a customer on a Windows 10 machine whose primary language was not English. I, having lived in the midwest United States my entire life, do not speak any other languages fluently. The customer anticipated this and sent along a very thorough set of directions, complete with pictures, of how to switch the language to English for me. Very kind of them indeed. As I looked through the directions the thought occurred to me, “I’ll probably need to do this a few times. I wonder if I can automate it. I bet I can! PowerShell to the rescue!”

Here’s the TL;DR of what I ran:

Set-Culture en-US
Set-WinSystemLocale en-US
Set-WinHomeLocation 0xF4
Set-WinUILanguageOverride en-US

logoff

None of it takes place until you log back in, so I added the logoff at the end.

With PowerShell, knowing the answer is good, but knowing how to get the answer is even better. One of my friends, Jeff Hicks, always does a good job explaining the process of find things in PowerShell, so I thought I’d do that here.

I had the steps, in UI form, so I didn’t need to figure that out. There were 4 things that needed to be changed. I just needed to figure out how to make those changes with PowerShell. I went to a PowerShell prompt and typed:

Get-Help language

hoping PowerShell could nudge m in the right direction. I got this back:

image

It wasn’t exactly what I needed, but it did show me there was a module, International, that was probably a good place to start. And knowing that I needed to change things, I was mostly interested in the Set cmdlets. There were also a couple of good help topics, about_Language_Keywords and about_Language_Modes that I could reference if I got stuck. My next step was to see what other cmdlets were in the International module. I did that with Get-Command -Module International. That filled in the blanks for me.

image

For the pieces that didn’t obviously connect to the pictures I had from the customer’s instruction I had some Get cmdlets above to poke around and try to match values. My next hour or so consisted of running the different Get cmdlets and figuring out where the current setting was so I could use the appropriate Set cmdlet to change it. I made liberal use of the help cmdletname –examples paradigm to figure out what the parameter values should be.

After I was finished and was searching to see if I was right I found this Technet article,

How to change display language in Windows 10, that confirmed what I was doing was correct. My script is laser focused on what I was doing, that one is more useful and generic. If you want to understand this more, read through that script.

That’s all there was to it. I can’t reboot the client machine but all of these changes have persisted multiple logouts. I did also have to use the CHCP command to change the code page of the PowerShell window. That did not persist across logins. I think there’s a way to set the default code page in the Registry, but I haven’t chased that down yet.

tk

ShortURL: https://www.toddklindt.com/PoshChangeLanguage

  
No presence informationTodd O. Klindt1/2/2019 9:23 AM1 

OneDrive and PowerShell. They remind me of that song, My Favorite Things. Though I’m not sure which I like more, PowerShell or whiskers on kittens. It’s a close call.

I write a lot of little PowerShell scripts to help me get through the day, and often those scripts fiddle with files that are being synced with OneDrive. In a few cases, if the file is large enough, my PowerShell script will fail because OneDrive will lock the file while it’s syncing it. Both responses are totally understandable. I want PowerShell to stop if it can’t sync a file, and I want OneDrive to sync files when I expect it to. I could, and I have in some cases, written a bunch of PowerShell to check the lock status of a file, to deal with the locking issues that OneDrive creates, and so on. It’s tedious though, and honestly I’m not very good at it. That’s where you all come in…

What I really want, nay, need, is a way to pause OneDrive sync while I’m messing with files I know it will lock when syncing. I need two things, Stop-OneDriveSync and Start-OneDriveSync. That’s it. I asked Santa for them for Christmas, but all I got was socks.

So I took the next step, I whined on Twitter. Someone, suggested I create a UserVoice for it. I thought that was pretty solid advice, so I did.

Pause Syncing with PowerShell

What I’m asking from you, is if you too would like to be able to start and stop OneDrive syncing from PowerShell, please vote up the UserVoice. Here it is again in case you missed it. Smile

Pause Syncing with PowerShell

I’ll be keeping an eye on it, and I’ll know if you voted!

Thanks in advance.

tk

ShortURL: https://www.toddklindt.com/PoshPauseOneDrive

  
No presence informationTodd O. Klindt12/27/2018 3:23 PMPodcast0 

Todd and Shane come back from the holidays and talk about some actual technical content for SharePoint Web Parts. Then they discuss some survey results for Teams and changes in licensing for parts of Office 365. They also talk about installing hardware with no drivers and some fun birthday charity updates.

Audio File

Video File

Podcast 415 - Brain Shut Off (Time 0_21_13;28)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 51:47

Links:

New SharePoint Web Parts
Teams passes up Slack
UPDATED - Updates to Microsoft Flow and PowerApps for Office 365
Information architecture in a flat SharePoint world
Package Thief vs. Glitter Bomb Trap
PowerApps and Flow Training
SPTechCon Austin 2019
North American Collab Summit
SharePoint Saturday Omaha
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast415

  
No presence informationTodd O. Klindt12/27/2018 3:16 PMPodcast0 

In this episode, even though Lori wasn’t there to supervise, the boys did a decent job of staying on topic. Maybe Lori is really the problem? In traditional fashion Todd starts off talking about a blog post he wrote on Office 365 group permissions and then some other fun about making SharePoint look nicer. Then Shane chimes in with his needs for a new laptop and reminds you how to fix SharePoint Workflow patches. Finally, they end with something interesting, talking about all of the events you can meet Shane at. A must listen!

Audio File

Video File

Podcast 414 - Never Spend all of that Money (Time 0_11_10;28)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 49:15

Links:

Copying Office 365 Group Permissions with PowerShell
New no code solutions for custom formatting in SharePoint
Modernize your SharePoint pages
Remove Background from Photos
PowerApps and Flow App in A Day
PowerApps and Flow Training
SPTechCon Austin 2019
North American Collab Summit
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast414

  
No presence informationTodd O. Klindt12/18/2018 3:46 PMPowerShell; Office 3651 

Office 365 Groups, or “Unified Groups” to their friends, have been a confusing Office 365 feature from an administrative perspective for as long as they’ve been around. Users can create them all willy-nilly (unless you disable that), the SharePoint sites they create don’t show up in the SharePoint Admin Center (until you use the new one), the list goes on and on. Another frustrating part of Groups is that you can’t do any nesting, of any kind. You can’t put a Unified Group in an Azure AD Security Group, or vice versa. You can’t put a SharePoint Group in a Unified Group either. Because of these limitations it’s very tough to reuse group membership. You can’t create an HR Azure AD Security Group and drop it into the HR Benefits Unified Group or the HR Hiring Unified Group. Now, the obvious question is, “If these two Unified Groups have the same membership why are they two groups instead of one?” Good question, fair reader. Sometimes it just works out that way. Sometimes the AD Security Group would only be a subset of the users in the Unified Group in question. Regardless, this question came up on a customer call and I was challenged to find a way to ease the administrative burden of manually adding the same users to multiple Unified Groups. What was my answer, “Of course I can do it, with PowerShell!” Sometimes I answer without thinking first.

I had used the PnP PowerShell in the past to get a list of all of the Unified Groups in a tenant, so I was pretty sure it could be done. I whipped out Get-Command and listed all the cmdlets that contained the noun “UnifiedGroup.”

Get-Command -Noun *unifiedgroup*

That exposed two cmdlets I’d need: Get-PnPUnifiedGroupOwners and Get-PnPUnifiedGroupMembers. That’s good. But there were no corresponding “Set” cmdlets. That’s bad. Normally this is where I’d panic. Instead, I took a deep breath and instead of panicking, I typed Get-Command -ParameterName members. Low and behold, Get-Command blessed me with New-PnPUnifiedGroup and Set-PnPUnifiedGroup. We retrieve the list of Members with Get-PnPUnifiedGroupMembers but we set them with Set-PnPUnifiedGroup –Members. Not totally consistent, but I can work with that.

From past experience I knew I had to be connected to the Microsoft Graph to use the Unified Group cmdlets, so  I authenticated against the Graph so I could start poking around.

Connect-PnPOnline –Graph

If you haven’t connected to the Graph before, hold onto your hats. It’s different than what you’re used to. You’ll be given a code to register with the Graph that allows the PnP to query it. It feels weird, but everything is working correctly.

Once I was connected to the Graph I ran Get-PnPUnifiedGroupMembers to see what the output looked like. It gave me back a collection of objects that corresponded to the users that were members of that Unified Group. Fair enough.

image

We can store them in a variable for use later. Now, how do we assign membership? help Set-PnPUnifiedGroup –Examples didn’t provide a lot of help. It only showed adding a single Owner. But it did show me that the cmdlet was expecting the parameter to be a string, and that string needed to be the UPN of the user I wanted to add. I can work with that too.

The mechanics of saving out the list of users and owners and assigning them to another group was a little tricky, but not bad. I walked through the output of Get- and wrote the UPNs of each object to a new collection that I would then pass on to Set-. It looks like this:

$members = Get-PnPUnifiedGroupMembers -Identity $source

$members | ForEach-Object -begin  {$memberlist  = @() } -process {$memberlist += $($_.UserPrincipalName) }

Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist

The only sticking point was that doing it that way would overwrite whatever Members or Owners the Destination Group already had. To handle that I created a boolean variable, $mergeusers, that I could set to $true or $false depending on whether I wanted to clobber the existing users or not. If I did not want to clobber them I used the following code to merge the current Members of Destination with the Members of Source:

$membersDest = Get-PnPUnifiedGroupMembers -Identity $destination

$members = $members + $membersDest

Then later when I write the users in $members to the Destination Group it has both sets of Members.

I added some very, very simple error handling so that another human has a chance of running it. This is what I ended up with:

# Set some values
# use Get-PnPUnifiedGroup to get Unified Group names
# Name of Unified Group whose owners and membership we want to copy
$source = "Regulations"

# Name of Unified Group whose owners and membership we want to populate
$destination = "Empty"

# Whether to overwrite Destination membership or merge them
$mergeusers = $false

# Check to see if PnP Module is loaded
$pnploaded = Get-Module SharePointPnPPowerShellOnline
if ($pnploaded -eq $false) {
    Write-Host "Please load the PnP PowerShell and run again"
    Write-Host "install-module SharePointPnPPowerShellOnline"
    break
    }
# PnP Module is loaded

# Check to see if user is connected to Microsoft Graph
try
{
    $owners = Get-PnPUnifiedGroupOwners -Identity $source
}
catch [System.InvalidOperationException]
{
    Write-Host "No connection to Microsoft Graph found"  -BackgroundColor Black -ForegroundColor Red
    Write-Host "No Azure AD connection, please connect first with Connect-PnPOnline -Graph" -BackgroundColor Black -ForegroundColor Red
break
}
catch [System.ArgumentNullException]
{
        Write-Host "Group not found"  -BackgroundColor Black -ForegroundColor Red
        Write-Host "Verify connection to Azure AD with Connect-PnPOnline -Graph" -BackgroundColor Black -ForegroundColor Red
        Write-Host "Use Get-PnPUnifiedGroup to get Unified Group names"  -BackgroundColor Black -ForegroundColor Red
        break
}
catch
{
    Write-Host "Some other error"   -BackgroundColor Black -ForegroundColor Red
break
}

$members = Get-PnPUnifiedGroupMembers -Identity $source

if ($mergeusers -eq $true) {
     # Get existing owners and members of Destination so that we can combine them
    $ownersDest = Get-PnPUnifiedGroupOwners -Identity $destination
    $membersDest = Get-PnPUnifiedGroupMembers -Identity $destination

    # Add the two lists together so we don't overwrite any existing owners or members in Destination
    $owners = $owners + $ownersDest
    $members = $members + $membersDest
    }

# Set the owners and members of Destination
$owners | ForEach-Object -begin  {$ownerlist  = @() } -process {$ownerlist += $($_.UserPrincipalName) }
$members | ForEach-Object -begin  {$memberlist  = @() } -process {$memberlist += $($_.UserPrincipalName) }

Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist

Feel free to pick through that for any nuggets that might help you.

Happy copying.

tk

ShortURL: https://www.toddklindt.com/PoshCopyO365GroupMembers

  
No presence informationTodd O. Klindt12/18/2018 2:21 PMPodcast0 

In this week's episode, Todd tells us all about his European travel woes. Then he tells about some blog posts and patches that are happening. Shane tells about some training and videos he's made for PowerApps and Flow. They wrap up with some of the upcoming big events you'll want to attend.

Audio File

Video File

Podcast 413 - Payload is Too Big (Time 0_47_15;21)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 48:19

Links:

SysKit Security Manager
Bulk Undelete Files in Office 365 and SharePoint Online with PnP PowerShell
PowerApps Tooltip
PowerApps create a PDF from SharePoint List data
SPTechCon Austin 2019
North American Collab Summit
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast413

  
No presence informationTodd O. Klindt12/11/2018 5:39 PMOffice 365; PowerShell11 

Quite often as a consultant, you get to work on truly fun and funny situations. The customer email that prompted this blog post is one of them.

My contact at the customer site emailed with a problem. A few weeks earlier one of their users deleted some pictures from one of their document libraries. Okay, not a few pictures, nearly 100,000 of them. And not only had that user deleted nearly 100,000 items, they hadn’t told anyone for 3 weeks, while they tried to upload the pictures they still had locally. I know what you’re saying, this is a job for the Recycle Bin! And you’re right, it is, but the other factors made it complicated. They couldn’t just restore all of the files in the Recycle Bin as there were also 3 weeks’ worth of legitimately deleted documents in there, including documents from that user. Also, since the user had re-uploaded a bunch of the deleted documents there would be “overwrite” prompts all over that would slow down the process. And let’s not forget that even if it all went smoothly, someone would have to manually restore nearly 100,000 files. No easy feat.

The customer talked to me because they wanted to share the story (it was a big funny after the fact) but also because they knew I always said that PowerShell could do anything. They were hoping PowerShell could bale them out of this mess too. I don’t mean to spoil the end of this story, but they were right, it could.

My tool of choice when it comes to making magic in Office 365 is the PnP PowerShell. I had never done this before, so I had to do a bit of spelunking. I ran Get-Command *recycle* -Module SharePointPnPPowerShellOnline to see what PowerShell cmdlets availed themselves to me.  Looky, looky, there it is, Restore-PnPRecycleBinItem. Did you just hear angels sing? I know I did.

Now we needed to weave a little PowerShell magic. We couldn’t restore all of the deleted files, since other folks had legitimately deleted files in the meantime. We also only wanted to restore .JPG files that this user had deleted. Here’s command that got the files we needed:

Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg"  | Where-Object -Property Dirname -Like -Value "Shared Documents/*"  | Where-Object -Property DeletedByEmail -EQ –Value shane@tkdemo.com

That returned all the files, now what to do with them? Restore them, of course. This bit of code grabs all the files, counts them as it restores them, then spits out the time and date when it’s done.

$bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg"  | Where-Object -Property Dirname -Like -Value "Shared Documents/*"  | Where-Object -Property DeletedByEmail -EQ –Value shane@tkdemo.com

$bin | foreach  -begin { $a = 0} -Process  {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }

Normally, that would have worked, but it was going to take some time to restore the files. A loooong time. Several days in fact. With some testing I surmised that the client PowerShell was the bottleneck. I used a little PowerShell trick to break the entire 100,000 item collection into chunks of 10,000 and run it multiple PowerShell windows and on multiple machines. I changed the second line to look something like this:

($bin[20001..30000]) | foreach  -begin { $a = 0} -Process  {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }

The $bin[20001..30000] only sends items 20001 to 30000 of the collection down the pipeline. I changed that on each client. $bin[0..10000], $bin[10001..20000], and so on. After they finished I ran through it all one more time to make sure I didn’t miss any. The entire script looked like this:

# Make sure necessary modules are installed
# PnP PowerShell to get access to Office 365
Install-Module SharePointPnPPowerShellOnline

# Module to securely store passwords
Install-Module CredentialManager

# Saved credentials
New-StoredCredential -Target "ImportantSite" -UserName
madowner@tkdemo.com -Password 'Password goes here' -Persist LocalMachine

# Now the actual meat
# Connect to the site collection where the files were deleted
Connect-PnPOnline -Url
https://tkdemo.sharepoint.com/ -Credentials ImportantSite

# Filter the recycle bin for only the files we want to restore, JPGs, from the Shared document library, deleted by Shane
$bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg"  | Where-Object -Property Dirname -Like -Value "Shared Documents/*"  | Where-Object -Property DeletedByEmail -EQ -Value
shane@tkdemo.com

# See how many pictures Shane deleted.
$bin.count

# Walk through the collection and restore each document. Spit out the time at the end so you know how long it took. Also keep a counter to see how it’s going as it churns through the collection
$bin | foreach  -begin { $a = 0} -Process  {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }

# Since the OM is the bottleneck you can run this on multiple machines to speed things up. Here’s how to only restore a subset of the collection
($bin[20001..30000]) | foreach  -begin { $a = 0} -Process  {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }

I hope you never need to use this. Smile

tk

ShortURL: https://www.toddklindt.com/PoshRestoreSPOFiles

  
No presence informationTodd O. Klindt12/10/2018 10:43 AMPodcast0 

Todd has left the podcast for the day and Shane brings in a guest. Troy from AppRiver. They discuss security and hacking. Troy talks about what kinds of things the bad guys are doing and what organizations and individuals can do to help protect against those things. Things even the technically challenged could do. Shane then tells us about community and upcoming events.

Audio File

Video File

Podcast 412 - Preconditioned Fail (Time 0_11_50;25)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 39:56

Links:

SysKit Security Manager
Information architecture in a flat SharePoint world
Creating PDFs from SharePoint Data
Online Free Flow Conference
Thrive Conference 2018
SP Fest Chicago
SPTechCon Austin 2019
North American Collab Summit
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast412

  
No presence informationTodd O. Klindt12/5/2018 2:59 AMPodcast0 

Shane and Todd spend time this week talking about some tech toys Shane has bought over the years including a Ring doorbell, new Wi-Fi APs, and a really big monitor. They also discuss some fun PowerShell topics, and what they wear when they work from home.

Audio File

Video File

Podcast 411 - You're Not Going to Like This (Time 0_03_49;18)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 50:48

Links:

SysKit Security Manager
What’s the Recommended Editor for PowerShell Scripts?
PowerShell support for PowerApps (preview)EXPLORING THE POWERSHELL ALTERNATIVE TO NETSTAT
What to Wear to Work—When You Work at Home
Online Free Flow Conference
Thrive Conference 2018
SP Fest Chicago
SPS Coimbatore
SPTechCon Austin 2019
North American Collab Summit
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast411

  
No presence informationTodd O. Klindt11/16/2018 8:41 AMPodcast0 

Marc Anderson joins Todd this week while Shane is teaching a class. They talk about a problem that has crept into the PnP PowerShell and how to fix it. Marc talks about some developery topics like the new SPFX release and the Office 365 CLI. They also discuss how Microsoft is improving the experience of having multiple accounts, and how AutoSave is great, but you have to keep your eye on it.

Audio File

Video File

Podcast 410 - Literally No One Wants That (Time 0_02_59;11)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 59:02

Links:

Getting a “Method not found” Error when using PnP PowerShell
Office 365 CLI
Azure portal and the new account manager!
How Broken Are Office 365 SharePoint Permissions?
SPFx 1.7
SharePoint Framework v1.7.0 - What's in the latest update of SPFx?
AutoSave in Office 365: Search Implications
PowerApps and Flow Training
Thrive Conference 2018
SP Fest Chicago
SPS Coimbatore
SPTechCon Austin 2019
North American Collab Summit
SharePoint Conference NA

ShortURL: https://www.toddklindt.com/Podcast410

  
No presence informationTodd O. Klindt11/13/2018 3:22 PMPowerShell; Office 365; Sharepoint0 

This question has come up a few times so I thought I’d blog it so I had an easy place to point people. You can also go to the PnP PowerShell GitHub Comments for the same information.

If you’ve watched any of my podcasts, or seen me speak at any technical events you know I’m a big fan of the Patterns and Practices (PnP) PowerShell cmdlets. They make working with Office 365 tolerable, even enjoyable. The PnP PowerShell is a community led, Microsoft supervised, project on GitHub. If you’re not already using it, you should check it out.

Along with scads of other software running on our machines, it gets updated once a month or so. In the last couple of months a couple of clashing updates have caused PnP users some stress. Specifically when they use the Connect-PnPOnline cmdlet to connect to SharePoint Online they get a “Method not found” error message. The PnP team was on it. They published this fix:

  1. Delete all the SharePoint Components from the Control Panel (Add/Remove)
  2. Open the GAC location (C:\windows\Microsoft.NET\assembly\GAC_MSIL), search for the term SharePoint and delete all the folders. (This is required since the reference is still old which is used by the PnP commands)
  3. Re-Start the machine
  4. Install the latest version of the SharePoint PnP

That should do it. From the comments I’ve seen, and my own experience, this has a 100% success rate. Again, you can read all about it on GitHub.

Thanks to the PnP Team for all you do, and for getting this fix out so quickly.

tk

ShortURL: https://www.toddklindt.com/PoshPnPMethodNotFound

  
No presence informationTodd O. Klindt11/13/2018 3:04 PMPodcast0 
  
No presence informationTodd O. Klindt11/6/2018 10:47 AMOffice 365; PowerShell3 

The last (and first) installment in my ever popular “Without Losing Your Damned Mind” blog series, How to Connect to with Multiple Office 365 Accounts in your Browser without Losing Your Damned Mind, was a mild success, and the series was picked up. We decided it was time for a sequel, and here it is.

As an IT Pro/Administrator in the Microsoft space you have to love PowerShell. You don’t have to be an expert in it (though that really helps, I envy those guys) but you have to be confident enough with PowerShell that you can see some PowerShell on the web and be able to understand what it’s doing before you run it yourself. The way you do that is slowly, after months and years, forcing yourself to do tasks in PowerShell no matter how much it sucks. In the context of Office 365 that can get cumbersome because you have to authenticate against cloud services all the time, with many different accounts, and that requires that cursed act of typing your password. Over and over and over again. I hate typing passwords so very much. It gets worse when sometimes I’m connecting as me, sometimes as my own tenant global admin, sometimes as a customer’s tenant admin, sometimes as a different customer’s admin, it never ends.

A while back I started using Windows’ Credential Manager to manage my PowerShell logins, and that’s what this blog post is going to be about. I will assume you already know how to connect to Office 365 and Azure with PowerShell and that you have all of the necessary modules, executables, and the like installed.

The secret sauce that makes this all bearable is a PowerShell module called PowerShell Credential Manager. This little beauty uses native PowerShell to access the Credential Manager in Windows. There are other modules that do similar things, and you can actually do all of this yourself in PowerShell without a module. I’ve found this module to be the best that works for me, but this process is the same regardless of what you use.

You can install it with this line:

Install-Module -Name CredentialManager

It installs the following cmdlets:

Get-StoredCredential
Get-StrongPassword
New-StoredCredential
Remove-StoredCredential

You can use New-StoredCredential to put a new entry in the Windows Credential Manager. You can also use the Credential Manager UI to do it. It’s all the same. To create a credential with New-StoredCredential use something like this:

New-StoredCredential –Target O365Admin –username admin@tenant1.onmicrosoft.com -password pass@word1 –Persist LocalMachine

New-StoredCredential –Target Jimmy –username Jimmy@tenant1.onmicrosoft.com -password pass@word1 –Persist LocalMachine

New-StoredCredential –Target OtherAdmin –username admin@tenant2.onmicrosoft.com -password pass@word1 –Persist LocalMachine

And so on. A couple of things of note. First, all of the passwords are in plain text. If you’re running a transcript make sure you clear those out. Also, the –Persist switch is important. If you don’t add that, the Stored Credential will vanish into the ether when you close this PowerShell window. You won’t know why it doesn’t work the next and you’ll be very confused. Maybe that’s just me. You can also add a comment for the credential with the –Comment parameter.

Running the command looks like this:

image

The entries look like this in Windows:

SNAGHTML67af9a89

You can get to this screen in Control Panel, or by typing “cred” in the Start Menu. The credentials you create in PowerShell will show up under “Generic Credentials” and you can use anything that’s already there. You can also create credentials with the cleverly named, “Add a generic credential” link at the top. It doesn’t matter how they get there, it just matters that they’re there. You can create as many credentials as you want. There’s no charge. Smile

Now that we’ve loaded the Credential Store up with some yummy Office 365 Credentials, how do we use? The magic word is Get-StoredCredential.

We can use Get-StoredCredential to securely pull credentials from the Credential Manager and pass them to a PowerShell cmdlet. You can save them in a variable, or just call it directly when you connect. Here is how you connect to Azure AD:

Connect-MsolService -Credential (Get-StoredCredential -Target O365Admin)

It looks like this:

image

No passwords were typed (Hooray!) and that means you can securely automate it. The process is the same for other Connect style cmdlets. Here are a couple of examples:

Connect-AzureAD -Credential (Get-StoredCredential -Target O365Admin)

Connect-SPOService -Url https://blogpost-admin.sharepoint.com -Credential (Get-StoredCredential -Target O365Admin)

If I wanted to sign in as the Jimmy account, I would pass that to the –Target parameter:

Connect-SPOService -Url https://blogpost-admin.sharepoint.com -Credential (Get-StoredCredential -Target Jimmy )

I’m a frequent user of the PnP PowerShell. I’d give up sliced bread before I gave them up. While you can use this same approach with them, you have another option that’s even less typing:

Connect-PnPOnline -Url https://blogpost-admin.sharepoint.com -Credential O365Admin

The Connect-PnPOnline cmdlet (and maybe others) natively know to check the Credential Manager if it’s passed a string.

That’s all there is to it. Once you create a credential it’s yours to use however you’d like, as often as you’d like. This isn’t restricted to Office 365, either. Any PowerShell cmdlets that take credentials can take advantage of this.

Enjoy.

tk

ShortURL: https://www.toddklindt.com/PoshMultipleAccounts

  
No presence informationTodd O. Klindt11/5/2018 10:45 AMPodcast0 

Todd got a new job and they kick the podcast off talking about that. After they're finished gushing about that they talk about some topics Todd recently covered in classes. They also give their talk in the recent IBM purchase of Red Hat and someone that made Shane and Todd's day.

Thanks to our sponsor and the inventors of bear hugs, AppRiver.

Audio File

Video File

Podcast 408 - Never Free the Trolls (Just Be Nice) (Time 0_02_08;08)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 47:26

Links:

SysKit Insights 2.0
AppRiver
SharePoint Calculated Columns and Validation Formulas
PowerApps Save Data
North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast408

  
No presence informationTodd O. Klindt11/2/2018 1:13 PM0 

Over the few months I’ve been doing a lot of consulting projects, and some of my favorites have been with my long time friends Marc Anderson (blog|twitter) and Julie Turner (blog|twitter). I’ve known Marc since roughly the beginning of time, and met Julie a few years ago when she joined him at Sympraxis. We’ve all been old friends ever since. They’re both developery types and over the last few months they’ve brought me in to help with some projects that needed an admin’s touch. At SPTechCon a couple of months ago we were sitting around catching up and Marc suggested that we put a ring on it and make it official.

What a magnificent idea!

Yesterday I officially started at Sympraxis. I’ll be doing all the same things I’ve been doing. Blogging, podcasting, teaching, and loving on SharePoint and Office 365 every day. Now though, Julie and Marc are legally required to chat with me on Teams during the day when I’m bored. Smile 

I will also continue to be the chief Evangelist for Syskit. I’m going to be staying very busy.

If you’d like to bring Sympraxis into a project, drop us a note on our Contact Page and we’ll get a hold of you.

Thanks to Marc and Julie for bringing me onboard.

tk

ShortURL: https://www.toddklindt.com/JoinSympraxis

  
No presence informationTodd O. Klindt10/31/2018 9:07 AMPodcast0 

Todd kicks off the show by telling Shane the drama of his weekend. After he's done whining they get down to business and talk about fun tech stuff like SharePoint 2019, a new version of SPDocKit, improvements to the OneDrive Sync Client, and how Shane triumphed over Sling.

Thanks to our sponsor and the inventors of bear hugs, AppRiver.

Audio File

Video File

Podcast 407 - You Can Only Laugh (Time 0_17_21;11)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 55:37

Links:

SharePoint Server 2019 is RTM
SPDocKit 8.0 is also out
OneDrive will now remove offline files if they aren’t accessed for a certain period
AppRiver
Apple’s TV subscription service starts in 2019 to compete with Netflix, Amazon
PowerApps and Flow Training
Thrive Conference 2018
North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast407

  
No presence informationTodd O. Klindt10/23/2018 4:14 PMSPDocKit1 

I’m not sure my heart can take much more of this. First SharePoint Server 2019 RTMs and the folks at SysKit put out another amazing version of SPDocKit, 8.0! Is today my birthday or something?!

If you haven’t used SPDocKit before, you’re missing out. Luckily the folks at SysKit have you covered, before you do anything, including finishing this blog post, go out and download their free 30 day trial.

Okay, now that we’ve got that out of the way, what is SPDocKit and what’s in it for you?

I am so glad you asked!

SPDocKit is a SharePoint Documentation tool. Quite possibly the best SharePoint Documentation tool to grace the earth with its footfall. Over the years I’ve watched the product evolve into nearly a work of art. The folks at SysKit love SharePoint, almost as much as I do, and they have their finger on the pulse of what SharePoint admins want. With each successive version of SPDocKit they add new reports and functionality that scratch the collective itches we SharePoint admins have. As a SharePoint Consultant I help all kinds of organizations implement and manage SharePoint servers. In the last year or two I’ve noticed a very pronounced shift towards wanting more reporting. Companies want a better idea of how their users are using SharePoint. SPDocKit gives that to them in spades, all in an easy to use interface.

What kind of reports does it give you? There’s almost too many to name. I’ll rattle off some of my favorites though to get you started:

  • Full Farm Documentation – Servers, services, databases, sites, everything you can think of. Best of all it keeps a copy of every report you run, so you can compare them over time and see how your environment grows.
  • Best Practices – SPDocKit looks into every crack and crevice of your SharePoint farm and let you know, nicely, what things you could be doing better. This could be SharePoint Configuration, SQL Server settings, anything. SPDocKit has your back.
  • Security – Great reports on what has been changed, who has changed what. Security is a hot topic these days and SPDocKit has you covered.
  • User Permissions – You can get Permissions reports, compare users’ permissions, copy user permissions, everything you can think of.

That’s just off the top of my head. There’s so much more. Here’s a list of just what they’ve added to version 8.0.

Go out and take SPDocKit for a spin. You won’t regret it. While you’re out there check out SysKit’s other great tools like SysKit Insights, Security Manager, the free SysKit Point.

tk

ShortURL: https://www.toddklindt.com/SPDocKit8

  
No presence informationTodd O. Klindt10/22/2018 5:03 PMSharePoint 2019; Sharepoint0 

What a day, what a day. SharePoint Server 2019 is ready for us to download and deploy into our production farms. What’s new in SharePoint 2019 you ask? A bunch. Here’s a short list:

  • Modern Sites
  • Modern Lists and Libraries
  • Modern Pages
  • Communication Sites
  • OneDrive for Business sync client support
  • Large file, large filename, fewer character restrictions

The list goes on and on.

Here are a bunch of links to get you started:

SharePoint Team Blog Post

Download SharePoint Server 2019

Quick Start Guide

Here at the Klindt Labs we’ll be installing SharePoint Server 2019 as quickly as we can and letting you know what our experience is.

tk

ShortURL: https://www.toddklindt.com/SP2019ishere

  
No presence informationTodd O. Klindt10/18/2018 4:54 PMPodcast0 

Shane is on the road, but that doesn't stop them from putting out another quality podcast. Shane starts off the podcast by telling us what's grinding his gears today. Todd then talks about a recent SharePoint event he crashed and the fun he had there. They do talk some tech, including the new SharePoint Admin Center, and a few things Todd has learned in the field in the last week. We wrap things up by mentioning some of our favorite user groups and upcoming conferences.

Thanks to our sponsor and purveyor of fine software, AppRiver.

Audio File

Video File

Podcast 406 - What Time is it on Earth (Time 0_00_16;19)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 58:18

Links:

29:06 Unleash your SharePoint admin superpowers with new admin center capabilities
46:47 PowerApps String Functions
48:41 Tampa Bay SharePoint User Group
51:00 Launch of PowerApps and Flow Cincinnati User Group
51:20 SharePoint/O365 Administration Workshop with Todd Klindt
52:38 SharePoint Saturday Cincinnati
52:50 PowerApps and Flow Training
53:40 Thrive Conference 2018
55:54 North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast406

  
No presence informationTodd O. Klindt10/17/2018 5:01 PMPodcast0 
  
No presence informationTodd O. Klindt10/8/2018 3:17 PMPodcast0 

We start this week's podcast solving the mystery of what the difference between Britain and the United Kingdom is. We think. Then we move on to topics like Ignite, security for small businesses, how to restore delete, and then restore, nearly 100,000 files in Office 365 and some fun in PowerShell.

Thanks to our sponsor and BFF, AppRiver.

Audio File

Video File

Podcast 404 - I Don't Want to Break a Hip (Time 0_08_48;07)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 53:12

Links:

06:09 Different between UK, Great Britain, and England
28:22 AppRiver
40:18 Introducing the PowerShell Excel Module
39:19 PSCalendar by Jeff Hicks
41:21 PowerApps AddColumns ShowColumns
43:38 April Dunnam
44:00 Oklahoma PowerApps and Flow User Group
44:51 PowerSummit
45:53 Launch of PowerApps and Flow Cincinnati User Group
46:21 SharePoint/O365 Administration Workshop with Todd Klindt
47:00 Register here
47:57 SharePoint Saturday Cincinnati
48:28 PowerApps and Flow Training
48:58 Thrive Conference 2018
51:09 North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast404

  
No presence informationTodd O. Klindt10/7/2018 11:15 PMOffice 36510 

Every day I’m knee deep, well, waist deep in Office 365. My personal email and all of that is in Office 365. I’m also the Global Admin for that same tenant. I jump into customer tenants all the time and I have 2 or 3 demo and trial tenants that I’m routinely noodling around in. Since all of those environments are in the same DNS domain, office.com, it’s tough to handle being signed into them all at the same time. You can use in-private or incognito mode, but that only gets you one additional user, as all in-private mode windows share the same memory space. You could use multiple browsers, but that gets unwieldy remembering which browser is for which account, and at some point you end up using Microsoft Edge, and that’s just not worth it. It would seem this summit is insurmountable. I am here to tell you fellow Office 365 lover, that it is not. I have cracked the code, and I’m going to show you how.

First, let me say this is not something I figured out on my own. I’m not blazing any new trails here. There are dozens of blog posts on this already, some by friends of mine. I’m writing this blog post because I’ve told a few people about it recently and they hadn’t heard about. I thought I’d blog this and make it official.

The secret to making this all work is to use Google Chrome. Chrome has support for multiple people, and we’re going to use that to set up a Person for each Office 365 persona we have. Each Chrome Person has its own separate password store, bookmarks, and plugins. Perfect for what we’re doing.

Of course you’ll need to have Google Chrome installed before this will work. You can download it from this link. Or, you can show off your geek prowess and download it with PowerShell using this:

Invoke-WebRequest "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" -OutFile chrome_installer.exe –UseBasicParsing

Chrome auto-updates, so even if you get an older version, it should update itself after it installs.

After it’s installed look in the upper right corner for the Person icon. This screenshot shows my current Person and icon, but yours might look different:

image

It pulled my name “Todd” and my picture from my Google profile. After I created this person I logged into my Google account and it got it from there. We’ll cover that later. If you click on the Person icon you’ll get a dropdown like this. To add another user, click “Manage people.”

image

Right now I have a single, lonely person in Chrome. Fortunately we can add some friends with the Add Person button.

image

When you click the Add Person you get the dialog box to, well, add another user. I log in as my Office 365 Global Admin, so I’m going to make a Person for that user. I’m calling it “Office Admin” and I’m choosing the Ninja as its icon, it seems appropriate. If I log into Google as this Person it will download my Google profile including bookmarks and my Google avatar will replace the Ninja, sadly. In the lower left you have the option of creating a desktop icon for this Person. If you don’t, you simply pick it from the list in an existing Chrome instance. You can also add the desktop icon later if you regret not making it when you created the Person.

image

Now when we go into the “Manage people” screen my user has friends.

image

You can add as many users as you want. Each will have its own environment and its own set of stored passwords, bookmarks, and so on.

You know what they say, “Pics or it didn’t happen.”

image

You can see I have two browsers both logged into Office as different users, and best of all it will all persist, so the next time I use the “Office Admin” Person in Chrome it will remember my username and password. And also unlike using Incognito Mode, I can have more than two different users logged in at a time.

While I’ve talked about this all in the context of Office 365, it works for anything. If you have multiple Twitter accounts, YouTube accounts, whatever, this works. It’s a miracle of modern science, that’s what it is.

tk

ShortURL: https://www.toddklindt.com/ManyUsersBrowser

  
No presence informationTodd O. Klindt10/1/2018 3:47 PMOffice 365; SharePoint 2016; Speaking; Sharepoint1 

Want to join me for an all day SharePoint and Office 365 Admin Workshop? You are so in luck! On October 26th 2018 I will be teaching a one day workshop in beautiful, sunny Omaha Nebraska, Peyton Manning’s favorite!

Here’s the official event information:

Are you a SharePoint or Office 365 administrator looking for a fun way to spend a chilly Midwestern Friday? If so, then join Todd Klindt on Friday, October 26th for an all-day workshop on SharePoint and Office 365 Administration. He’ll pack as much administrative goodness into one day as humanly possible. He’s going to cover on-prem topics architecture and administration. Then he’ll switch gears and talk about cloud and Office 365 topics like authentication with Azure AD, OneDrive, SharePoint Online, Groups, and other administrative topics. After that foundation is laid down he’ll bring it all together by covering some of the hybrid opportunities there are with on-prem and online SharePoint and help you figure out which ones make the most sense for you. If there’s any time or brain cells left he’ll talk about migration and PowerShell.

The Omaha SharePoint User Group has created this low-cost training opportunity for our community.  While we normally meet a couple hours each month, this day will provide an exceptional training opportunity at a very low cost. 

What a great way to start your weekend, please join Todd on Friday for all things SharePoint.

Technologies Covered

SharePoint, Office 365, Azure AD, OneDrive, Groups

Details

Breakfast and snacks will be provided.  Lunch is on your own.

All of this for only $50. What a good deal! Register now before all the seats are taken and you’re forced to press your face to the window from the outside and watch the rest of us have the times of our lives.

I've had a couple of questions about this. This class is in-person only. I don't think there are options for remote viewing. Sorry to anyone that has the misfortune of not being in Omaha that day.

tk

ShortURL: https://www.toddklindt.com/OmahaWorkshop2018

  
No presence informationTodd O. Klindt9/28/2018 5:40 PMPodcast0 

The Microwave IS listening. Todd and Shane break it down for you this week. They also talk about Todd's controversial new blog post on Microsoft Flow and how it got him mentioned on another podcast. They also talk about some of the news coming out of Ignite and wrap things up complaining about DNS.

Thanks to our sponsor, AppRiver.

Audio File

Video File

Podcast 403 - The High End of the Low End (Time 0_17_19;14) 

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 48:09

Links:

19:00 Amazon's Smart Microwave
25:00 How to Disable the Flow button in SharePoint Online
33:45 SharePoint Dev Weekly – Episode 6
34:45 AppRiver
38:00 SharePoint Online Deployments Surging
48:00 What’s new in security, compliance, & administration for SharePoint & OneDrive from Microsoft Ignite
50:30 OneDrive Announcements at Ignite 2018
57:34 SharePoint Saturday New England 2018
58:00 How to Prepare for an Upgrade to SharePoint 2019
58:40 PowerSummit
59:30 SharePoint/O365 Administration Workshop with Todd Klindt
59:45Register here
1:00:00 SharePoint Saturday Cincinnati
1:01:00 PowerApps and Flow Training
1:02:00 North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast403

  
No presence informationTodd O. Klindt9/25/2018 5:15 PMPodcast0 

The podcast starts out with Todd and Shane complaining about patches and the things they break. They also talk about cord cutting, how to get properties of objects with the PnP PowerShell, and what Azure DBaaS is why Shane loves it so gosh darned much.

Thanks to our sponsor, AppRiver.

Audio File

Video File

Podcast 402 - Oodles and Oodles of Poodles (Time 0_23_30;25)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 47:46

Links:

14:14 "The closest you can get to knowing what it’s like to be a ghost is listening to a podcast where the hosts are trying to remember a piece of trivia that you know"
41:09 SharePoint Saturday New England 2018
41:51 How to Prepare for an Upgrade to SharePoint 2019
43:03 PowerSummit
45:07 North American Collab Summit

ShortURL: https://www.toddklindt.com/Podcast402

  
No presence informationTodd O. Klindt9/21/2018 8:19 AMPodcast0 

Todd's flying solo this week as Shane is selfishly on vacation. Todd powers on and talks about his troubles using PowerShell with Teams, and why your boss is wrong if he doesn't like the PnP PowerShell.

Thanks to our sponsor, AppRiver.

Audio File

Video File

Podcast 401 - So Much Better than the First Time I Did It (Time 0_17_34;26)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 34:04

Links:

Live events in Microsoft Teams
SharePoint Saturday New England 2018
9th Annual Thrive Conference

ShortURL: https://www.toddklindt.com/Podcast401

  
No presence informationTodd O. Klindt9/19/2018 5:09 PMPowerShell; Office 365; Sharepoint8 

Now, now, I know what you’re thinking, “This is a terrible idea! Why would any want to disable Flow?? What’s Flow ever done to them anyway?” I’m right there with you, honest I am, but a customer asked me how to do this and I can’t imagine they’re the only ones trying to do it. So while I’m a big fan of Flow and think everyone should enjoy it, in the unlikely event your organization doesn’t want to, here’s how to disable it.

When things are in their default state, the Ribbon, or Toolbar in a Modern List or Document Library in Office 365 shows an easy to use link to wire up a Flow to the library. It looks like this:

SNAGHTML206e612 

Very cute, very innocent, but regardless, some folks don’t want it there. Even if the user hitting the list or library isn’t licensed to use Flow, it’s there. This is a per site collection setting, and nowhere in the site or site collection settings is there a place to shut it off. I turned on the Bat Signal, and PowerShell answered my call. Sort of…

The official Microsoft SharePoint Online cmdlets have a cmdlets, Set-SPOSite and it has a parameter, –DisableFlows. Are you thinking what I’m thinking? Of course you are. And it does what we want, kind of. Here’s how the whole solution looks:

Connect-SPOService -Url https://flowhater-admin.sharepoint.com

$val = [Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy]::Disabled
Set-SPOSite -Identity
https://flowhater.sharepoint.com/sites/Me2Hub -DisableFlows $val

You have to do the funny business with $val because the –DisableFlows parameter doesn’t accept a boolean, like a civilized parameter does, it requires its value to be in the form of a Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy object, whatever that is. So that’s what it gets.

Now when we go to our Document Library it looks like this:

SNAGHTML20d5a7a 

Sad, I know. When you come to your senses and want to reenable Flow, here’s how you do it:

$val = [Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy]::NotDisabled
Set-SPOSite -Identity
https://flowhater.sharepoint.com/sites/Me2Hub -DisableFlows $val

And now is all right in the world.

Unless you have the fancy Site Collections that are using Groups in the background. Then you get the “womp womp” sound from Set-SPOSite. Okay, it really says, “Set-SPOSite : https://flowhater.sharepoint.com/sites/SPODemo2-Test2 is a Groups site collection.” but we all know what it really means. A less motivated man would have given up at this point. He would have taken this as a sign from the universe that one should not be disabling Flows, it’s just unnatural. Not this man. (In reality, not this man’s customer). So I went to Plan B, the PnP PowerShell, and it did not disappoint. The PnP’s version of the Set-Site cmdlet works with Group Site Collections and doesn’t require any weird casting voodoo. Here’s how it looks:

Connect-PnPOnline -Url https://flowhater.sharepoint.com/sites/SPODemo2-Test2 -Credentials 'SteffenAdmin'

Set-PnPSite -DisableFlows:$true

Here’s how you right that wrong:

Set-PnPSite -DisableFlows:$false

That’s much easier, and works on all site collections.

There you have it. I hope you never have to use it. Smile

Edit: This does not work with Group connected sites.

tk

ShortURL: https://www.toddklindt.com/PoshDisableFlowButton

  
No presence informationTodd O. Klindt9/18/2018 9:40 AMSharePoint 2016; SharePoint 2019; SharePoint 2013; SharePoint 2010; Speaking0 

Are you excited about SharePoint 2019? You know I am! Join me Thursday, September 27th at 10 CDT for a free (as in beer) webinar where I talk about what I’m doing with my customers to get them all primed and ready for SharePoint 2019. Some will be technical, some will be social, but it will all be fun.

The fine folks at SysKit are footing the bill for it all. Thanks!

Sign up here!

I hope to see you there.

tk

ShortURL: https://www.toddklindt.com/SysKitSP2019Prepare

  
No presence informationTodd O. Klindt9/15/2018 11:42 AMSharePoint 2010; SharePoint 2013; SharePoint 201622 

This isn’t specifically a SharePoint patching issue, but it’s close enough I thought I’d add it. A recent .NET security patch, KB 4457916, while doing a bang-up job fixing a remote exploitation in .NET, broke Workflows in SharePoint. Of course you could uninstall the patch, but everyone except the bad guys think that’s a horrible idea. Fortunately there’s a  fix that allows you all the protection of the patch as well as continue to enjoy SharePoint workflows. This blog post on MSDN provides the solution;

After that, you should be good to go.

This issue punctuates why it’s important to keep an eye on the Windows patches on your SharePoint servers. If you’re using some sort of patch distribution service, like WSUS, your SharePoint servers should be in their own group.

If you’ve had any experience with this patch or the fix, leave a comment below.

tk

ShortURL: https://www.toddklindt.com/PatchBreaksWorkflow

  
No presence informationTodd O. Klindt9/12/2018 4:02 PMPodcast0 

It's the big 4-0-0! Todd and Shane look back at the last nine years of podcasting glory. They also welcome a new sponsor, AppRiver. While they're waxing nostalgically they talk about the great time they had at SPTechCon in Boston. After all that's finished they get down to some tech goodness. They give their review of Bob German's recent posting on how to customize and brand SharePoint Online. The SharePoint Online PowerShell module got an exciting change and they cover that as well. They finish up by talking about the recent Azure outage and some cool things Shane has done with PowerApps and Flow.

Thanks to our sponsor, AppRiver.

Audio File

Video File

Podcast 400 - Drumroll Please (Time 1_10_24;09) 

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 48:49

Links:

3:00 Update to SysKit Insights
13:05 AppRiver our newest Sponsor
18:35 SPTechCon Austin 2019
31:20 Branding SharePoint: The New Normal
34:23 Announcing availability of SharePoint Online Management Shell from PowerShell Gallery
43:25 PowerApps Google Maps API
43:26 PowerApps Generate a PDF with a Flow
44:00 SharePoint Saturday New England 2018
46:10 9th Thrive Conference

ShortURL: https://www.toddklindt.com/Podcast400

  
No presence informationTodd O. Klindt9/7/2018 4:45 PMPodcast0 
  
No presence informationTodd O. Klindt8/8/2018 8:37 AMPodcast0 

Shane and Todd are back together this week and a good time is had by all. They talk about patches, SharePoint 2019, blogging every day, EVERY DAY, for over a year. That and more this week on Todd and Shane's Cloudy Podcast.

Audio File

Video File

Podcast 398 - Sounds Dumb (Time 0_00_03;18)

YouTube (Subscribe)

Subscribe in iTunes

Running Time: 48:43

Links:

1:00 SPDocKit Review – July 2018
2:00 New in SysKit Security Manager: Automatic Discovery of Site Collections
23:49 The Patch that is destroying the world
28:30 SharePoint Server 2019 Public Preview
34:38 SharePoint Server 2016 dev/test environment in Azure
35:00 Shanes Video series
36:41 SharePoint 2013/2010 - Remove Columns Name from Group View
40:26 Vote for Save in AutoSave
38:06 Tracy van der Schyff
40:00 SPS Charlotte
41:00 SharePoint Saturday New England 2018
42:00 SPTechCon Boston

ShortURL: http://www.toddklindt.com/Podcast398

  
No presence informationTodd O. Klindt7/24/2018 4:13 PM0 

There are a few things I get really, really excited about. Buy one, get one free day at Dairy Queen is one of them. New versions of SharePoint are another. DQ failed me today, but Microsoft did not. Today they released the SharePoint Server 2019 Public Preview. You can read all about it on Bill Baer’s Tech Community blog post. 

If you don’t want to read all of Bill’s words (who does, really?) here are some quick links:

Download SharePoint Server 2019

SharePoint 2019 Quick Start Guide

SharePoint 2019 Reviewer’s Guide

Now that SharePoint 2019 is out you can look forward to some blog posts here about it. Leave me comments below and let me know what you think.

tk

ShortURL: https://www.toddklindt.com/SP2019isHere

1 - 100Next