<?xml version="1.0" encoding="UTF-8"?>
<!--RSS generated by Microsoft SharePoint Foundation RSS Generator on 7/21/2025 12:39:16 AM -->
<?xml-stylesheet type="text/xsl" href="/blog/_layouts/RssXslt.aspx?List=56f96349-3bb6-4087-94f4-7f95ff4ca81f" version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Todd Klindt's Blog Posts</title>
    <link>https://www.toddklindt.com/blog/Lists/Posts/AllPosts.aspx</link>
    <description>RSS feed for the Posts list.</description>
    <copyright>Todd Klindt</copyright>
    <lastBuildDate>Mon, 21 Jul 2025 05:39:15 GMT</lastBuildDate>
    <generator>Microsoft SharePoint Foundation RSS Generator</generator>
    <ttl>60</ttl>
    <language>en-US</language>
    <image>
      <title>Todd Klindt's Office 365 Admin Blog: Posts</title>
      <url>https://www.toddklindt.com/blog/_layouts/images/homepage.gif</url>
      <link>https://www.toddklindt.com/blog/Lists/Posts/AllPosts.aspx</link>
    </image>
    <item>
      <title>PowerShell Script to Download all Documents from all Doclibs, Versions Included</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=905</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass61AA7853467E4D53944C9D5617EA32F7"><p><font size="3">I recently saw a post (maybe on <a href="https://www.reddit.com/r/sharepoint/">Reddit</a>) where someone was asking for a script that would download all the files in a SharePoint site. I found myself with a few spare minutes and an open ChatGPT window, so I took a swing at it. <font size="3">I think the results turned out pretty well. I do want to give a shout out to the Salaudeen Rajack at <a href="https://www.sharepointdiary.com/">SharePoint Diary</a>. We did get some help from <a href="https://www.sharepointdiary.com/2018/06/sharepoint-online-download-all-versions-using-powershell.html">this script</a> of his. </font></font></p>  <p><font size="3">To give the script a wider audience, I submitted it to the <a href="https://pnp.github.io/script-samples/index.html">PnP Script Samples Gallery</a>. <strong>You can </strong><a href="https://pnp.github.io/script-samples/spo-download-all-doclibs/README.html?tabs=pnpps"><strong>download it here</strong><font size="3">. </font></a></font></p>  <p><font size="3">I tried to write it as well as I could, so I wrote it as a function inside of a module file. Because of that you have to save the script as a PSM1 file (as opposed to a regular old PS1 file). Then use <font face="Courier New">Import-Module</font> to import that PSM1 file, which adds my function, <font face="Courier New">Download-SharePointFiles</font> to your PowerShell host. Then run <font face="Courier New">Download-SharePointFiles</font> with the correct parameters. It looks like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/905/image_2_0597BB86.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/905/image_thumb_70A63912.png" width="689" height="409" /></a></p>  <p><font size="3">That gives you output that looks like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/905/image_4_70A63912.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/905/image_thumb_1_70A63912.png" width="703" height="383" /></a></p>  <p><font size="3">I hope you find it helpful. Let me know in the comments if there’s any functionality you’d like me to add</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/POSHDownloadAllFiles"><font size="3">https://www.toddklindt.com/POSHDownloadAllFiles</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_2_0597BB86.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_2_0597BB86.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_4_70A63912.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_4_70A63912.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_thumb_1_70A63912.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_thumb_1_70A63912.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_thumb_70A63912.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/905/image_thumb_70A63912.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Sharepoint; Office 365</category>
      <pubDate>Thu, 12 Dec 2024 17:57:20 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=905</guid>
    </item>
    <item>
      <title>Creating a PnP.PowerShell App Registration with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=904</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass32678BC3C7CF478DBFD38754DF13C169"><p><font size="3">The PnP team recently announced they were </font><a href="https://pnp.github.io/blog/post/changes-pnp-management-shell-registration/"><font size="3">making changes to how the PnP.PowerShell and M365 CLI authenticate</font></a><font size="3">. The short story is that if you want to use the PnP.PowerShell module or the M365 CLI after September 9th, 2024, you’ll need to create your own Application Registration, also known as an App Reg. I know, I know, that sounds confusing and scary. Fortunately there’s nothing to it. I’ve got all the steps for you to follow along. You’ll be ready to go in no time. </font></p>  <p><font size="3">If you’re reading this, I assume you already have the </font><a href="https://pnp.github.io/powershell/articles/installation.html#installing-pnp-powershell"><font size="3">PnP.PowerShell module installed</font></a><font size="3">. Good, because you’ll need that. The steps I’m going to show you will probably work with any version 2.0.0 or later, but I recommend updating to at least 2.9.0, which is the latest version as of this blog post. It’s got some extra sauce in it to make this go more smoothly.</font></p>  <p><font size="3">After you’ve got the PnP.PowerShell module installed, open up PowerShell. This module has supported using custom app regs for a while, so all of the plumbing is already there. We need to run the <font face="Consolas">Register-PnPAzureADApp</font> cmdlet (also aliases as <font face="Consolas">Register-EntraIDApp</font>, they’re the same thing) to create our own App Reg. Example #1 from the help is what I use. Here’s what it looks like:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Register-PnPAzureADApp -ApplicationName PnP.PowerShell -Tenant 1kgvf.onmicrosoft.com -Store CurrentUser –Interactive</font></p> </blockquote>  <p><font face="Consolas"><font size="3" face="Verdana">The name of the App Reg we’re creating is “PnP.PowerShell.” My tenant is 1kgvf, but of course you’ll use your own. It’s going to create a certificate for us (we won’t need it) and store it in the CurrentUser Certificate Store. And finally, since I’m using MFA, like every good user does, I use the –Interactive switch to do browser based authentication. You’ll have to log in as a Global Admin, or a user the Global Admin has given permission to create App Regs to. </font></font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_2_7A03CC78.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_65124A05.png" width="676" height="273" /></font></a></p>  <p><font size="3">After I log in Azure gets to work doing what it does. Since I didn’t pass any scopes to Register-PnPAzureADApp it uses its default set. You’ll get prompted to authenticate a second time then asked to consent to them.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_20_44A6F537.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_9_44A6F537.png" width="632" height="616" /></a></p>  <p><font size="3">We’ll talk more about that in a bit. </font></p>  <p><font size="3">Once it’s done, you’ll get a screen like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_6_65124A05.png"><font size="3"><a href="/blog/Lists/Posts/Attachments/904/image_6_65124A05.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_2_65124A05.png" width="677" height="306" /></a></font></a></p>  <p><font size="3">Here is where you’ll get the Client ID (also called AppID and AzureAppID, it’s all the same) you’ll need when you connect. In my example that’s 001ed5a0-be10-4bc3-a40c-a1cad0c987b7. You can also get that ID number by going into the <a href="https://aad.portal.azure.com/">Azure Portal</a> and looking at the Enterprise applications. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_8_65124A05.png"><font size="3"><a href="/blog/Lists/Posts/Attachments/904/image_8_65124A05.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_3_65124A05.png" width="680" height="545" /></a></font></a></p>  <p><font size="3">Find your App Reg and click it. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_10_65124A05.png"><font size="3"><a href="/blog/Lists/Posts/Attachments/904/image_10_65124A05.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_4_65124A05.png" width="687" height="567" /></a></font></a></p>  <p><font size="3">Then you can copy it to your clipboard. </font></p>  <p><font size="3">Now that you have your ClientID, let’s use that to connect to Microsoft 365. In my case I would use this connect statement:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Connect-PnPOnline -Url </font><a href="https://1kgvf.sharepoint.com/"><font size="3" face="Consolas">https://1kgvf.sharepoint.com/</font></a><font size="3" face="Consolas"> -Interactive -ClientId 001ed5a0-be10-4bc3-a40c-a1cad0c987b7</font></p> </blockquote>  <p><font size="3">Of course you’ll use your own tenant name and the ClientID that you created. The one I created isn’t visible to your tenant.</font></p>  <p><font size="3">You’ll get prompted for a username and password, and hopefully some MFA. Then you’ll be connected to M365. Here’s how it all looks:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_12_65124A05.png"><font size="3"><a href="/blog/Lists/Posts/Attachments/904/image_12_65124A05.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_5_65124A05.png" width="701" height="615" /></a></font></a></p>  <p><font size="3">As you can see, I’m connected and a quick function check looks like everything is working fine. Success!!! Well, sort of…</font></p>  <p><font size="3">We talked before about scopes, and how the <font face="Consolas">Register-AzureADApp</font> cmdlet used its default scopes since I didn’t specify any. Those scopes covered SharePoint, and Users, but not much else. For instance, if I try to get a list of the Teams in my tenant, I’m met with an authentication screen. After I authenticate (with a Global Admin) I get a page wanting more permission:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_14_65124A05.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_6_65124A05.png" width="568" height="411" /></font></a></p>  <p><font size="3">Now it wants access to Read all groups, and more User permissions. I clicked Consent and then Accept. It returned my Teams to me. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_16_65124A05.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_7_65124A05.png" width="567" height="142" /></font></a></p>  <p><font size="3">This adds some complication. If the user you normally use PnP.PowerShell with is a GA, then you’re golden. Every time you stumble onto something you can’t do, it’ll prompt you and you’ll consent. If you have a separate GA user, or someone else is doing the GA stuff for you, you’ll have to go into the Azure Portal and add the additional Scopes in there. That sounds like something that would fit really well in another blog post. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/904/wlEmoticon-smile_2_65124A05.png" /> </font></p>  <p><font size="3">There’s another gotcha. By default, when Register-PnPAzureADApp creates the App Reg, it only gives the user that created it permission to use it. If anyone else needs to use it you’ll need to go into the Azure Portal, open the App Reg, go to the Users and Groups blade, and add the additional users. That won’t give them any additional permissions anywhere in M365, it simply gives them permission to use this App Reg when using PnP.PowerShell. </font></p>  <p><font size="3">I mentioned at the top that version 2.9.0 had some extra sauce to help with this. It can get a bit tedious adding the <font face="Consolas">–ClientID SomeUglyGUID</font> part every time you connect. This is particularly painful if you’ve got scripts and the like with connect statements that don’t have the <font face="Consolas">-ClientID</font> parameter. In 2.9.0 and later <font face="Consolas">Connect-PnPOnline</font> supports an environment variable ENTRAID_APP_ID. If no <font face="Consolas">–ClientID</font> is specified, and that variable has a value, <font face="Consolas">Connect-PnPOnline</font> will use that. Here’s what it looks like:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/904/image_18_65124A05.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/904/image_thumb_8_65124A05.png" width="596" height="268" /></font></a></p>  <p><font size="3">That variable value will go away when you close PowerShell. If you put the <font face="Consolas">$env:ENTRAID_APP_ID = &quot;001ed5a0-be10-4bc3-a40c-a1cad0c987b7&quot;</font> line in <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.4">your PowerShell profile</a> it will get populated every time you open PowerShell. If you’re a local admin on your machine you can also set a persistent environment variable in an admin prompt with this line:</font></p>  <blockquote>   <p><font size="3" face="Consolas">[System.Environment]::SetEnvironmentVariable('ENTRAID_APP_ID', '001ed5a0-be10-4bc3-a40c-a1cad0c987b7', 'User')</font></p> </blockquote>  <p><font size="3">Or you can set it in the Control Panel. Again, you’ll want to use your Client ID, not mine.            <p>I hope that helps. If you have any questions, leave me a comment. </p>      <p>tk</p>      <p>ShortURL: <a href="/PoshMakeAppReg">https://www.toddklindt.com/PoshMakeAppReg</a> </p>         </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=5\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=5&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_10_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_10_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_12_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_12_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_14_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_14_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_16_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_16_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_18_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_18_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_2_7A03CC78.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_2_7A03CC78.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_20_44A6F537.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_20_44A6F537.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_4_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_4_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_6_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_6_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_8_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_8_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_1_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_1_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_2_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_2_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_3_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_3_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_4_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_4_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_5_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_5_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_6_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_6_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_7_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_7_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_8_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_8_65124A05.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_9_44A6F537.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/image_thumb_9_44A6F537.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/wlEmoticon-smile_2_65124A05.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/904/wlEmoticon-smile_2_65124A05.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PnP; Sharepoint; PowerShell</category>
      <pubDate>Thu, 22 Aug 2024 18:41:56 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=904</guid>
    </item>
    <item>
      <title>Happy Monday!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=903</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassBE0D2F48532447BA90F77C9EF6F5BAFF"><p><font size="3">I know Mondays can be rough. Fortunately I have something to help you through this particular Monday. I was recently interviewed on the “</font><a href="https://linktr.ee/masteringmondays"><font size="3">Mastering Mondays</font></a><font size="3">” podcast from the </font><a href="https://www.nomorebadmondays.com/"><font size="3">No More Bad Mondays</font></a><font size="3"> guys. I had a blast catching up with Dave and Matt. We talk about our favorite tech and I recount an experience in my childhood that nearly scarred me for life. The time flew by. Give the episode a listen on your favorite platform and let me know what you think. </font></p>
  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: </font><a href="/HappyMonday"><font size="3">https://www.toddklindt.com/HappyMonday</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=23\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=23&amp;RootFolder=*">Speaking</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=5\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=5&amp;RootFolder=*">Tech Stuff</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Sharepoint; Speaking; Tech Stuff</category>
      <pubDate>Mon, 29 Jul 2024 13:57:01 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=903</guid>
    </item>
    <item>
      <title>Syskit Blog Post on AI and PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=902</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass2B98D66C6836406FB4DCD2301D271BF6"><p><font size="3">My buddies at Syskit and I were chatting recently and we realized we hadn’t worked together in far, far too long. We decided that needed to be remedied right away! So last week I wrote a blog post for them called <a href="https://www.syskit.com/blog/using-ai-to-write-powershell-scripts/">Using AI to write PowerShell scripts</a>. It’s even more fun than it sounds, I promise. In it I cover my process for using AI to write even cooler PowerShell scripts than I would be able to on my own. You can even use the free version of ChatGPT to write better PowerShell.  </font></p>  <p><font size="3">Give it a read and let us know what you think.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">Short URL: <a href="/SyskitAIandPowerShell">https://www.toddklindt.com/SyskitAIandPowerShell</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=31\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=31&amp;RootFolder=*">AI</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>AI; PowerShell</category>
      <pubDate>Mon, 08 Jul 2024 14:51:03 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=902</guid>
    </item>
    <item>
      <title>How to use PowerShell 7 and PnP.PowerShell When You Can’t Install Software</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=901</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassBFE7C01640A64042B8E386AD0DB9C49D"><p><font size="3">During the last <a href="https://www.sympraxisconsulting.com/asksympraxis/">Ask Sympraxis</a> our friend <a href="https://mvp.microsoft.com/en-US/MVP/profile/8b84e3ee-ffd1-4222-998e-af31f40925e8">Kasper Larsen</a> relayed a question he had gotten recently, “Is it possible to run the PnP.PowerShell module if I’m not allowed to install it or PowerShell 7?” The question brought tears of sadness to my eyes. Then, my indomitable spirit kicked in, “We’ll help this person!”, it said. And here we are. </font></p>  <p><font size="3">The short answer to, “Can you run PnP.PowerShell if you can’t install anything” is a resounding, “Yes! Heck yes you can!” The answer to “how” comes in two parts. The first is to download <a href="https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4#installing-the-zip-package">the PowerShell 7 Zip file</a> and run pwsh.exe out of there without installing it. The second part is to <a href="https://pnp.github.io/powershell/articles/installation.html">install the PnP.PowerShell module</a> in the CurrentUser scope, so that it doesn’t try to write anything to a protected directory. After that, run PnP.PowerShell cmdlets to your heart’s content.</font></p>  <p><font size="3">Here’s what it looks like:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/901/image_2_773044E8.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/901/image_thumb_773044E8.png" width="684" height="185" /></a></p>    <p><font size="3">There’s proof, the PowerShell way, that the user I’m logged in as isn’t an admin. First, I download the <a href="https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4#installing-the-zip-package">PowerShell 7 zip file </a>and extract it to a folder in my Downloads folder. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/901/image_4_773044E8.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/901/image_thumb_1_773044E8.png" width="689" height="195" /></a></p>  <p><font size="3">Then I <font face="Consolas">CD</font> to the directory and run <font face="Consolas">pwsh.exe</font>, like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/901/image_6_773044E8.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/901/image_thumb_2_773044E8.png" width="697" height="238" /></a></p>  <p><font size="3">You can see from the <font face="Consolas">$PSVersionTable</font> that we’re running PowerShell 7. Now I install the PnP.PowerShell module to my user with the line <font face="Consolas">Install-Module pnp.powershell –Scope CurrentUser</font>.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/901/image_8_773044E8.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/901/image_thumb_3_773044E8.png" width="697" height="278" /></a></p>  <p><font size="3">After I run the install I use <font face="Consolas">Connect-PnPOnline</font> like I normally would. At the bottom I highlighted where the module is installed, your personal Documents directory. </font></p>  <p><font size="3">One very important note, is that you (or anyone) won’t be able to connect if the PnP.PowerShell application registration hasn’t been approved in your tenant. This blog post, “<a href="/blog/Lists/Posts/Post.aspx?ID=886">How to Register the PnP.PowerShell App Registration if You’re not a Tenant Admin</a>” covers it a bit. That App Registration is necessary in 99% of the use cases. You can connect and do a few SharePoint things without it, but that list is pretty short. </font></p>  <p><font size="3">I’m not sure how often this will come up, but hopefully this blog post is at least interesting. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/901/wlEmoticon-smile_2_773044E8.png" /></font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshWithoutAdmin">https://www.toddklindt.com/PoshWithoutAdmin</a></font></p>  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_2_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_2_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_4_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_4_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_6_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_6_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_8_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_8_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_1_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_1_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_2_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_2_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_3_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_3_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/image_thumb_773044E8.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/wlEmoticon-smile_2_773044E8.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/901/wlEmoticon-smile_2_773044E8.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Tue, 04 Jun 2024 19:06:56 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=901</guid>
    </item>
    <item>
      <title>Simplifying Client Credentials with PowerShell: Add-ClientCredential</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=900</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass9C44859E60064C07911CF10A9B954B8C"><p><font size="3">If you’ve been around the block with SharePoint or Microsoft 365 administration, you know that handling client credentials can sometimes feel like juggling with fire. When I start a new engagement with a client I generally get credentials to access their tenant. Of course they immediately go into our password management tool. I also do a lot of PowerShell scripting for my clients, so I save them to the Windows Credential store too, so that I can connect with <font face="Consolas">Connect-PnPOnline</font> without having to enter them each time. And while that’s not a lot of work, I thought I could streamline it. <font size="3">That’s why I’ve put together a PowerShell command, <font face="Consolas">Add-ClientCredential</font>, that makes it a little easier.</font></font></p> <font size="3"></font>  <h1>What Does <font face="Consolas">Add-ClientCredential</font> do?</h1> <font size="3"></font>  <p><font size="3">In a nutshell, this PowerShell command is designed to streamline the process of adding client credentials in a SharePoint or Microsoft 365 environment. It stores your credential for <a href="https://tenant.sharepoint.com">https://tenant.sharepoint.com</a> and <a href="https://tenant-admin.sharepoint.com">https://tenant-admin.sharepoint.com</a>. If you don’t specify any credentials when you connect with <font face="Consolas">Connect-PnPOnline</font> it will look for them in the Windows Credential Store. If you have one assigned for the root of the tenant, <a href="https://tenant.sharepoint.com">https://tenant.sharepoint.com</a>, it will also use that for other sites in the tenant, like <a href="https://tenant.sharepoint.com/sites/ToddisTheBest">https://tenant.sharepoint.com/sites/ToddisTheBest</a>, if a credential is not saved for that specific site. </font></p> <font size="3"></font>  <p><font size="3">Here’s a quick example:</font></p> <font size="3"></font>  <blockquote>   <p><font size="3"><font face="Consolas">Add-ClientCredential -TenantName &quot;contoso&quot; -UserName <a href="mailto:admin@contoso.com">admin@contoso.com</a></font></font></p> </blockquote>  <p><font size="3">I like this method because then my password will never show up in History or a Transcript if one is running. <font size="3">Since we didn’t pass it a password, it will prompt you for one. </font>Then it will create credential entries for <a href="https://contoso.sharepoint.com">https://contoso.sharepoint.com</a>, <a href="http://contoso.sharepoint.com">http://contoso.sharepoint.com</a>, and <a href="https://contoso-admin.sharepoint.com">https://contoso-admin.sharepoint.com</a></font></p>  <p><font size="3">To pass it a password, do it like this:</font></p>  <div><font size="3">     <blockquote>       <p><font face="Consolas">Add-ClientCredential -TenantName &quot;contoso&quot; -UserName </font><a href="mailto:admin@contoso.com"><font face="Consolas">admin@contoso.com</font></a><font face="Consolas"> -Password (ConvertTo-SecureString &quot;YourPassword”            <br /> -AsPlainText -Force)</font></p>     </blockquote>      <p>Keep in mind that will show up in plain text in PowerShell’s <font face="Consolas">Get-History</font>, or the Transcript file, if you have that running.</p>      <p>I built in some smarts so that if there is already a credential stored for “Contoso” it will let you know and ask you if you want to overwrite it. </p>      <p>If you want to get super fancy you can add the <font face="Consolas">–TestCredential</font> switch which will test the credentials you gave it by logging in with them. All of this is available if you run <font face="Consolas">help Add-ClientCredential –Examples.</font></p>      <p>In the background this function uses <a href="https://pnp.github.io/powershell/cmdlets/Add-PnPStoredCredential.html"><font face="Consolas">Add-PnPStoredCredential</font></a> to store the credentials for you. It adds them for the root of the tenant, and the –admin URL.</p>   </font></div> <font size="3"></font>  <h1>How to Get Started</h1> <font size="3"></font>  <p><font size="3">To get your hands on this little beauty, head over to <a href="https://github.com/ToddKlindt/PowerShell">my GitHub repository</a>. You can download <a href="https://github.com/ToddKlindt/PowerShell/blob/master/addclientcreds.psm1"><font face="Consolas">addclientcreds.psm1</font></a> itself, or clone the whole repo. Use <font face="Consolas">Import-Module</font> to import it into your PowerShell host and you’re ready to go.</font></p> <font size="3"></font>  <h1>Wrapping Up</h1> <font size="3"></font>  <p><font size="3"><font face="Consolas">addclientcreds.psm1</font> is my attempt to put a little more simplicity and sanity into the world of SharePoint and Microsoft 365 administration. I hope you find it as useful as I do. As always, I welcome your feedback and questions. Drop a comment below or shoot me a message on Twitter <a href="https://twitter.com/ToddKlindt">@ToddKlindt</a></font><font size="3">.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshAddClientCreds">https://www.toddklindt.com/PoshAddClientCreds</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365; PnP</category>
      <pubDate>Wed, 27 Sep 2023 14:36:50 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=900</guid>
    </item>
    <item>
      <title>Automating Attorney Files and Case Folders Creation in SharePoint</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=899</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD3CEDC9EBBCD479394AF94B6E20A6D72"><p><font size="3">In my last masterpiece, </font><a href="/blog/Lists/Posts/Post.aspx?ID=898"><font size="3">Tackling SharePoint's 5000 Item Limit with PowerShell and Search</font></a><font size="3">, I show how to use PowerShell with Search to return more than 5000 items from a SharePoint list or library, even if SharePoint refuses to return more than 5000 items. Pretty impressive, right? When demonstrating something like that you need a list or library with more than 5000 items. There are are a lot of scripts out there that can create test data, but I needed something specific. So, I opened up a new windows in VS Code and got to coding.</font></p>  <p><font size="3">The PowerShell function I wrote is <a href="https://github.com/ToddKlindt/PowerShell/blob/master/Search%20demonstration%20creation%20Module.psm1">Add-AttorneyFiles</a><strong><font face="Consolas">,</font></strong> which is designed to streamline the creation of attorney files and case folders. Lots and lots of them.</font></p> <font size="3"></font>  <p><font size="3">This function has a few parameters to tailor the files and folders it creates. It accepts two mandatory parameters, <strong><font face="Consolas">AttorneyCount</font></strong> and <strong><font face="Consolas">CaseCount</font></strong>, specifying the number of attorneys and case folders to create for each attorney. </font></p> <font size="3"></font>  <p><font size="3">There are also a few switch parameters that allow you to customize the function's behavior further. You can choose to create a file in each case folder using the <strong><font face="Consolas">CreateStaticFile</font></strong> switch, or specify that only closed or client case folders should be created with the <strong><font face="Consolas">OnlyClosedCases</font></strong> and <strong><font face="Consolas">OnlyClientCases</font></strong> switches. </font></p> <font size="3"></font>  <p><font size="3">You can also specify the name of the static file created using the <strong><font face="Consolas">StaticFileName</font></strong> parameter. If no name is provided, the function will default to creating a file named &quot;<strong><font face="Consolas">readme.txt</font></strong>&quot;.</font></p> <font size="3"></font>  <p><font size="3">The function starts by checking if a connection to a SharePoint site exists. If it does, the function creates attorney files and case folders in a SharePoint directory. The names for these attorney files are generated randomly from a list of common first and last names. This randomness helps to create a more realistic environment for testing. </font></p> <font size="3"></font>  <p><font size="3">Once the list of attorney names is created, the function will loop through each attorney, creating the appropriate case folders, either client case folders, closed case folders, or both, based on the parameters passed in. </font></p> <font size="3"></font>  <p><font size="3">The function gives the folders and files it creates a randomly generated last and first name, along with a random case number, for a more realistic setup. </font></p>  <p><font size="3">If the <strong><font face="Consolas">CreateStaticFile</font></strong> switch is present, a static file will be created in each case folder. The content of these static files is a random selection of words, downloaded from a free online dictionary. This randomization also contributes to a more realistic testing environment. </font></p> <font size="3"></font>  <p><font size="3">Here's an example of how you might use this function:</font></p> <font size="3"></font>  <p>   <br /><font size="3"><strong> Add-AttorneyFiles -AttorneyCount 10 -CaseCount 5 –CreateStaticFile</strong></font></p>  <p><a href="/blog/Lists/Posts/Attachments/899/image_2_779AC853.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/899/image_2_779AC853.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/899/image_thumb_779AC853.png" width="664" height="626" /></a></font></p>  <p><font size="3">     <br /></font></p>  <p><font size="3">This will create 10 attorney folders, each with 5 case folders. A static file named &quot;<strong><font face="Consolas">readme.txt</font></strong>&quot; will be created in each case folder. For my blog a created a whole lot of <strong><font face="Consolas">autorun.inf</font></strong> files.</font></p> <font size="3"></font>  <p><font size="3">By automating the setup of this testing environment, I was able to generate a high volume of test data, with a format that accurately represented my client’s data, without exposing any of it. </font></p>  <p><font size="3">I’ve uploaded the <a href="https://github.com/ToddKlindt/PowerShell/blob/master/Search%20demonstration%20creation%20Module.psm1">code to GitHub</a>. Check it out. </font></p> <font size="3"></font>  <p><font size="3">Happy PowerShelling, and as always, feel free to drop any questions or comments below!</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshAttorneyFiles"><font size="3">https://www.toddklindt.com/PoshAttorneyFiles</font></a><font size="3"> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/899/image_2_779AC853.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/899/image_2_779AC853.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/899/image_thumb_779AC853.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/899/image_thumb_779AC853.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PnP; PowerShell; Sharepoint</category>
      <pubDate>Thu, 13 Jul 2023 15:38:08 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=899</guid>
    </item>
    <item>
      <title>Tackling SharePoint's 5000 Item Limit with PowerShell and Search</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=898</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE460B432367E481C8CF4D81FB75D6B10"><p><font size="3">In the world of SharePoint, the 5000 item per view limit is a well-known challenge, the stuff of legend. To recap, while a SharePoint list or library can have </font><a href="https://learn.microsoft.com/en-us/office365/servicedescriptions/sharepoint-online-service-description/sharepoint-online-limits"><font size="3">up to 30 million items</font></a><font size="3"> in it, SharePoint refuses to show you more than 5000 of them at a time. That’s an API level control to protect the backend, so it won’t do this in a view in a web page, an API call through PowerShell or CLI, nothing. While there are several ways to navigate around this limit, such as using CAML queries, these methods often fall short when dealing with really large datasets. This blog post will explore a unique solution to this problem using PowerShell, specifically focusing on the use of Search to retrieve data.</font></p>
 <font size="3"></font>  <h1>The Challenge</h1>
 <font size="3"></font>  <p><font size="3">Recently, I was working with a client, a law firm, who had a whopping 7.8 million items in a SharePoint document library. Of course not a great Information Architecture. We were helping them fix that. Among other horrors, over the years, attorneys had copied the contents of CDs and DVDs to various places in SharePoint, creating a massive and complex data structure. The challenge was to find all these so we could migrate them out or delete them. However, due to the sheer volume of data, there was no way to slice the data using the normal tools to get back fewer than 5000 results. This is where PowerShell swoops in and saves the day.</font></p>
 <font size="3"></font>  <h1>The PowerShell Solution</h1>
 <font size="3"></font>  <p><font size="3">The solution came in two parts. We were looking for the DVDs by looking for the<strong><font face="Consolas"> autorun.inf</font></strong> file in the root. I discovered I couldn’t using something like <strong><font face="Consolas">Get-PnPListItem</font></strong> to find all of the <strong><font face="Consolas">autorun.inf</font></strong> files because I couldn’t find a way with CAML, or anything else to pare the result set down below 5000. There were just too many files. However, I did discover that I could find them in the Search Center, which gave me the first idea. Get them from Search in PowerShell. I used the <strong><font face="Consolas">Submit-PnPSearchQuery</font></strong> cmdlet to send a search query to SharePoint and it retrieves all the results. It gets them in batches of 500 (the maximum for a single search request), with the option of making multiple requests if necessary to retrieve all results. This worked pretty well, but was tedious because I could only get 500 at a time and there were thousands. I had to modify the search, run it again, and append those results to the results from the previous searches. That was too much work, and led to the second part. I wrote a PowerShell function called <a href="https://github.com/ToddKlindt/PowerShell/blob/master/SearchAll.psm1">Submit-PnPSearchQueryAll</a><strong><font face="Consolas"></font></strong>. This function uses the<strong><font face="Consolas"> Submit-PnPSearchQuery</font></strong> cmdlet to send a search query to SharePoint and retrieves all results, paging through them and running multiple queries as needed. If the <strong><font face="Consolas">-ShowProgress</font></strong> switch is provided, the function will display the total number of results and a progress bar.</font></p>
  <p><font size="3"><font size="3">Before we look at the function itself, let’s see how it works. My usage looked like this:        <br /><strong><font face="Consolas">$AllResults = Submit-PnPSearchQueryAll -query &quot;autorun.inf&quot;</font></strong></font></font></p>
  <p><font size="3">That stored every file named <strong><font face="Consolas">autorun.inf</font></strong> in the variable <strong><font face="Consolas">$AllResults</font></strong>. There are 5046 of them:       <br /><strong><font face="Consolas">$AllResults.Count</font></strong></font></p>
  <p><a href="/blog/Lists/Posts/Attachments/898/image_2_316CF1AC.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/898/image_2_316CF1AC.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/898/image_thumb_316CF1AC.png" width="693" height="119" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">Since that’s a collection of objects I can treat them like any old object:      <br /><strong><font face="Consolas">$AllResults[1000]</font></strong></font></p>
  <p><a href="/blog/Lists/Posts/Attachments/898/image_4_316CF1AC.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/898/image_4_316CF1AC.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/898/image_thumb_1_316CF1AC.png" width="691" height="348" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">and</font></p>
  <p><strong><font size="3" face="Consolas">$AllResults | Where-Object {$_.ParentLink -like &quot;*AttorneyFiles/Johnson, Michael*&quot; }</font></strong></p>
  <p><a href="/blog/Lists/Posts/Attachments/898/image_6_316CF1AC.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/898/image_6_316CF1AC.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/898/image_thumb_2_316CF1AC.png" width="695" height="321" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">or </font></p>
  <p><strong><font size="3" face="Consolas">$AllResults | Where-Object {$_.ParentLink -like &quot;*AttorneyFiles/Johnson, Michael*&quot; } | select Path,ParentLink</font></strong></p>
  <p><a href="/blog/Lists/Posts/Attachments/898/image_8_316CF1AC.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/898/image_8_316CF1AC.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/898/image_thumb_3_316CF1AC.png" width="698" height="333" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">and </font></p>
  <p><strong><font size="3" face="Consolas">$AllResults | Where-Object {$_.ParentLink -like &quot;*AttorneyFiles/Johnson, Michael*&quot; } | Export-Csv .\mj.csv</font></strong></p>
  <p><font size="3">See all the fun you can have? Since the object we’re getting back is a <strong><font face="Consolas">PnPResultTable</font></strong> object, it doesn’t have all the same properties as a <strong><font face="Consolas">PnPListItem</font></strong>. When I wrote the function I had to decide which ones I needed. If you use this, you might need something different. </font></p>
  <h1>How It Works</h1>
 <font size="3"></font>  <p><font size="3">The function begins by initializing variables for the starting row and page size, set to 500. It then enters a loop where it performs the search query with <strong><font face="Consolas">Submit-PnPSearchQuery </font></strong>and retrieves the results. If the <strong><font face="Consolas">–ShowProgress</font></strong> switch is provided, it will display the total number of results on the first run and a progress bar for each subsequent run.</font></p>
 <font size="3"></font>  <p><font size="3">For each result, the function outputs a custom object with the desired properties. It then increments the <strong><font face="Consolas">$startRow</font></strong> by the <strong><font face="Consolas">$pageSize</font></strong> and continues the loop while the <strong><font face="Consolas">$startRow</font></strong> is less than the Total Rows. </font></p>
  <p><font size="3">Before I got this working I tried a couple of other approaches, but this one worked the best. </font></p>
  <p><font size="3"><a href="https://github.com/ToddKlindt/PowerShell/blob/master/SearchAll.psm1">Grab the PSM1 file with Submit-PnPSearchQueryAll here.</a></font></p>
 <font size="3"></font>  <h1>Conclusion</h1>
 <font size="3"></font>  <p><font size="3">This PowerShell function proved to be an effective solution to the SharePoint 5000 item limit, allowing us to retrieve all items from a massive SharePoint document library. It demonstrates the power and flexibility of PowerShell and SharePoint's Search functionality when dealing with large datasets. Whether you're dealing with millions of items or just want a more efficient way to retrieve data from SharePoint, consider giving this function a try.</font></p>
<p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: <a href="/Posh5000ItemLimit">https://www.toddklindt.com/Posh5000ItemLimit</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=3\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=3&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_2_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_2_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_4_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_4_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_6_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_6_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_8_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_8_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_1_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_1_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_2_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_2_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_3_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_3_316CF1AC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_316CF1AC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/898/image_thumb_316CF1AC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PnP; PowerShell; Sharepoint; Office 365</category>
      <pubDate>Mon, 10 Jul 2023 17:42:32 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=898</guid>
    </item>
    <item>
      <title>Supercharging PowerShell with a Little Help from AI</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=897</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD58F6275F1F04766A4AC1B4FEF5415A5"><p><font size="3">I know I have a checkered past with the Developer community. Back in the old days they could do some pretty awful things to my beloved on-prem SharePoint servers with their incessant BINing and GACing things. Fortunately for all of us (including those defenseless servers) those days are behind us. </font></p>  <p><font size="3">So, I just got off <a href="https://www.youtube.com/watch?v=STvHHHfie7k&amp;t=2640s">this Microsoft 365 &amp; Power Platform Development Community call</a>, and boy, do I have some cool stuff to share with you. I got the chance to show off this neat trick I've been working on - using <a href="https://docs.github.com/en/copilot/quickstart">GitHub Copilot</a> and <a href="https://chat.openai.com/">ChatGPT</a> (or any AI you're into) to give your PowerShell scripting a serious boost.</font></p>  <p><font size="3">You're probably thinking, &quot;AI and PowerShell, really?&quot; But stick with me here. It's like having a co-pilot for your coding. Like someone smarter than you, looking over your shoulder, and there if you have questions. It's there to help you out, make things smoother, and let's be honest, who doesn't want to feel a bit like Tony Stark talking to JARVIS while coding?</font></p>  <p><font size="3">During the demo, I took everyone on a little tour of how you can get GitHub and Copilot and ChatGPT into the mix with your PowerShell development routine. It's all about using AI to help with the heavy lifting - coding, debugging, repetitive tasks, and even the dreaded documentation. I'm telling you, this is next-level stuff, and we're just scratching the surface of what AI can do for us.</font></p>  <p><font size="3">But hey, don't just take my word for it. Give it a whirl! Play around with adding some AI into your PowerShell development and see how it goes. I used ChatGPT and GitHub Copilot for the demo, but you can pick any AI you're comfortable with.</font></p>  <p><font size="3">That's it from me for now. Keep an eye out for more cool AI posts.</font></p>  <p><font size="3"><a href="https://pnp.github.io/#community">Microsoft 365 &amp; Power Platform Development Community call</a></font></p>  <p><font size="3"><a href="https://www.youtube.com/watch?v=STvHHHfie7k&amp;t=2649s">My AI Demo</a></font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshwithAI"><font size="3">https://www.toddklindt.com/PoshwithAI</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=31\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=31&amp;RootFolder=*">AI</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; AI</category>
      <pubDate>Mon, 26 Jun 2023 19:19:47 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=897</guid>
    </item>
    <item>
      <title>Dynamic Parameter Validation in PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=896</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1B0FBF2F988242EFA8919E27D4EAAAA1"><p><font size="3">Hello, SharePoint and PowerShell enthusiasts! Todd Klindt here, and I've got something exciting to share with you today. I recently had the opportunity to present a developer-focused demo on the Microsoft 365 &amp; Power Platform Community channel. The topic? Dynamic parameter validation in PowerShell.</font></p>  <p><font size="3">In this 13-minute demo, I walk you through the process of creating your own PowerShell cmdlet. This cmdlet allows you to pull and tab through information from a site, list, text file, Azure, Graph, etc. within the PowerShell environment.</font></p>  <p><font size="3">I utilize the power of ValidateSet, ValidateScript, and ArgumentCompleter. To show off, the demo concludes with an interesting twist. I used ChatGPT to write the same code. </font></p>  <p><font size="3">All the code I used in the demo is available on my GitHub repo. You can find it at </font><a href="https://github.com/ToddKlindt/PoshPnP"><font size="3">PoshPnP</font></a><font size="3"> and </font><a href="https://pnp.github.io/powershell/"><font size="3">PnP PowerShell</font></a><font size="3">.</font></p>  <p><font size="3">I hope you find this demo useful in your PowerShell journey. Remember, when you're writing PowerShell, try to be the tool maker, not the tool user. Happy coding!</font></p>  <p><font size="3">Watch the full video </font><a href="https://youtu.be/eMIdEBtQwhI"><font size="3">here</font></a><font size="3">.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshValidation"><font size="3">https://www.toddklindt.com/PoshValidation</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=23\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=23&amp;RootFolder=*">Speaking</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365; Sharepoint; Speaking</category>
      <pubDate>Thu, 22 Jun 2023 18:48:23 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=896</guid>
    </item>
    <item>
      <title>Formatting ShareGate Log Files in Excel with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=895</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass60BD5897295E4BFA960AA81D5CB2F11F"><p><font size="3">Hi All,</font></p> <font size="3"></font>  <p><font size="3">Today, I want to share a handy PowerShell function I developed recently to enhance readability of <a href="https://sharegate.com/">ShareGate</a> log files. </font></p> <font size="3"></font>  <p><font size="3">If you are using ShareGate for SharePoint migrations or management tasks, you might be familiar with the extensive Excel logs produced by ShareGate. While these logs are rich in details, they can sometimes be <em>too</em> rich in details. They often require some formatting for better readability or to highlight the necessary details. When doing a lot of migrations I found myself doing the same steps over and over again to these logs. Being lazy, I thought, “Someone should automate this!”. I sat down with my buddy PowerShell and this is what we came up with.</font></p> <font size="3"></font>  <p><font size="3">This function, <font face="Consolas"><strong>Format-ShareGateLogFile</strong></font>, tackles this by opening a ShareGate log file in Excel format and applying a few changes. It does this by using <a href="https://twitter.com/dfinke">Doug Finke’s</a> <a href="https://github.com/dfinke/ImportExcel">excellent ImportExcel PowerShell Module</a>. It adds a table to the first worksheet, formats the first column as &quot;Date-Time&quot;, calculates the duration of the log file, and formats the duration as &quot;[h]:mm:ss&quot; in the last row. Finally, it saves the changes and closes the Excel file.</font></p> <font size="3"></font>  <p><font size="3">To use this function, you’ll have to download <a href="https://github.com/ToddKlindt/PowerShell/blob/master/Logfiles.psm1">Logfiles.psm1</a> from my <a href="https://github.com/ToddKlindt/PowerShell/">Github Repo.</a> Then use Import-Module to import it into your PowerShell session.</font></p>  <p><font size="3">After that’s done you can run <font face="Consolas"><strong>Format-ShareGateLogFile</strong></font>. You will ne<font size="3">ed to provide the path to the Excel file to format as an argument to the <strong><font face="Consolas">Path</font></strong> parameter, which is mandatory. For instance, </font></font>     </p> <font size="3"></font>  <blockquote>   <p><font size="3"><font face="Consolas"><strong> PS C:\&gt; Format-ShareGateLogFile -Path &quot;C:\path\to\ShareGateLogFile.xlsx&quot;</strong></font>        <br /></font></p> </blockquote> <font size="3"></font>  <p><font size="3">This will format the Excel file located at &quot;C:\path\to\ShareGateLogFile.xlsx&quot; for readability.</font></p> <font size="3"></font>  <p><font size="3">The function also accepts two optional switches: <font face="Consolas"><strong>Open</strong></font> and <strong><font face="Consolas">HideColumns</font></strong>. If you use the <strong><font face="Consolas">Open</font></strong> switch, the function will open the formatted Excel file automatically after it has finished formatting. The <strong><font face="Consolas">HideColumns</font></strong> switch will hide specified columns (E-U, W-AR, AT-BA) in the Excel file. For instance,</font></p> <font size="3"></font>  <blockquote>   <p><font size="3">       <br /><strong><font face="Consolas"> PS C:\&gt; Format-ShareGateLogFile -Path &quot;C:\path\to\ShareGateLogFile.xlsx&quot; -HideColumns -Open</font></strong>        <br /></font></p> </blockquote> <font size="3"></font>  <p><font size="3">This will format the Excel file, hide the specified columns, and open the Excel file automatically after it has been formatted.</font></p> <font size="3"></font>  <p><font size="3">One neat feature of the function is that it can accept pipeline input for the `Path` parameter. This means you can pipe in a series of file paths to the function and it will format each file in turn. For instance,</font></p> <font size="3"></font>  <blockquote>   <p><font size="3">       <br /><strong><font face="Consolas"> PS C:\&gt; Get-ChildItem -Path &quot;C:\path\to\folder&quot; -Filter &quot;*.xlsx&quot; | Format-ShareGateLogFile -HideColumns -Open</font></strong>        <br /></font></p> </blockquote> <font size="3"></font>  <p><font size="3">This will get all the Excel (.xlsx) files in the specified folder, and for each one, it will be formatted for readability, with specified columns hidden, and the Excel file opened automatically after it has been formatted.</font></p> <font size="3"></font>  <p><font size="3">This function has saved me heaps of time while working with ShareGate log files, and I hope it does the same for you. Happy scripting!</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshFormatSharegateLogs">https://www.toddklindt.com/PoshFormatSharegateLogs</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Sharepoint</category>
      <pubDate>Mon, 12 Jun 2023 18:31:14 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=895</guid>
    </item>
    <item>
      <title>PowerShell Function to Extract ChatGPT Conversations</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=894</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCD0ACFA10CE94B0D9AF42D9CCC841A15"><p><font size="3">Hey there, PowerShell enthusiasts and fellow M365 admins! I’ve been tinkering around with a little something I think you'll find helpful, especially if you've been playing around with OpenAI's ChatGPT. I have been and let me tell you, this has been a wild ride. </font></p>
 <font size="3"></font>  <p><font size="3">Meet <font face="Consolas"><strong>Format-ChatGPTConversation</strong></font>, it’s a function I wrote that takes your ChatGPT conversation history and formats it into a more digestible output. If you've been in the trenches with ChatGPT, you know that it can be tough to share your conversations with other people. You have to take a bunch of screenshots or just copy out individual parts. Neither of those are any fun. That's where this function comes into play.</font></p>
 <font size="3"></font>  <p><font size="3">Now, you might be thinking, &quot;That's great, but where do I find these ChatGPT conversations?&quot; Good news! You can get the <font face="Consolas"><strong>conversations.json</strong></font> file right from the OpenAI chat interface. Just head over to </font><a href="https://chat.openai.com/%28https://chat.openai.com/%29"><font size="3">https://chat.openai.com/</font></a><font size="3">, click on the three dots by your name in the lower left corner, and navigate to &quot;Settings&quot;. Once you're in there, click the &quot;Data controls&quot; tab, and voila! There's an &quot;Export&quot; button waiting for you. Clicking that will give you a zip file, and nestled inside it is your <font face="Consolas"><strong>conversations.json</strong></font> file.</font></p>
 <font size="3"></font>  <p><font size="3">So what does <font face="Consolas"><strong>Format-ChatGPTConversation</strong></font> actually do? Well, it processes this JSON file, extracting relevant conversation details like the title, ID, create time, author, and content. Any system messages or messages without an author are left out. We don't need them muddying up our beautiful output, do we?</font></p>
 <font size="3"></font>  <p><font size="3">Let's talk about how to use this bad boy. You can pipe it to the console, save the formatted output to a text file, pass multiple JSON files through the pipeline, or even group the output by conversation title. Here are a few examples:</font></p>
 <font size="3"></font>  <blockquote>   <p><font size="3">       <br /><font face="Consolas"><strong> Format-ChatGPTConversation -filename &quot;conversations.json&quot;</strong></font></font></p>
   <font size="3" face="Consolas"><strong></strong></font>    <p><font size="3" face="Consolas"><strong>Format-ChatGPTConversation -filename &quot;conversations.json&quot; | Out-File -Filepath &quot;formatted_conversations.txt&quot;</strong></font></p>
   <font size="3" face="Consolas"><strong></strong></font>    <p><font size="3" face="Consolas"><strong>Get-ChildItem -Path &quot;conversations.json&quot; | Format-ChatGPTConversation</strong></font></p>
   <font size="3" face="Consolas"><strong></strong></font>    <p><font size="3"><font face="Consolas"><strong>Format-ChatGPTConversation -filename conversations.json | Group-Object -Property Title | Select-Object name, count</strong></font>        <br /></font></p>
 </blockquote>
 <font size="3"></font>  <p><font size="3">And if you're feeling particularly adventurous, you can even select specific conversations and format them in a list:</font></p>
 <font size="3"></font>  <blockquote>   <p><font size="3">       <br /><font face="Consolas"><strong> Format-ChatGPTConversation -filename conversations.json | Where-Object { $_.title -eq &quot;PowerShell Function Advice&quot; } | select author, content | Format-List | more.com</strong></font>        <br /></font></p>
 </blockquote>
 <font size="3"></font>  <p><a href="/blog/Lists/Posts/Attachments/894/image_2_6570075F.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/894/image_thumb_6570075F.png" width="657" height="205" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">All of those examples are included in the Examples in the function. You can get to them with <strong><font face="Consolas">help Format-ChatGPTConversation -Examples</font></strong> after you’ve downloaded and imported it.</font></p>
  <p><font size="3">Ain't that a sight for sore eyes? It's like finding a pearl in an oyster. The world of PowerShell and ChatGPT is your oyster, my friends. Go forth and explore. </font></p>
  <p><font size="3">How do you get this marvel of modern technology? Go to my <a href="https://github.com/ToddKlindt/PowerShell">PowerShell repo on Github</a> and <a href="https://github.com/ToddKlindt/PowerShell/blob/master/ChatGPT.psm1">download it</a>. Then use <strong><font face="Consolas">Import-Module</font></strong> to import it into your PowerShell session.</font></p>
 <font size="3"></font>  <p><font size="3">As always, I'd love to hear how you're using this function. Are you finding it helpful? Have you made any tweaks or improvements? Let's have a conversation about our ChatGPT conversations. It's like Inception, but with less Leonardo DiCaprio and more PowerShell. </font></p>
 <font size="3"></font>  <p><font size="3">Until next time,</font></p>
 <font size="3"></font>  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: <a href="/PoshChatGPTConversations">https://www.toddklindt.com/PoshChatGPTConversations</a></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=31\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=31&amp;RootFolder=*">AI</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/894/image_2_6570075F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/894/image_2_6570075F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/894/image_thumb_6570075F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/894/image_thumb_6570075F.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; AI</category>
      <pubDate>Tue, 23 May 2023 21:53:43 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=894</guid>
    </item>
    <item>
      <title>PnP Script Sample: Force a User Profile Property Index</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=893</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass7807D8FFD5CC467A84ED6443F7773DBA"><p><font size="3">Have you ever updated some properties for a user in SharePoint Online, waited what seemed like a reasonable length of time, then did a search for that user? Have you ever done that and found your old values still there? Gah! Me too! Did you then use <a href="https://github.com/wobba/SPO-Trigger-Reindex">Mikael Svenson’s brilliant script</a> to fix that? Yeah, me too. A few times. </font></p>  <p><font size="3">I’m also a tinkerer, and I love me some PowerShell. So I cracked open VS Code, put on some aggressive music, loaded up Mikael’s code, and looked around a bit. I found a couple of things that I’d do differently. Not that there’s anything wrong with his code, it’s good stuff. But I wanted to so some stuff like turn his code into a function, so I could add it to an existing module I have. I wanted to move the JSON file from the root of the web to the Shared Documents library, innocent little changes like that. And his code had been written several years ago. PowerShell has matured since then, as coders we’ve matured, so I cleaned a few other little things up while I was in there. It was fun, and it kept me off the streets for a while. </font></p>  <p><font size="3">After I got done I reached out to Mikael to see if he was okay with me sharing it with all of you. Mikael, being the stand up guy that he is, was totally good with it. Then I reached out to <a href="https://twitter.com/pkbullock">Paul Bullock</a> about getting it published to the <a href="https://pnp.github.io/script-samples/">PnP Script Samples</a>. I’ve been meaning to start submitting some stuff to that, but I didn’t have anything I thought was worthy. Paul graciously <a href="https://pnp.github.io/script-samples/spo-request-pnp-reindex-user-profile/README.html?tabs=pnpps">accepted my script</a>, so now you can all enjoy it too. </font></p>  <p><font size="3">While you’re there, check out all the other great script samples. There’s some gold in those hills. </font></p>  <p><font size="3"></font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshReindexUPS">https://www.toddklindt.com/PoshReindexUPS</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PnP; PowerShell; Sharepoint</category>
      <pubDate>Mon, 01 Aug 2022 18:31:24 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=893</guid>
    </item>
    <item>
      <title>Calling Microsoft Graph with PnP PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=892</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass29FAA3586AE64BFD866B691BD8DF5057"><p><font size="3">As an M365 Admin it’s not tough to see that the future is hidden somewhere in the Microsoft Graph. And this particular M365 Admin would like to get there using his favorite tool, PowerShell. Microsoft released </font><a href="https://www.powershellgallery.com/packages/Microsoft.Graph/1.9.5"><font size="3">the Graph SDK</font></a><font size="3">, but it didn’t really scratch the itch for me. I found it confusing and really tough to use. But, as much as I ignored it, the Graph didn’t go away. With increased frequency there would be some little tidbit of information I’d want and the answer would be, “It’s in the Graph.” Grrrrr.</font></p> <font size="3"></font>  <p><font size="3">I was poking the </font><a href="https://pnp.github.io/script-samples/index.html"><font size="3">M365 PnP Samples</font></a><font size="3"> and stumbled across this little gem, <a href="https://pnp.github.io/script-samples/graph-call-graph/README.html?tabs=pnpps"><font size="3">Authenticate with and call the Microsoft Graph</font></a><font size="3">. That looked promising, I can work with that. I fired up PowerShell, loaded the <a href="https://github.com/pnp/powershell">PnP.PowerShell</a>, fired up the </font><a href="https://developer.microsoft.com/en-us/graph/graph-explorer"><font size="3">Graph Explorer</font></a><font size="3"> and started working. </font></font></p>  <p><font size="3">It went well enough that I wrote a little wrapper function around it and published it to </font><a href="https://github.com/ToddKlindt/PowerShell"><font size="3">GitHub</font></a><font size="3">. It’s called Get-TKPnPGraphURI and it looks like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/892/image_2_0C607704.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/892/image_thumb_0C607704.png" width="662" height="580" /></font></a></p>  <blockquote>   <p><font size="3" face="Consolas">Get-TKPnPGraphURI -uri </font><a href="https://graph.microsoft.com/v1.0/me/"><font size="3" face="Consolas">https://graph.microsoft.com/v1.0/me/</font></a></p>    <p><font size="3" face="Consolas">Get-TKPnPGraphURI -uri </font><a href="https://graph.microsoft.com/v1.0/users"><font size="3" face="Consolas">https://graph.microsoft.com/v1.0/users</font></a><font size="3" face="Consolas"> | select displayName,userPrincipalName,id</font></p> </blockquote>  <p><font size="3">It uses PnP.PowerShell, so you’ll need that module installed, and you’ll need to connect with <font face="Consolas">Connect-PnPOnline</font>. From there you can pass it any Graph endpoint, v1.0 or beta. You can find out what the endpoints are at <a href="https://developer.microsoft.com/en-us/graph/graph-explorer">the Graph Explorer</a>.  Right now this only supports Gets. You’ll also have to manually put in any parameters or filters. I’ve added help and examples. I hope to expand them both in the future.</font></p>  <p><font size="3">The output is a stand PSCustomObject, so you can send its output down the pipeline however you’d like. Select-Object, Where-Object, Sort-Object, the world is your oyster. </font></p>  <p><font size="3">Let me know if this is useful and what you’re doing with it.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshMSGraph">https://www.toddklindt.com/PoshMSGraph</a> </font></p>  <p><font size="3"></font></p> <font size="3"></font>    <p><font size="3"></font></p>  <p><font size="3"></font></p>  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=29\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=29&amp;RootFolder=*">PnP</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=30\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=30&amp;RootFolder=*">Graph</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/892/image_2_0C607704.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/892/image_2_0C607704.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/892/image_thumb_0C607704.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/892/image_thumb_0C607704.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365; PnP; Graph</category>
      <pubDate>Fri, 15 Apr 2022 21:35:18 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=892</guid>
    </item>
    <item>
      <title>Introducing SharePoint Server… Subscription Edition</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=891</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass53E1B92E355D4C7C93B30CC07FEFC256"><p><font size="3">There were a lot of fun things announced at Ignite this week. If you haven’t already done so, check out the <a href="https://news.microsoft.com/ignite-november-2021-book-of-news/">Ignite Book of News</a>. It’s one handy place for all of the announcements that came out. My favorite announcement, of course, was the General Availability of the next version of on-prem SharePoint, SharePoint Server Subscription Edition!!! </font></p>  <p><font size="3">You can read <a href="https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/sharepoint-server-subscription-edition-general-availability/ba-p/2913714">Microsoft’s announcement</a> on Tech Community blog for the official word and links. Reading is boring though, so here’s <a href="https://www.microsoft.com/en-us/download/details.aspx?id=103599">the Download Link</a>. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/891/wlEmoticon-smile_2_60B09DAC.png" /> </font></p>  <p><font size="3">I haven’t kicked the tires much yet, so I don’t have any impressions to share. Don’t fret though, I have already created the official <a href="/blog/Builds/SharePoint-SE-Builds.aspx">SharePoint Server Subscription Edition Builds List</a>. </font></p>  <p><font size="3">As I play with it more I’ll let you all know how it goes.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/SharePointSubscriptionEdition">https://www.toddklindt.com/SharePointSubscriptionEdition</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/891/wlEmoticon-smile_2_60B09DAC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/891/wlEmoticon-smile_2_60B09DAC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Sharepoint; Office 365</category>
      <pubDate>Fri, 05 Nov 2021 18:54:44 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=891</guid>
    </item>
    <item>
      <title>How to Get the Microsoft 365 Connected User with PnP PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=890</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass63ED45D03EA84445B3922BA368863D5C"><p><font size="3">As I’ve alluded to before, I spend <em>a lot</em> of time in PowerShell, and most of it in the loving embrace of the <a href="https://github.com/pnp/powershell">PnP.PowerShell</a> module. From time to time I find myself wanting to include logic in my scripts based on who the script is being run as, who connected to Microsoft 365. The majority of my connections where with the good old username and password combination. When that’s the case, I could use this to find how who I had connected as:</font></p>
  <blockquote>   <p><font size="3"><font face="Consolas">Connect-PnPOnline -Url </font><font face="Consolas">https://m365x995492.sharepoint.com/</font>        <br /><font face="Consolas">admin@M365x995492.onmicrosoft.com         <br />((Get-PnPConnection).PSCredential).username</font></font></p>
 </blockquote>
  <p><font size="3">It looks like this:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/890/image_2_7423DCA5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/890/image_thumb_7423DCA5.png" width="686" height="172" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">That worked great, right up to the point where I didn’t just log in with username credentials. For instance, the Sympraxis tenant requires MFA so I have to connect with the <font face="Consolas">–Interactive</font> parameter:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/890/image_6_7423DCA5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/890/image_thumb_2_7423DCA5.png" width="694" height="205" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">Old Faithful let me down. Back to the drawing board. Poking around the Internet I saw some smart folks were using this method:</font></p>
  <blockquote>   <p><font size="3" face="Consolas">$ctx = Get-PnPContext       <br />$ctx.Load($ctx.Web.CurrentUser)        <br />$ctx.ExecuteQuery()        <br />$ctx.Web.CurrentUser        <br />$UPN = $ctx.Web.CurrentUser.Email</font></p>
    <p><font size="3" face="Consolas"></font></p>
 </blockquote>
  <p><a href="/blog/Lists/Posts/Attachments/890/image_10_7423DCA5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/890/image_thumb_4_7423DCA5.png" width="701" height="352" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">I haven’t tried it yet with Certificate authentication, so I’m not sure how it reports that. The good news is that method also works with a username and password login:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/890/image_12_7423DCA5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/890/image_thumb_5_7423DCA5.png" width="709" height="304" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">I’ve created a Function, <font face="Consolas">Get-TKPnPCurrentUser</font>, to make that short and easy to use. I've added it to the <a href="https://github.com/ToddKlindt/PowerShell">TKM365Commands module​</a> I published in GitHub.</font></p>
  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: </font><a href="/POSHGetCurrentPnPUser"><font size="3">https://www.toddklindt.com/POSHGetCurrentPnPUser</font></a></p>
<p><br /></p>
<p class="ms-rteForeColor-2" style="">edit 4/15/22 - Added link to GitHub</p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_10_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_10_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_12_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_12_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_2_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_2_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_6_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_6_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_2_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_2_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_4_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_4_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_5_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_5_7423DCA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_7423DCA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/890/image_thumb_7423DCA5.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell; Sharepoint</category>
      <pubDate>Fri, 08 Oct 2021 14:59:20 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=890</guid>
    </item>
    <item>
      <title>Rapid Digital Transformation webinar with SysKit</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=889</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE8E7E91B17E54367B0CC9AE645F064A0"><p><font size="3">Like mixing chocolate and peanut butter I’m mixing two of my favorite things, SysKit and Sympraxis, in <a href="https://www.syskit.com/company/events/virtual-talk-digital-transformation/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=virtual-talk-sept-2021-top-sep&amp;utm_content=landscape-img-post-659">one magnificent webinar</a>. Toni, Marc, Derek, and I will be talking about how technology can improve business and how we work with customers. And then, we’ll spend a lot of time with the mics open metaphorically and taking questions from the audience. So if you want to stump Marc or Derek, now is your chance. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/889/wlEmoticon-smile_2_7780D1EC.png" /> </font></p>  <p><font size="3">The magic happens Wednesday, Sep 22 at 10:00 am CDT. <a href="https://www.syskit.com/company/events/virtual-talk-digital-transformation/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=virtual-talk-sept-2021-top-sep&amp;utm_content=landscape-img-post-659">Please sign up free and join us</a>. We’d love to have you.</font></p>  <p><font size="3">tk</font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=27\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=27&amp;RootFolder=*">SPDocKit</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=5\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=5&amp;RootFolder=*">Tech Stuff</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=23\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=23&amp;RootFolder=*">Speaking</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/889/wlEmoticon-smile_2_7780D1EC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/889/wlEmoticon-smile_2_7780D1EC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>SPDocKit; Tech Stuff; Speaking</category>
      <pubDate>Thu, 16 Sep 2021 16:38:42 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=889</guid>
    </item>
    <item>
      <title>Delete _Some_ File Versions in SharePoint Online with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=888</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1D60284884DC48508E05D4E6B76CEDC5"><p><font size="3">I recently got a fun email from a client. Their tenant had run over its storage allocation. After some quick investigation they realized that they had a few dozen files with a lot of versions, the <em>average</em> number of versions was over 1200 per file. Some files had over 3000 versions. The kicker is that these files were big, dozens or hundreds of MBs each. Thousands of files, 100s of MBs a piece? Pretty soon you’re talking about some real storage space! His question to me was how he could easily delete these unneeded versions quickly and easily? PowerShell, of course!</font></p>
  <p><font size="3">Before we get to the golden PowerShell nuggets at the end, how did they end up here in the first place? Versions have been around forever in SharePoint but in the last couple of years there was a change. As part of their strategy to protect us from ransomware, <a href="https://docs.microsoft.com/en-us/compliance/assurance/assurance-malware-and-ransomware-protection#sharepoint-online-and-onedrive-for-business-protection-against-ransomware">Microsoft turned on versioning for all Document Libraries in SPO</a>, and set the maximum number of versions to 500. That way if malware encrypted your site you could just roll your documents back to an unencrypted version. Pretty clever approach. The bad news is that if you don’t know this is in place, like my customer didn’t, you can chew up a lot of space by frequently uploading large files. Back to our story…</font></p>
  <p><font size="3">My mancrush on the <a href="https://github.com/pnp/powershell">PnP PowerShell</a> is well documented, so of course that’s the first place I looked for a solution. Sure enough, there it was, shining like a beacon of hope on a foggy night, <font face="Consolas">Remove-PnPFileVersion. </font><font face="Verdana">Do you hear angels singing? I know I do. I sent that off to my customer, dusted off my hands, and leaned back, put my hands behind my head and basked in self satisfaction. It was glorious.  Until the customer replied…</font></font></p>
  <p><font size="3">He didn’t want to delete <em>all</em> of the versions of a file. He wanted to something like delete all except the last 5 versions. <font face="Consolas">Remove-PnPFileVersion</font> has 2 parameter sets. One that deletes a single version (by its ID number) and one that deletes all versions. No middle ground. While my previous victory was short lived, I knew PowerShell would come through for me here too. </font></p>
  <p><font size="3">Long story short, I scribbled down a quick PowerShell script that will delete the file versions beyond the number you wish to keep. This customer had a CSV file of the files they wanted to prune, so I added support for that. I have posted the files on GitHub (<a href="https://github.com/ToddKlindt/PowerShell/blob/master/DeleteOldVersions.ps1" target="_blank">DeleteOldVersions.ps1</a> and <a href="https://github.com/ToddKlindt/PowerShell/blob/master/VersionDelete.csv" target="_blank">VersionDelete.csv</a> ) and I’ll go over the mechanics here.</font></p>
  <p><font size="3">Here is what the CSV file looks like, if you want to use that:     <br /><a href="/blog/Lists/Posts/Attachments/888/image_2_00F92073.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/888/image_thumb_00F92073.png" width="667" height="170" style="display:inline;background-image:none" /></a></font></p>
  <p><font size="3">The <font face="Consolas">Remove-PnPFileVersion</font> cmdlet natively handles URLs in the forms of lines 2-5. I added support for the URL having the tenant name as well because a report the customer had included that and I wanted to make it easy for them to read. I’m good like that. </font></p>
  <p><font size="3">Here’s the code:</font></p>
  <div><font size="3">First I connect to the site:</font></div>
  <blockquote>   <div><font size="3"><font face="Consolas">$SiteUrl = </font><a href="https://m365x995492.sharepoint.com/sites/blah"><font face="Consolas">https://m365x995492.sharepoint.com/sites/blah</font></a>        <br /><font face="Consolas">Connect-PnPOnline -Url $SiteUrl</font></font></div>
 </blockquote>
 <font size="3">   <p>You’ll need to adjust those to your own situation. Then I load up the CSV file. If you don’t want to do this with a CSV file you don’t have to. You can manually put the file name in.</p>
    <blockquote>     <p><font face="Consolas">$FileList = Import-Csv .\VersionDelete.csv</font></p>
   </blockquote>
    <p>Then I pick how many file versions I want to keep:</p>
    <blockquote>     <p><font face="Consolas">$VersionsToKeep = 5</font></p>
   </blockquote>
    <p>Next I walk through the $FileList. </p>
    <blockquote>     <p><font face="Consolas">foreach($File in $FileList) {</font></p>
   </blockquote>
    <p>If the <font face="Consolas">FileName</font> property has the <font face="Consolas">$SiteUrl</font> in it I take it out.</p>
    <blockquote>     <p><font face="Consolas">$Filename = $File.FileName.Replace($SiteUrl,&quot;&quot;)</font></p>
   </blockquote>
    <p>Then I grab all the <font face="Consolas">FileVersions</font> of the file:</p>
    <blockquote>     <p><font face="Consolas">$FileVersions = Get-PnPFileVersion -Url $Filename</font></p>
   </blockquote>
    <p><font face="Consolas">Get-PnPFileVersion</font> <a href="https://github.com/pnp/powershell/issues/1098#issuecomment-919166657">does not show the Current Version</a>, so it will always show one fewer version than what you see in the UI. If the number of versions is greater than the version we said we wanted to keep in <font face="Consolas">$VersionsToKeep</font> then I create a list of versions in <font face="Consolas">$DeleteVersionList</font> to delete:</p>
    <blockquote>     <p><font face="Consolas">if ($FileVersions.Count -gt $VersionsToKeep) {  <br />$DeleteVersionList = ($FileVersions[0..$($FileVersions.Count - $VersionsToKeep)])</font></p>
   </blockquote>
    <p>With that list in hand I walk through it and run <font face="Consolas">Remove-PnPFileVersion</font> against it. In the code in GitHub I have commented out the line (Line 33 as of 9/14/21) that actually deletes the version. You’ll have to uncomment that to do anything. </p>
    <blockquote>     <p><font face="Consolas">foreach($VersionToDelete in $DeleteVersionList) {         <br />Remove-PnPFileVersion -Url $Filename -Identity $VersionToDelete.Id –Force</font></p>
   </blockquote>
    <p>To make piping easy I output the versions deleted as a CustomObject:</p>
    <blockquote>     <p><font face="Consolas">$Output = [PSCustomObject]@{         <br />PSTypeName = 'TKDeletedFileVersion'          <br />Filename     = $Filename          <br />DeletedVersion     = $($VersionToDelete.VersionLabel)  <br />            }</font></p>
      <p><font face="Consolas">$Output</font></p>
   </blockquote>
    <p>When you look at the code you’ll notice a line at the top,     <br /><font face="Consolas">$VerbosePreference = &quot;Continue&quot;</font> </p>
    <p>If you uncomment that line it will light up the <font face="Consolas">Write-Verbose</font> statements in the code. Set it back to <font face="Consolas">SilentyContinue</font> to make them go away. </p>
    <p>This is what it looks like with Verbosity off:</p>
    <p><a href="/blog/Lists/Posts/Attachments/888/image_4_00F92073.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/888/image_thumb_1_00F92073.png" width="645" height="493" style="display:inline;background-image:none" /></a> </p>
    <p>If you need to audit which versions are being deleted you can pipe that to <font face="Consolas">Export-CSV</font> and save it to a file. </p>
    <p>If you want to create some versions to test this with you can use the following PowerShell:</p>
    <blockquote>     <p><font face="Consolas">$DocLib = “Shared Documents”         <br />Get-PnPListItem -List $Doclib | select Id,@{l=&quot;FileLeafRef&quot;;e={$_.FieldValues.FileLeafRef}}</font>        <br /></p>
   </blockquote>
    <p>That’ll get you the files in the Document Library. You can use this command to touch them and create 6 new versions:</p>
    <blockquote>     <p><font face="Consolas">0..5 | foreach {Set-PnPListItem -List $Doclib -Identity 4 -Values @{&quot;FileLeafRef&quot;=&quot;Building materials licences to budget for Storytelling.docx&quot;}}</font></p>
   </blockquote>
    <p>It is also possible to filter versions by date. That way instead of deleting all but the last 5 versions, you would be able to delete all of the versions older than 30 days. That’s a blog post for a different day though.</p>
    <p>tk</p>
    <p>ShortURL: <a href="/PoshDeleteSPOFileVersions">https://www.toddklindt.com/PoshDeleteSPOFileVersions</a> </p>
    <p> </p>
                     </font></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=4\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=4&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_2_00F92073.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_2_00F92073.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_4_00F92073.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_4_00F92073.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_thumb_00F92073.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_thumb_00F92073.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_thumb_1_00F92073.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/888/image_thumb_1_00F92073.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell; Sharepoint</category>
      <pubDate>Tue, 14 Sep 2021 21:41:20 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=888</guid>
    </item>
    <item>
      <title>The Great Blog Crash of 2021 (so far…)</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=887</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD77BCC40F5DD40FD98C3887DE25E3944"><p><font size="3">I don’t know if I could pick my favorite blog crash. There have been so many over the years. It would be like picking my favorite kid, or favorite tablet. I just can’t.</font></p>
  <p><font size="3">This most recent crash was caused by the drive the VM my blog is running on failing. “But what about backups??” I hear you all shouting in unison. I had VM backups in place, but I had moved the VM to a different server and the backup job didn’t follow along. I also had database backups. These were going directly to my NAS device. Unfortunately when I replaced my NAS in December I forgot to point the SQL backup job to the new location. My only backup was a lonely database backup from December. So, with my SharePoint 2010 and SQL 2012 CDs in hand, I reinstalled everything, and here we are. </font></p>
  <p><font size="3">I was able to republish the blog posts I’ve written since the backup, so there was no loss there. I did lose the comments you’ve left and I’ve responded to. Sorry about that. I’m in the process of putting it all back together, but there are a few things I haven’t finished yet. I’m putting the list here, so we can all keep track of it. If you see something wrong and it’s not on this list, send me a tweet or leave me a comment (I’ll try not to lose it) and I’ll add it to the list.  </font></p>
  <blockquote>   <p><font size="3">To Do List:       <br /><font size="3">Get Search working         <br /><span><span style="text-decoration:line-through">Update SharePoint 2010 Builds list</span><span><span style="text-decoration:line-through"> </span>(9/10/21)</span></span><br /><span><span style="text-decoration:line-through">Update SharePoint 2013 Builds list</span> (9/13/21)</span><br />Go through IIS Logs and look for failed requests for ShortURLs I’ve missed          <br />Verify all the http to https redirects work properly          <br /><span><span style="text-decoration:line-through">Create SQL backup job</span>​ (9/13/21)</span><br />Create VM backup job<br />Fix broken images in blog posts</font></font></p>
 </blockquote>
  <p><font size="3"><font size="3">Thanks for sticking around,</font></font></p>
  <p><font size="3"><font size="3">tk</font></font></p>
  <p><font size="3"><font size="3">ShortURL: <a href="/FirstBlogCrash2021">https://www.toddklindt.com/FirstBlogCrash2021</a>         <br /></font></font></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Wed, 08 Sep 2021 22:40:36 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=887</guid>
    </item>
    <item>
      <title>Create Lots of Test SharePoint Sites (or Teams or Groups) with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=885</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass707EA290B1CA4B22A951A9D906FA5112"><p><font size="3">Throughout my IT career I have had to create tens (or hundreds, or thousands) of objects to test something. It could be a bunch of Windows Users, a bunch of folders, files, etc. It seems like every time that happens I end up starting from scratch on the process. To stop that silly cycle I decided to make the process official by blogging it. Let’s stop this madness!</font></p>  <p><font size="3">This time it started with my friend Michal Pisarek posting </font><a href="https://twitter.com/MichalPisarek/status/1407769751472902144?s=20"><font size="3">this tweet</font></a><font size="3">:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/885/image_2_253DD048.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/885/image_2_253DD048.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/885/image_thumb_253DD048.png" width="385" height="206" /></a></font></p>  <p><a href="https://www.orchestry.com/"><font size="3">Orchestry</font></a><font size="3"> needs to test their lifecycle features and he wanted to stress test it real good!</font></p>  <p><font size="3">As is often the case, I see a tweet like that and my first thought is “Challenge Accepted!” The mechanics of how to create Teams with PowerShell is pretty simple but where this really gets tricky, at least for me, is the names. Especially if you’re looking at creating 20,000 like Michal is. In the past the way I’ve handled that is the old tried and true “Adjective Noun Number” formula. To get near 20,000 I wanted a long list of nouns and adjectives to pull from. I scoured the Internet and pulled together two files, nouns.txt and adjectives.txt. You can find them in </font><a href="https://github.com/ToddKlindt/PowerShell"><font size="3">this GitHub repo</font></a><font size="3">. Then I tack a random two digit number at the end to reduce the chance of collision. I put those files in the same directory as this PowerShell script and let ‘er rip!</font></p>  <blockquote>   <p><font size="3" face="Consolas">Connect-PnPOnline -Url https://CONTOSO-admin.sharepoint.com -Interactive</font></p>    <p><font size="3" face="Consolas"># import the files with nouns and adjectives        <br /> $Nouns = Get-Content .\nouns.txt         <br /> $Adjectives = Get-Content .\adjectives.txt</font></p>   <font size="3" face="Consolas"></font>    <p><font size="3" face="Consolas"># Number of Teams to create        <br /> $NumberOfTeams = 3         <br /> $Index = 1</font></p>   <font size="3" face="Consolas"></font>    <p><font size="3" face="Consolas">while ($Index -le $NumberOfTeams) {        <br />    # Generate Random stuff         <br />    $TeamNoun = $Nouns | Get-Random         <br />    $TeamAdjective = $Adjectives | Get-Random         <br />    $TeamNumber = Get-Random -Maximum 100         <br />    $TeamDisplayName = &quot;$TeamAdjective $TeamNoun $TeamNumber&quot;         <br />    Write-Host &quot;$Index - $TeamDisplayName&quot;         <br />    New-PnPTeamsTeam -DisplayName $TeamDisplayName -MailNickName $($TeamDisplayName.Replace(&quot; &quot;,&quot;&quot;)) -Description $TeamDisplayName -Visibility Public -AllowGiphy $true         <br />    $Index++         <br /> }</font></p> </blockquote>  <p><font size="3">You can find the file <font face="Consolas">CreateLotsofTeams.ps1</font> in that </font><a href="https://github.com/ToddKlindt/PowerShell"><font size="3">same GitHub repo.</font></a></p>  <p><font size="3">You can alter the nouns and adjectives files as you see fit. Set the the $NumberofTeams variable to how many Teams you want and you’re set. This script uses the </font><a href="https://github.com/pnp/powershell"><font size="3">venerable PnP.PowerShell module</font></a><font size="3">. You’ll need that installed and its Azure Application registered before you can run this. Be sure to change the<font face="Consolas"> Connect-PnPOnline</font> line to reflect your tenant’s name, unless you actually work for Contoso. </font></p>  <p><font size="3">Because of some weird timing, the current version of the PnP.PowerShell, 1.6.0, won’t work with this script as there is a bug in <font face="Consolas">New-PnPTeamsTeam</font> that prevents it from actually creating a Team. Ironic, I know. I put notes in the <font face="Consolas">CreateLotsofTeams.ps1</font> file on how to handle that. But if you’re running it and it looks successful but no Teams are being created, look there first. </font></p>  <p><font size="3">Also, for whatever reason, when you look at the Groups Sites in SharePoint they don’t show up as being Teams enabled, but they really are. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/885/image_4_253DD048.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/885/image_thumb_1_253DD048.png" width="553" height="322" /></font></a></p>  <p><font size="3">You can see in this crudely mocked up screenshot that the Teams are in the Teams client even though SharePoint Admin Center swears they don’t exist.</font></p>  <p><font size="3">And while this script’s purpose in life is to create lots and lots of Teams, it could be easily modified to create lots and lots of anything. If you just need Groups, swap out <font face="Consolas">New-PnPTeamsTeam</font> with <font face="Consolas">New-PnPMicrosoft365Group</font>. If you just need SharePoint sites, use <font face="Consolas">New-PnPTenantSite</font>. Folders? <font face="Consolas">Add-PnPFolder</font>. I think you see where I’m going with this. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/885/wlEmoticon-smile_2_253DD048.png" /> </font></p>  <p><font size="3">If you’re like Michal and you’re going to create 20,000 Teams, or anything, I hope you have a comfortable chair. It’s going to take a while. Michal is seeing about 1 Team a minute. It’s going to take him a couple of weeks at that pace. Almost certainly PowerShell is the bottleneck in this situation. If you’re looking at a similar situation, my advice is to open up another PowerShell window and run another instance of <font face="Consolas">CreateLotsofTeams.ps1</font> there. And maybe run a few instances on another machine entirely. <a href="/blog/Lists/Posts/Post.aspx?ID=806">In the past</a> that has helped me speed this things up considerably. </font></p>  <p><font size="3">Enjoy.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshLotsandLotsofTeams"><font size="3">https://www.toddklindt.com/PoshLotsandLotsofTeams</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/885/image_2_253DD048.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/885/image_2_253DD048.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell</category>
      <pubDate>Tue, 31 Aug 2021 23:00:44 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=885</guid>
    </item>
    <item>
      <title>How to Register the PnP.PowerShell App Registration if You’re not a Tenant Admin</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=886</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass9EF1694132A64B71B48F6D4A3DDFB2DE"><p><font size="3">I’ve done a few articles about the new </font><a href="https://pnp.github.io/powershell/index.html"><font size="3">PnP.PowerShell module</font></a><font size="3">. One of the biggest changes from its ancestor, SharePointPnPPowerShellOnline, is that it requires the registration of an Azure Application before you can connect with it. In this blog post I’m going to explain how to get that Azure App registered if you’re not a Tenant Admin in your tenant.</font></p>  <p><font size="3">You don’t need to be a Tenant Admin to use the PnP.PowerShell cmdlets. You don’t even need to be a SharePoint Admin or a site collection admin. There are plenty of cmdlets you can run, like <font face="Consolas">Add-PnPFile</font> if you’re only a Member of the site. However, before you can run the most import PnP cmdlet of all, <font face="Consolas">Connect-PnPOnline</font>, the PnP Azure Application has to be registered in your tenant by a tenant admin. If it’s not, you’ll get a sad message that looks like this:  </font></p>  <p><a href="/blog/Lists/Posts/Attachments/886/image_10_69B14208.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/886/image_thumb_4_69B14208.png" width="636" height="215" /></a></p>  <p><font size="3">Here’s the text:</font></p>  <blockquote>   <p><font size="3"><em>Connect-PnPOnline: AADSTS65001: The user or administrator has not consented to use the application with ID '31359c7f-bd7e-475c-86db-fdb8c937548e' named 'PnP Management Shell'. Send an interactive authorization request for this user and resource.</em></font></p> </blockquote>  <p><font size="3">In most cases the person introducing the PnP.PowerShell module is a tenant admin, so it’s not an issue. They run <font face="Consolas">Register-PnPManagementShellAccess</font> and Bob’s your uncle. But it’s not uncommon for an organization to be large enough that the SharePoint or Microsoft 365 Admin team is not a tenant admin. In that case the Tenant Admin, who likely doesn’t know what a PnP.PowerShell is, has to register the Azure App before the SharePoint Admin can enjoy the bliss that is PnP.PowerShell. Fortunately, <font size="3">there’s an easy enough solution, the Consent URL. </font></font></p>  <p><font size="3">The Consent URL is the URL to a web page your Tenant Admin can go to to consent the PnP.PowerShell Azure App without needing to install anything, or really know anything about the PnP.PowerShell. <font size="3">There are a few ways to get the Consent URL. It doesn’t matter how you do it, they all get you to the same place. </font></font></p>  <p><font size="3">The easiest way to remember is to run Register-<font face="Consolas">PnPManagementShellAccess –ShowConsentUrl</font> after installing the PnP.PowerShell. You’ll be asked to log in, but you don’t need to be an sort of admin. It’s only logging in so it knows when tenant you’re in. Then it will give you the Consent URL. It looks like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/886/image_4_69B14208.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/886/image_thumb_1_69B14208.png" width="716" height="173" /></a></p>  <blockquote>   <p><a title="https://login.microsoftonline.com/651c433d-d221-4bb3-ac77-392f4bf06a6b/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e" href="https://login.microsoftonline.com/651c433d-d221-4bb3-ac77-392f4bf06a6b/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e"><font size="3">https://login.microsoftonline.com/<font color="#ff0000">651c433d-d221-4bb3-ac77-392f4bf06a6b</font>/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e</font></a></p> </blockquote>  <p><font size="3">The part in the red box is your tenant’s ID.You had to log so the cmdlet could get that number. The Client_id refers to the PnP.PowerShell, so it’s the same everywhere.  </font></p>  <p><font size="3">You can also specify your tenant’s name instead of its ID. This works as well:</font></p>  <blockquote>   <p><font size="3">       <br /><a title="https://login.microsoftonline.com/tenantname.onmicrosoft.com/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e" href="https://login.microsoftonline.com/tenantname.onmicrosoft.com/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e">https://login.microsoftonline.com/<font color="#ff0000">tenantname.onmicrosoft.com</font>/adminconsent?client_id=31359c7f-bd7e-475c-86db-fdb8c937548e</a></font></p> </blockquote>  <p><font size="3">Whether you get the URL from running Register-<font face="Consolas">PnPManagementShellAccess –ShowConsentUrl</font> or by copying it out of this blog post and putting your tenant’s information, send that URL to your Tenant Admin. When they browse to the page it will look like this:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/886/image_6_69B14208.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/886/image_thumb_2_69B14208.png" width="454" height="678" /></a></p>  <p><font size="3">All they need to do is click Accept and you’re ready to go.</font></p>  <p><font size="3">That’s a pretty long, scary list of permissions, and it might spook some admins. Accepting this <em>does not</em> give everyone in your tenant all of those permissions. The PnP.PowerShell Azure App uses Delegation, which means any user using it to access objects in Microsoft 365 has to have permission to access it. The PnP.PowerShell does not allow anyone access to anything they don’t otherwise have access to. If they don’t believe you, have them try. Have someone that cannot open up a SharePoint site in the browser try to connect to it with <font face="Consolas">Connect-PnPOnline</font>. They won’t be able to. </font></p>  <p><font size="3">If they want to check out what the Azure App has permission to, or heaven forbid, remove it, you can browse to the <a href="https://aad.portal.azure.com/">Azure AD Portal</a> and find it in the Enterprise Applications.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/886/image_8_69B14208.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/886/image_thumb_3_69B14208.png" width="477" height="593" /></a></p>  <p><font size="3">The Permissions blade will show you all delegated permissions the app has. Feel free to poke around, but resist the urge to change any, even if you’re <em>positive </em>you’ll never use them. I promise it’ll only hurt you in the future.</font> </p>  <p><font size="3">After your tenant admin has done all of that you should be able to get back to all that PowerShell and PnP goodness.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshRegisterPnP"><font size="3">https://www.toddklindt.com/PoshRegisterPnP</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell; Sharepoint</category>
      <pubDate>Tue, 31 Aug 2021 23:02:02 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=886</guid>
    </item>
    <item>
      <title>What is a “Dev Tenant” and why would you want one?</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=884</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassDB6D9CCD5000474F941E389A3454612A"><p><font size="3">My fellow Sympraxian </font><a href="https://julieturner.net/"><font size="3">Julie Turner</font></a><font size="3"> recently published an outstanding blog post on </font><a href="https://julieturner.net/2021/01/what-is-a-dev-tenant-and-why-would-you-want-one/"><font size="3">what a Microsoft 365 Dev Tenant is and why you should get one</font></a><font size="3">. I’ve been a long time user of Dev or Demo tenants and I find them to be an invaluable resource both for people trying to gain skills in Microsoft 365, but also grizzled old veterans like myself. Like the old saying goes, “The question isn’t whether you have a Test Site, it’s whether you have a Production Site.” If you don’t have a Dev or Demo Tenant to test things in then you’ve just demoted your Production Tenant to a Test Tenant. Don’t be that person. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/884/wlEmoticon-smile_2_4A9A14E1.png" /> I did a session on the </font><a href="https://petri.com/conferences/get-it-sharepoint-1-day-virtual-conference"><font size="3">PnP PowerShell today for Petri.com.</font></a><font size="3"> One of the people there was hesitant to try out PowerShell on their tenant. I recommended they get one of these Dev tenants and hone their skills there. </font></p>  <p><font size="3">Be one of the cool kids. </font><a href="https://julieturner.net/2021/01/what-is-a-dev-tenant-and-why-would-you-want-one/"><font size="3">Read Julie’s blog post and grab a Dev Tenant</font></a><font size="3">.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/GetDevTenant"><font size="3">https://www.toddklindt.com/GetDevTenant</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; Sharepoint; PowerShell</category>
      <pubDate>Tue, 31 Aug 2021 23:00:17 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=884</guid>
    </item>
    <item>
      <title>The new PnP.PowerShell Module is live!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=883</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass965F2FCFBB1647979DB448228EB9B824"><p><font size="3">As of January 19th, 2021 the new and improved <a href="https://pnp.github.io/powershell/index.html">PnP.PowerShell module</a> is no longer prerelease and is ready for the masses. You can also find it in a <a href="https://github.com/pnp/powershell">GitHub repo</a>. It replaces the venerable SharePointPnPPowerShellOnline module we all know and love. The new module has a lot changes, but here are a few of the highlights:</font></p>  <ul>   <li><font size="3">PnP.PowerShell only works with online products like SharePoint Online and Microsoft 365. It <strong>does not</strong> work with SharePoint Server platforms like SharePoint 2013, 2016, or 2019.</font></li>    <li><font size="3">It is built on .NET core 3.1 so it runs on non Windows platforms like Linux, Mac, and Azure Functions. SharePointPnPPowerShellOnline is built on .NET 4.6.1 and only runs on Windows.</font></li>    <li><font size="3">PnP.PowerShell is focused on all of Microsoft 365, not just SharePoint. SharePointPnPPowerShellOnline started out focused on SharePoint and other things have snuck in over the years, but were never supported as well as we would have liked. </font></li>    <li><font size="3">Authentication relies on App Registrations. To facilitate the cross application support the module relies on Graph API permissions as opposed to straight up usernames and passwords. SharePointPnPPowerShellOnline uses App Registrations as well, but it’s not built on that premise like PnP.PowerShell is.</font></li> </ul>  <p><font size="3">If you can, you should uninstall the SharePointPnPPowerShellOnline module and install PnP.PowerShell everywhere. You should also stop using Windows PowerShell 5.1 and move over to PowerShell 7.x. There are a couple of legit reasons why you can’t though. I have a whole blog post, “<a href="/blog/Lists/Posts/Post.aspx?ID=882">Using both PnP PowerShell Modules with PowerShell 5 and PowerShell 7</a>” that covers how to have both modules and both shells available to you. For those of you with short attention spaces I’ll give you the tl;dr:</font></p>  <p><font size="3">Open PowerShell 7.x in Administrator mode and uninstall all the modules:</font></p>  <blockquote>   <p><font size="3"><font face="Consolas">Uninstall-Module SharePointPnPPowerShellOnline -Force –AllVersions          <br /><font size="3">Uninstall-Module PnP.PowerShell -Force –AllVersions</font></font></font></p> </blockquote>  <p><font size="3">That should clear all the appropriate modules out of PowerShell 7.x. You’re good there. </font></p>  <p><font size="3">Now open Windows PowerShell 5.1 in Administrator mode. Here you’ll uninstall all the modules and reinstall them:</font></p>  <blockquote>   <p><font size="3"><font face="Consolas">Uninstall-Module SharePointPnPPowerShellOnline -Force –AllVersions          <br /><font size="3">Uninstall-Module PnP.PowerShell -Force –AllVersions</font></font></font></p> </blockquote>  <p><font size="3">For good measure I close down the Windows PowerShell 5.1 host and open a new one before I install the new version. That might not be necessary, but it feels like cheap insurance. Either way, in a Windows PowerShell 5.1 Administrator shell install both modules:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Install-Module -Name SharePointPnPPowerShellOnline -Scope Allusers        <br /> Install-Module -Name PnP.PowerShell -Scope Allusers –AllowClobber</font></p> </blockquote>  <p><font size="3">I added a little chocolate to the install commands to make them go down easier. First, I added <font face="Consolas">-Scope Allusers</font> to make sure Windows PowerShell 5.1 installs the module in a place that PowerShell 7.x can find it. I <em>think </em>any modules installed in an Admin window are installed there by default, but I’m not sure. Again, cheap insurance. Second, to the second (and any subsequent) module I added <font face="Consolas">–AllowClobber</font>. This tells PowerShell that it’s okay to install a module that has cmdlets that collide with cmdlets already on the system. This is okay because of the difference between installing a module and importing a module. You can read more about that <a href="/blog/Lists/Posts/Post.aspx?ID=882">in my previous post</a>. </font></p>  <p><font size="3">If you need one of the on-prem SharePoint Server modules use a line like this:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Install-Module -Name SharePointPnPPowerShell2019 -Scope Allusers –AllowClobber</font></p> </blockquote>  <p><font size="3">You can have as many of these modules installed as long as you install the later ones with –AllowClobber.</font></p>  <p><font size="3">Once you’ve got the modules installed you need to tell PowerShell which one to load. That’s done with the Import-Module cmdlet. When you open a new PowerShell window, or at the top of any PowerShell scripts, you can specify which PnP Module you want PowerShell to use. For instance:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Import-Module PnP.PowerShell</font></p> </blockquote>  <p><font size="3"><font size="3">or</font></font></p>  <blockquote><font size="3"></font>    <p><font size="3" face="Consolas">Import-Module SharePointPnPPowerShellOnline</font></p> </blockquote>  <p><font size="3">or </font></p>  <blockquote>   <p><font size="3"><font face="Consolas">Import-Module SharePointPnPPowerShell2019</font> </font></p> </blockquote>  <p><font size="3">Then you know you’ll get the version of <font face="Consolas">Connect-PnPOnline</font> (or whatever) your code is running.  In theory you could swap them in and out by using Remove-Module, but in reality there are some fiddley PowerShell things in the background (the AppDomain) that keeps this from being successful. My previous blog post does show you how to have multiple versions of the PnP module imported in the same window or script at the same time. </font></p>  <p><font size="3">But really, stick to PnP.PowerShell and PowerShell 7 if humanly possible. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/883/wlEmoticon-smile_2_571B5049.png" /></font></p>  <p><font size="3">I hope you find that all helpful. I don’t know about you, but I’m really excited about this new module.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PoshNewPnPModule">https://www.toddklindt.com/PoshNewPnPModule</a> </font></p>  <p>   <br /><font size="3"></font></p>  <p><font size="3"></font></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/883/wlEmoticon-smile_2_571B5049.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/883/wlEmoticon-smile_2_571B5049.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Tue, 31 Aug 2021 22:59:45 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=883</guid>
    </item>
    <item>
      <title>Using both PnP PowerShell Modules with PowerShell 5 and PowerShell 7.</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=882</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassA5464402D3D1473386F2F757700E54B3"><p><font size="3">Since the PnP team announced that the venerable </font><a href="https://www.powershellgallery.com/packages/SharePointPnPPowerShellOnline"><font size="3">SharePointPnPPowerShellOnline</font></a><font size="3"> module was going to be replaced by the shiny, new </font><a href="https://www.powershellgallery.com/packages/PnP.PowerShell"><font size="3">PnP.PowerShell</font></a><font size="3"> module there has been some confusion on which module to use and which PowerShell to use. I have good news, the answer is “D. All of the above.” In this blog post I’ll show you how you can have both modules installed and use them interchangeably as well as use either of them on whatever version of PowerShell tickles your fancy.</font> </p>  <h1>A Few Words about Modules</h1>  <p><font size="3">Before we can get into how to do this I want to spend some pixels on why we have to do it the way we do. I intended to publish this blog post a couple of weeks (okay, months) ago but as I was doing my research I kept learning more. Most of learning was around the “Module” cmdlets and what each of them does. In order to get the two modules to cooperate we need to use the right Module cmdlets at the right time. Here are the Cliff’s Notes:</font></p>  <h2>The System</h2>  <p><font size="3">Several Module cmdlets deal with what PowerShell Modules are installed on your system with </font><a href="https://docs.microsoft.com/en-us/powershell/module/powershellget/?view=powershell-7.1#:~:text=PowerShellGet%20is%20a%20module%20with%20commands%20for%20discovering%2c%2clike%20Modules%2c%20DSC%20Resources%2c%20Role%20Capabilities%2c%20and%20Scripts."><font size="3">PowerShellGet</font></a><font size="3">. There are a lot of ways to install Modules into PowerShell and PowerShellGet is one of the most popular and it’s built into PowerShell. Here are the pertinent cmdlets and what they do:</font></p>  <ul>   <li><font size="3">Install-Module – Downloads a module from a repository (the <a href="https://www.powershellgallery.com/">PowerShell Gallery</a> by default) and installs it on the system.</font></li>    <li><font size="3">Get-InstalledModule – Lists the modules that were installed on the computer with PowerShellGet</font></li>    <li><font size="3">Uninstall-Module – Uninstalls a packages from that computer that was installed with PowerShellGet</font></li> </ul>  <p><font size="3">The key here is that the scope of those commands, and the other PowerShellGet cmdlets, is the whole computer</font></p>  <h2>The Host</h2>  <p><font size="3">“Host” is a fancy word for PowerShell window or console. There are a few common Module cmdlets that deal only with the host they’re run in. Here are some of my favorites:</font></p>  <ul>   <li><font size="3">Import-Module – Imports a module that was already installed on the computer into the host</font></li>    <li><font size="3">Get-Module – Lists the modules currently imported into the host. The –ListAvailable parameter shows modules installed on the computer that can be imported into the host</font></li>    <li><font size="3">Remove-Module – Unloads (unimports? exports?) a module from the host</font></li> </ul>  <p><font size="3">These cmdlets are all part of Microsoft.PowerShell.Core as opposed to PowerShellGet.</font></p>  <h2>The Import Business</h2>  <p><font size="3">Now we know how to get a module installed onto our computer, and how to manually coax it into our host. But most of us have never done all this Import-Module business but everything seems to work. How’s that? PowerShell has the ability to automatically load modules when they’re needed. The entire, exciting, story of how PowerShell imports modules </font><a href="https://docs.microsoft.com/en-us/powershell/scripting/developer/module/importing-a-powershell-module?view=powershell-7.1"><font size="3">is chronicled here</font></a><font size="3">, but I’ll give you the highlights. If you try to use (or reference it with something like Get-Command) a cmdlet that isn’t in a module already loaded PowerShell will walk through the </font><a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_psmodulepath?view=powershell-7.1"><font size="3">PSModulePath locations</font></a><font size="3"> looking into each module for the cmdlet you’re trying to run. If it finds it, it implicitly imports that module and Bob’s your uncle. You can use <font face="Consolas"><strong>$env:PSModulePath</strong></font> to see where PowerShell will look. It’s important to note that Windows PowerShell 5 and PowerShell 7 have similar, but different PSModulePaths. Here’s what it looks like in both. I added <font face="Consolas"><strong>-split “’;”</strong></font> to put each path on its own line, and I piped it through <font face="Consolas"><strong>Sort-Object</strong></font> to make them easy to keep track of.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/882/image_2_4F66D5CC.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/882/image_thumb_4F66D5CC.png" width="783" height="309" /></a></p>  <p><a href="/blog/Lists/Posts/Attachments/882/image_4_4F66D5CC.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/882/image_thumb_1_4F66D5CC.png" width="794" height="188" /></a></p>  <p><font size="3">To make either Module, SharePointPnPPowerShellOnline or PnP.PowerShell, available to both Windows PowerShell 5 and PowerShell 7 it has to be installed in one of the paths that both versions of PowerShell will look in. For backwards compatibility PowerShell 7 looks in the PowerShell 5 paths, so I do the Install-Module bit in PowerShell 5 and PowerShell 7 gets it for free. You could install it in both, that works. But this way keeps you from having to update it both places every time a new version comes out. The PnP.PowerShell module is aimed for PowerShell 7, but also works fine in PowerShell 5. Erwin told me they may remove that support in future, but for now it’s safe.</font></p>  <p><font size="3">You can see from the screenshots that I have my Known Folders redirected to OneDrive. When installing these modules PowerShell was installing them to my personal folders and it was causing problems. A couple of the Module cmdlets don’t handle that well. To get around some of that chicanery I had to install the modules in a different path. The easiest way I found to do that was the specify the scope <font face="Consolas">Allusers</font>, like this:</font></p>  <p><font size="3" face="Consolas"><strong>Install-Module PnP.PowerShell -Scope AllUsers</strong></font></p>  <p><font size="3">In PowerShell 5 that installed into <font face="Consolas"><strong>C:\Program Files\WindowsPowerShell\Modules\PnP.PowerShell</strong></font>, which PowerShell 7 can see so it can be imported into a host of either version and it’s not in OneDrive.</font></p>  <h1>Using Both Modules in Both PowerShells</h1>  <p><font size="3">We know both PowerShells can run both modules if we install it right. To get everything playing nicely I uninstalled both modules from both versions of PowerShell using <font face="Consolas"><strong>Uninstall-Module -Force –AllVersions</strong></font>. In one case Uninstall couldn’t clean it all up so I had to go into the file system and delete the folder manually. I also had to close the host various times as it had imported the module I was trying to uninstall and I couldn’t get it unloaded in that host. </font></p>  <p><font size="3">After all the uninstalling was done I closed all of the PowerShell windows I had open and I opened a PowerShell 5 window in Admin mode. I installed the old module with this:</font></p>  <p><font size="3" face="Consolas"><strong>Install-Module -Name SharePointPnPPowerShellOnline -Scope Allusers</strong></font></p>  <p><font size="3">That made it so it could be imported into both PowerShell 5 and PowerShell 7. Next I installed the PnP.PowerShell module. This one took a bit of extra coaxing.  It’s currently in prerelease so Install-Module requires the –AllowPrerelease parameter. The version of PowerShellGet in PowerShell 5 does have that. I had to upgrade PowerShellGet first with this line:</font></p>  <p><font size="3" face="Consolas"><strong>Update-Module -Name PowerShellGet</strong></font></p>  <p><font size="3">I close the window and opened a new one for good measure. This put me at version 2.2.5 of <font face="Consolas"><strong>PowerShellGet</strong></font>. One problem solved. The second problem is that PnP.PowerShell and SharePointPnPPowerShellOnline share most of their cmdlet names, so a regular <font face="Consolas"><strong>Install-Module</strong></font> is going to fail. To fix that we need to use the <font face="Consolas"><strong>–AllowClobber</strong></font> parameter. The whole thing looks like this:</font></p>  <p><font size="3" face="Consolas"><strong>Install-Module -Name PnP.PowerShell -AllowPrerelease –AllowClobber</strong></font></p>  <p><font size="3">At first this sounds scary, but remember, Install is just dropping the bits onto your computer. You can still control which module gets loaded in a script or host. To do that using Import-Module. The key is to use Import-Module before you do anything that will trigger PowerShell implicitly loading the module for you. If you want to force your script to use a specific module include one of these lines at the top:</font></p>  <p><font size="3" face="Consolas"><strong>Import-Module PnP.PowerShell</strong></font></p>  <p><font size="3">or </font></p>  <p><font size="3" face="Consolas"><strong>Import-Module SharePointPnPPowerShellOnline</strong></font></p>  <p><font size="3">You would do the same thing in a PowerShell window when you open it to run some cmdlets. I’ve been doing this for a few weeks and it works well.</font>     <br /></p>  <h1>Using Both Modules in the Same Host</h1>  <p><font size="3">Now I’m just going to show off a bit. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/882/wlEmoticon-smile_2_4F66D5CC.png" /> We know we can load either module into a host, but what if we need <strong>both</strong> modules into the same host or script at the same time? It came be done! It sounds like magic, but it works. The key is using the <font face="Consolas"><strong>–Prefix</strong></font> parameter of <strong><font face="Consolas">Import-Module</font></strong>. If you want both modules loaded and available in the same window you need to import one with a prefix. It looks like this:</font></p>  <p><font size="3" face="Consolas"><strong>Import-Module SharePointPnPPowerShellOnline -Prefix Old</strong></font></p>  <p><a href="/blog/Lists/Posts/Attachments/882/image_6_4F66D5CC.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/882/image_thumb_2_4F66D5CC.png" width="812" height="277" /></a></p>  <p><font size="3">You can see from the screenshot that both sets of cmdlets are available, with the SharePointPnPPowerShellOnline versions having the additional prefix of “Old.” I wouldn’t recommend doing this as a normal course of action, but it’s good to know it’s there. PowerShell 7 is a little fussy when doing this. I had issues importing the old version if I had already imported the PnP.PowerShell module explicitly or implicitly, which is why I didn’t in this screenshot. Get-Command implicitly loaded it for me, so that wasn’t an issue. PowerShell 5 handles it more gracefully.</font></p>  <p><font size="3">The End</font></p>  <p><font size="3">There it is, the culmination of weeks (maybe months) of me fiddling around to understand the inner workings of PowerShell module installing and importing. Thanks to Jeff Hicks for holding my hand and answering all my dumb questions. Hopefully my pain will make your transitions from PowerShell 5 to PowerShell 7 and from SharePointPnPPowerShellOnline to PnP.PowerShell easier.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/PoshBothModules"><font size="3">https://www.toddklindt.com/PoshBothModules</font></a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_2_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_2_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_4_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_4_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_6_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_6_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_1_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_1_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_2_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_2_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/image_thumb_4F66D5CC.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/wlEmoticon-smile_2_4F66D5CC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/882/wlEmoticon-smile_2_4F66D5CC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Tue, 31 Aug 2021 22:59:26 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=882</guid>
    </item>
    <item>
      <title>Making the move from SharePointPnPPowerShellOnline to PnP.PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=881</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass3D11FD99FCAE422AA4845B39134CF5EC"><p><font size="3">As the new year approaches I find myself making changes. Like everyone on the planet I plan to eat less and exercise more. I also plan on making another change, I’ll be moving away from my friend the venerable old </font><a href="https://github.com/pnp/PnP-PowerShell"><font size="3">SharePointPnPPowerShellOnline module</font></a><font size="3"> to the new, sexier </font><a href="https://github.com/pnp/powershell"><font size="3">PnP.PowerShell</font></a><font size="3">. I thought I’d blog the experience so you all can follow along. </font></p>  <h1><font size="3">Why the Move?</font></h1>  <p><font size="3">The SharePointPnPPowerShellOnline module has been good to me over the last few years. It has helped me do amazing things both in PowerShell and in SharePoint. Why would I ever give that all up? Because the times, they are a-changing. The SharePointPnPPowerShellOnline module is being retired and all of that effort is being channeled to the PnP.PowerShell module. The SharePointPnPPowerShellOnline module will continue to be around for the on-prem versions of SharePoint Server (though not updated), but for SharePoint Online/Office 365/Microsoft 365 you’ll need to use the PnP.PowerShell module. </font></p>  <p><font size="3">Why did the PnP team decide this? You can get the whole story at the </font><a href="https://pnp.github.io/powershell/"><font size="3">official PnP PowerShell page</font></a><font size="3">, but there are two main reasons. The first is wider platform support. SharePointPnPPowerShellOnline had .NET dependencies that meant it would only run on Windows PowerShell. Emphasis on <em>Windows.</em> When that module was first created 6 years ago that made perfect sense, but since then PowerShell has gone open source and now runs on a variety of platforms like Mac, Linux, a variety toasters, etc. Since SharePointPnPPowerShellOnline required Windows it couldn’t follow PowerShell onto those other platforms. The PnP.PowerShell module was written without those Windows dependencies so it can run anywhere PowerShell can run. You may not use a Mac, but this also means that you can use PnP.PowerShell more easily in cloud environments like Azure Functions. </font></p>  <p><font size="3">The second reason was to give wider application support. The SharePointPnPPowerShellOnline mostly supported SharePoint, as the name would suggest. These days you can’t manage SharePoint Online without also needing to touch Microsoft Groups, Teams, etc. The PnP added more and more cmdlets to handle that, but there were some big authentication changes that needed to be made to fully support all of the other applications. They started adding some of that to SharePointPnPPowerShellOnline, but it was cobbled together a bit. While they were refactoring the module for .NET Standard they went ahead and made some sweeping authentication changes that mean we’ll be able to use it more easily for SharePoint and all of the other applications we know and love. </font></p>  <h1><font size="3">First Step PowerShell 7</font></h1>  <p><font size="3">The first step to moving to the PnP.PowerShell module is to install </font><a href="https://github.com/PowerShell/PowerShell"><font size="3">PowerShell 7</font></a><font size="3">, also called PowerShell Core. I’m on Windows, so that’s the process I’m going to walk through. Windows comes with PowerShell, Windows PowerShell 5.1. To use PowerShell 7 we’ll have to install it. Windows PowerShell 5.1 and PowerShell Core 7 can happily coexist on your machine, so you don’t have to worry about breaking any of your other existing PowerShell scripts or tools. </font></p>  <p><font size="3"></font></p>  <p><a href="/blog/Lists/Posts/Attachments/881/image_2_074B84B2.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/881/image_thumb_074B84B2.png" width="632" height="640" /></font></a></p>  <p><font size="3">You can see from this screenshot I have both versions of PowerShell installed and running on this machine. You can use the system variable<font face="Consolas"> $PSVersionTable</font> to see which version of PowerShell your host is currently using. It’s also pretty easy to pick the version of PowerShell you want when firing it up.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/881/image_4_074B84B2.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/881/image_thumb_1_074B84B2.png" width="544" height="447" /></font></a></p>  <p><font size="3"></font></p>  <p><font size="3">While PowerShell 7.x can coexist with Windows PowerShell 5.x, it will replace PowerShell 6.x if you have that installed. </font></p>  <p><font size="3">I installed PowerShell 7 by downloading the installation MSI from the </font><a href="https://github.com/PowerShell/PowerShell"><font size="3">GitHub page</font></a><font size="3">. For me that was the Windows x64 platform and I grabbed the stable build. That file was <font face="Consolas">PowerShell-7.1.0-win-x64.msi</font>, but obviously that filename will change as PowerShell 7 advances. Then I popped open a Windows PowerShell 5 (oh, the irony) prompt in Admin mode and ran the MSI.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/881/image_8_3538D76A.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/881/image_thumb_3_3538D76A.png" width="633" height="408" /></font></a></p>  <p><font size="3">The friendly wizard walked me through the process. There are few installation choices to make, but I’ve found the defaults are usually fine. </font></p>  <p><font size="3">After the installation is finished you’ll have both Windows PowerShell 5.x and PowerShell Core 7.x. Time to install some modules.</font></p>  <h1><font size="3">The Module</font></h1>  <p><font size="3">Installing the PnP.PowerShell module is pretty easy, but if you have the older SharePointPnPPowerShellOnline module installed you’ll need to uninstall it first. The cmdlet names in both modules are the same, So PnP.PowerShell won’t install all of its cmdlets while there are collisions with the old version. To uninstall the SharePointPnPPowerShellOnline module open up a Windows PowerShell 5 host in Admin mode and enter this:</font></p>  <p><font size="3" face="Consolas">Uninstall-Module SharePointPnPPowerShellOnline –AllVersions</font></p>  <p><font size="3">and wave a fond farewell to our old friend. After that’s finished, and you’re done sobbing, open up a shiny new PowerShell Core 7 host in Admin mode. While you’re in there opening up in Admin mode, go ahead and add PowerShell 7 to your Start Menu and your Taskbar. You’ll thank me later. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/881/image_10_3538D76A.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/881/image_thumb_4_3538D76A.png" width="555" height="454" /></font></a></p>  <p><font size="3">Then issue this command:</font></p>  <p><font size="3" face="Consolas">Install-Module PnP.PowerShell –AllowPrerelease</font></p>  <p><a href="/blog/Lists/Posts/Attachments/881/image_12_3538D76A.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/881/image_thumb_5_3538D76A.png" width="579" height="205" /></font></a></p>  <p><font size="3">You’re all done. Since PnP.PowerShell is not an official release yet you’ll need the scary sounding <font face="Consolas">–AllowPrerelease</font> parameter. After January of 2021 you won’t need that anymore. </font></p>  <h1><font size="3">Finally, Authentication</font></h1>  <p><font size="3">I mentioned earlier that one of the reasons for changing modules was a change in authentication. I don’t want to get too deep into it in this blog post but I do want to mention that you should run <font face="Consolas">Register-PnPManagementShellAccess</font> to set up a an Azure Application Registration. This is the magic that allows the new PnP PowerShell access to all of the applications in Office 365. You may have seen this referred to as Graph API. I’ll dig into it later, but for now all you need to know is that a tenant admin needs to run the PnP.PowerShell version of<font face="Consolas"> Register-PnPManagementShellAccess</font> once in your tenant. After that is in place you should be able to use <font face="Consolas">Connect-PnPOnline</font> and get connected. </font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/NewPnPPowerShell"><font size="3">https://www.toddklindt.com/NewPnPPowerShell</font></a><font size="3"> </font></p>  <p><font size="3"></font></p>  <p><font size="3"></font></p>  <p><font size="3"></font></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_10_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_10_3538D76A.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_12_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_12_3538D76A.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_2_074B84B2.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_2_074B84B2.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_4_074B84B2.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_4_074B84B2.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_8_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_8_3538D76A.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_074B84B2.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_074B84B2.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_1_074B84B2.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_1_074B84B2.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_3_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_3_3538D76A.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_4_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_4_3538D76A.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_5_3538D76A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/881/image_thumb_5_3538D76A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Tue, 31 Aug 2021 22:58:45 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=881</guid>
    </item>
    <item>
      <title>Tips for using the Microsoft Authenticator app for MFA</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=880</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass4CCF026941BB4698B822089211178A52"><p><font size="3">Earlier this month, </font><a href="https://techcommunity.microsoft.com/t5/user/viewprofilepage/user-id/221690"><font size="3">Alex Weinert</font></a><font size="3">, the Director of Identity Security at a little company called Microsoft, published </font><a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/it-s-time-to-hang-up-on-phone-transports-for-authentication/ba-p/1751752"><font size="3">a blog post begging us to stop using SMS</font></a><font size="3"> 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 </font><a href="https://www.microsoft.com/en-us/p/microsoft-authenticator/9nblgggzmcj6?activetab=pivot:overviewtab"><font size="3">Microsoft Authenticator app</font></a><font size="3">, 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. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/880/wlEmoticon-smile_2_000A476C.png" /></font></p>  <p><font size="3">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.</font></p>  <h2>Use Microsoft Your Phone</h2>  <p><font size="3">My first tip for using Microsoft Authenticator is not about using Microsoft Authenticator at all. It’s about using a Windows 10 feature called “</font><a href="https://support.microsoft.com/en-us/your-phone-app"><font size="3">Your Phone</font></a><font size="3">.” 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:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/880/image_2_000A476C.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/880/image_thumb_000A476C.png" width="201" height="423" /></a></p>  <p><font size="3">That saves you fumbling with the UI on your phone, but you’d still need to look at your phone to get the code. </font></p>  <p><font size="3">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:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/880/image_6_000A476C.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/880/image_thumb_2_000A476C.png" width="201" height="423" /></a></p>  <p><font size="3">If you don’t, you’ll see this on your PC when you open Microsoft Authenticator:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/880/image_8_000A476C.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/880/image_thumb_3_000A476C.png" width="206" height="434" /></a></p>  <p><font size="3">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.</font> </p>  <h2>Show the Codes</h2>  <p><font size="3">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.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/880/image_4_000A476C.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/880/image_thumb_1_000A476C.png" width="201" height="423" /></a></p>  <p><font size="3">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:</font></p>  <ol>   <li><font size="3">Hunting around for my phone</font></li>    <li><font size="3">Unlocking it (unsuccessfully the first couple of times)</font></li>    <li><font size="3">Finding the Microsoft Authenticator app</font></li>    <li><font size="3">Finding the account I want to log in to</font></li>    <li><font size="3">Clicking it (so much work)</font></li>    <li><font size="3">Typing all six digits into the MFA prompt on my computer</font></li>    <li><font size="3">Collapsing from exhaustion</font></li> </ol>  <p><font size="3">To this:</font></p>  <ol>   <li><font size="3">Clicking the Microsoft Authenticator app on my Windows 10 Taskbar</font></li>    <li><font size="3">Copying the one-time passcode for the account</font></li>    <li><font size="3">Pasting into the MFA prompt</font></li>    <li><font size="3">There’s no step 4!</font></li> </ol>  <p><font size="3">Wait, copy and paste the passcode? How’s that again?</font></p>  <h2>Copy and Paste the Passcode</h2>  <p><font size="3">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.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/880/image_10_000A476C.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/880/image_thumb_4_000A476C.png" width="415" height="362" /></a></p>  <p><font size="3">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?</font></p>  <h2>Backup Your Settings</h2>  <p><font size="3">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 </font><a href="https://docs.microsoft.com/en-us/azure/active-directory/user-help/user-help-auth-app-backup-recovery"><font size="3">on this Docs Page</font></a><font size="3">. But the basic idea is, turn it on. Future you will appreciate your consideration and foresight. </font></p>  <p><font size="3">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.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/MSAuthTips"><font size="3">https://www.toddklindt.com/MSAuthTips</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_10_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_10_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_2_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_2_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_4_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_4_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_6_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_6_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_8_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_8_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_1_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_1_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_2_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_2_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_3_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_3_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_4_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/image_thumb_4_000A476C.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/wlEmoticon-smile_2_000A476C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/880/wlEmoticon-smile_2_000A476C.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365</category>
      <pubDate>Wed, 25 Nov 2020 16:41:13 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=880</guid>
    </item>
    <item>
      <title>Free SharePoint Migration Webinar with me!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=879</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass2311EC86FBB14304B40AA66EA6A45E71"><p><font size="3">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. </font><a href="https://www.timeanddate.com/worldclock/converted.html?iso=20200916T10&amp;p1=76&amp;p2=0"><font size="3">It’s 10:00 am CDT</font></a></p>  <p><font size="3">The registration is free, and you can find out more details and </font><a href="https://www.syskit.com/company/events/sharepoint-migration-best-practices-webinar/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=todd-september-2020-sep-spdockit&amp;utm_content=landscape-img-51"><font size="3">sign up here</font></a><font size="3">. </font></p>  <p><font size="3">I’ll give some good advice, and tell some stories, and generally have fun. Join me, I’d love to see you there. </font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><font size="3"><a href="/SyskitWebinar">https://www.toddklindt.com/SyskitWebinar</a></font></p>  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Sharepoint; Office 365</category>
      <pubDate>Mon, 14 Sep 2020 14:30:34 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=879</guid>
    </item>
    <item>
      <title>Create "All Users" Groups and Distribution Lists in Office 365 and Azure AD</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=878</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass076E3C6D4F5D4A8DB038AE12C38EABD3"><p><font size="3">Some blog posts just <em>beg</em> 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 <a href="https://docs.microsoft.com/en-us/microsoft-365/admin/create-groups/office-365-groups?view=o365-worldwide">published limitations</a> 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 <em>why</em> you should employ any of these techniques, but <em>how</em> 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. </font></p>
 <font size="3"></font>  <h2>The Options</h2>
 <font size="3"></font>  <p><font size="3">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. </font></p>
  <h2>Distribution Lists (DLs)</h2>
  <p><font size="3">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!”</font></p>
  <p><font size="3">To do this, create a new DL and make it a </font><a href="https://docs.microsoft.com/en-us/exchange/recipients-in-exchange-online/manage-dynamic-distribution-groups/manage-dynamic-distribution-groups#what-do-you-need-to-know-before-you-begin"><font size="3">dynamic DL</font></a><font size="3">. 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 <em>no rule</em>. 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 </font><a href="https://docs.microsoft.com/en-us/microsoft-365/admin/manage/upgrade-distribution-lists?view=o365-worldwide#which-distribution-lists-cannot-be-upgraded"><font size="3">can be upgraded to Office 365 Groups</font></a><font size="3">. Dynamic DLs cannot be upgraded to Office 365 Groups. I’ve also had customers set one of these up and </font><a href="https://techcommunity.microsoft.com/t5/healthcare-and-life-sciences/modern-intranet-emailing-a-news-digest/ba-p/332916"><font size="3">send News Digests</font></a><font size="3"> 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.</font></p>
  <h3>How do I Create one?</h3>
  <p><font size="3">There are a couple of different ways to create a dynamic DL. You can do it in the </font><a href="https://outlook.office365.com/ecp"><font size="3">Exchange admin center</font></a><font size="3"> in Office 365. Then navigate to the Groups tab. Next to New Microsoft 365 Group click the dropdown and select Dynamic distribution list.</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/878/image_2_4D03D2C0.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/878/image_thumb_4D03D2C0.png" width="502" height="400" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">The configuration will look something like this. <em>Do not add a rule.</em></font></p>
  <p><a href="/blog/Lists/Posts/Attachments/878/image_4_4D03D2C0.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/878/image_thumb_1_4D03D2C0.png" width="374" height="624" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">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. </font></p>
  <p><font size="3">If you’re super cool, you can create dynamic DLs with PowerShell. First </font><a href="https://docs.microsoft.com/en-us/powershell/exchange/connect-to-exchange-online-powershell?view=exchange-ps"><font size="3">connect to Exchange Online PowerShell</font></a><font size="3">, then run </font><a href="https://docs.microsoft.com/en-us/powershell/module/exchange/new-dynamicdistributiongroup?view=exchange-ps"><font size="3">New-DynamicDistributionGroup</font></a><font size="3">:</font></p>
  <blockquote>   <p><font size="3" face="Consolas">New-DynamicDistributionGroup -IncludedRecipients MailboxUsers -Name &quot;Blog Lovers&quot;</font></p>
 </blockquote>
  <p><font size="3">Doesn’t that feel better than using the UI? I thought so.</font></p>
  <h2>Security Groups and Microsoft 365 Groups</h2>
  <p><font size="3">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 <em>everyone</em> 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. </font></p>
  <h3>How do I Create Them?</h3>
  <p><font size="3">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 </font><a href="https://aad.portal.azure.com/"><font size="3">Azure AD Portal</font></a><font size="3"> and with Azure PowerShell. Navigate to the </font><a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/GroupsManagementMenuBlade/AllGroups"><font size="3">Groups blade</font></a><font size="3"> and click &quot;New group.” Under Membership type choose “Dynamic User”</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/878/image_6_4D03D2C0.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/878/image_thumb_2_4D03D2C0.png" width="390" height="507" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">If Membership type is greyed out that’s because the user creating the group </font><a href="https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-dynamic-tutorial"><font size="3">does not have an Azure AD Premium license</font></a><font size="3">.</font></p>
  <p><font size="3">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. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/878/image_8_3812504D.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/878/image_thumb_3_3812504D.png" width="440" height="195" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">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. </font></p>
  <p><font size="3">But what about PowerShell?? I’m so glad you asked. Make sure you have the <a href="https://docs.microsoft.com/en-us/powershell/azure/active-directory/install-adv2?view=azureadps-2.0">AzureAD module</a> loaded and you’re connected as an account that can create Groups. Then run this little gem to create a Dynamic Microsoft 365 Group:</font></p>
  <blockquote>   <p><font size="3" face="Consolas">New-AzureADMSGroup -DisplayName &quot;Dynamic M365 Group From PowerShell!&quot; -Description &quot;Dynamic group created with PowerShell!&quot; -MailEnabled $true -MailNickName &quot;Dynamic-M365-Group-From-PowerShell&quot; -SecurityEnabled $True -GroupTypes &quot;Unified&quot;,&quot;DynamicMembership&quot; -MembershipRule &quot;(user.objectId -ne null)&quot; -MembershipRuleProcessingState &quot;On&quot;</font></p>
 </blockquote>
  <p><font size="3">If you only want a Security Group (I’m not sure why) change the <font face="Consolas">–MailEnabled</font> parameter to <font face="Consolas">$false</font>, and the <font face="Consolas">–GroupTypes</font> to only <font face="Consolas">DynamicMembership</font>, like this:</font></p>
  <blockquote>   <p><font size="3" face="Consolas">New-AzureADMSGroup -DisplayName &quot;Dynamic Security Group From PowerShell!&quot; -Description &quot;Dynamic security group created with PowerShell!&quot; -MailEnabled $false -MailNickName &quot;Dynamic-Security365-Group-From-PowerShell&quot; -SecurityEnabled $True -GroupTypes &quot;DynamicMembership&quot; -MembershipRule &quot;(user.objectId -ne null)&quot; -MembershipRuleProcessingState &quot;On&quot;</font></p>
 </blockquote>
  <p><font size="3">It is also possible to switch an existing static Security Group or Microsoft 365 Group to dynamic. It’s a long process, and t<a href="https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-change-type">his article does a good job</a> explaining how. I don’t think there’s a way to convert a Security Group to a Microsoft 365 Group. </font></p>
  <p><font size="3">Happy Dynamic Group Creating!</font></p>
<p><font size="3"><br /></font></p>
<p><font size="3">Question #1: &quot;Can you use Dynamic Groups with Audience targeting?&quot;<br />Answer #1: Despite <a href="https://support.microsoft.com/en-us/office/target-navigation-news-and-files-to-specific-audiences-33d84cb6-14ed-4e53-a426-74c38ea32293">this Microsoft Support document</a> 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. </font></p>
<p><span style="font-size:medium">Question #2: &quot;Does the '</span><span style="font-size:medium"></span><span style="font-size:medium">user.objectId -ne null' approach include Guests?&quot;<br /></span><span style="font-size:medium">Answer #2: I'm not sure, I'll look into that and update this blog post. </span></p>
<p><br /></p>
  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: <a href="/CreateDynamicGroups">https://www.toddklindt.com/CreateDynamicGroups</a> </font></p>
<p class="ms-rteForeColor-2" style="">Edit: 8/24/20 to add questions</p>

  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_2_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_2_4D03D2C0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_4_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_4_4D03D2C0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_6_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_6_4D03D2C0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_8_3812504D.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_8_3812504D.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_1_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_1_4D03D2C0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_2_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_2_4D03D2C0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_3_3812504D.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_3_3812504D.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_4D03D2C0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/878/image_thumb_4D03D2C0.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell; Sharepoint</category>
      <pubDate>Tue, 18 Aug 2020 16:30:56 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=878</guid>
    </item>
    <item>
      <title>Use PowerShell to Work with SharePoint 2010 Workflow Scan</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=877</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass6DBC05204FAE48C9B30DCD2D7089EB6B"><p><font size="3"><em>Workflow Retirement Series TOC</em></font></p>  <p><font size="3">Part 1 - <a href="/blog/Lists/Posts/Post.aspx?ID=872">SharePoint 2010 and 2013 Workflows Kaput in Office 365</a>       <br /><font size="3">Part 2 - <a href="/blog/Lists/Posts/Post.aspx?ID=873">Finding All the SharePoint 2010 Workflows in SharePoint Online</a>         <br />Part 3 - <a href="/blog/Lists/Posts/Post.aspx?ID=874">Find Only the Active SharePoint 2010 Workflows in SharePoint Online</a>  <br /><strong>Part 4 - </strong><a href="/blog/Lists/Posts/Post.aspx?ID=877"><strong>Use PowerShell to Work with SharePoint 2010 Workflow Scan</strong></a></font></font></p>  <p><font size="3">In </font><a href="/blog/Lists/Posts/Post.aspx?ID=873"><font size="3">Part 2 of my much beloved “Workflow Retirement Series”</font></a><font size="3"> I covered how to scan your SharePoint Online environment for those pesky SharePoint 2010 workflows with the free </font><a href="https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-scanner"><font size="3">SharePoint Modernization Scanner</font></a><font size="3">. 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 <em>a lot</em> 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.</font></p>  <div><font size="3">One of the reports the SharePoint Modernization Scanner makes is </font>    <p><font size="3"><font face="Consolas">ModernizationWorkflowScanResults.csv</font>  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:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results = Import-Csv .\ModernizationWorkflowScanResults.csv</font></p>   </blockquote>    <p><font size="3">As a gut check we can see how many rows we brought in:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results.Count</font></p>   </blockquote>    <p><font size="3">You can also type <font face="Consolas">$results[0]</font> 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:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | Get-Member</font></p>   </blockquote>    <p><a href="/blog/Lists/Posts/Attachments/877/image_2_24161CB0.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/877/image_thumb_24161CB0.png" width="692" height="325" /></font></a></p>    <p><font size="3">My eagle-eyed readers will notice that the <font face="Consolas">NoteProperties</font> are the column headers in the CSV file. To get my feet below me I did a simple Select to get a few properties:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | select &quot;Definition Name&quot;,Version</font></p>   </blockquote>    <p><font size="3">You can add any of the columns you want. Remember to put quotes around the columns with spaces in the name. </font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | select &quot;Definition Name&quot;,&quot;Subscription Name&quot;,&quot;List Title&quot;,Version,enabled</font></p>   </blockquote>    <p><font size="3">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 <font face="Consolas">Format-Table</font>:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | Select-Object &quot;Definition Name&quot;,&quot;Subscription Name&quot;,&quot;List Title&quot;,Version,enabled,&quot;Flow upgradability&quot; | Format-Table –AutoSize</font></p>   </blockquote>    <p><a href="/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_24161CB0.png"><font size="3"><img title="SNAGHTML192591b3" style="display:inline;background-image:none" border="0" alt="SNAGHTML192591b3" src="/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_thumb_24161CB0.png" width="704" height="325" /></font></a></p>    <p><font size="3">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:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | Where-Object -Property version -EQ -Value &quot;2010&quot; | Select-Object &quot;Definition Name&quot;,&quot;Subscription Name&quot;,&quot;List Title&quot;,Version,enabled,&quot;Flow upgradability&quot; | Format-Table -AutoSize</font></p>   </blockquote>    <p><font size="3">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:</font></p>    <blockquote>     <p><font size="3" face="Consolas">$results | Where-Object -Property version -EQ -Value &quot;2010&quot; | Select-Object &quot;Definition Name&quot;,&quot;List Title&quot;,enabled,&quot;Site Url&quot; | Group-Object -Property &quot;Site Url&quot; | Format-Table –AutoSize</font></p>   </blockquote>    <p><a href="/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_24161CB0.png"><font size="3"><img title="SNAGHTML1926b330" style="display:inline;background-image:none" border="0" alt="SNAGHTML1926b330" src="/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_thumb_52036F68.png" width="715" height="232" /></font></a></p>    <p><font size="3">This will help you figure out where to focus your efforts between now and November 1st. </font></p>    <p><font size="3">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 <font face="Consolas">Office 365 Classic workflow inventory.xlsx</font> report that the SharePoint Modernization Scanner creates. But it’s a fun PowerShell exercise just the same. </font></p>    <p><font size="3">tk</font></p>    <p><font size="3">ShortURL: </font><a href="/PoshWorkflowScan"><font size="3">https://www.toddklindt.com/PoshWorkflowScan</font></a><font size="3"> </font></p> </div></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/image_2_24161CB0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/image_2_24161CB0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/image_thumb_24161CB0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/image_thumb_24161CB0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_24161CB0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_24161CB0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_thumb_24161CB0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML192591b3_thumb_24161CB0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_24161CB0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_24161CB0.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_thumb_52036F68.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/877/SNAGHTML1926b330_thumb_52036F68.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Sharepoint; Office 365; PowerShell</category>
      <pubDate>Wed, 29 Jul 2020 16:06:24 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=877</guid>
    </item>
    <item>
      <title>How to use PowerShell to Find all the Flows in Your Tenant</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=876</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass7BEC5FE46CCC4ECF82B73A3BB9C9DAF1"><p><font size="3">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 </font><a href="/blog/Lists/Posts/Post.aspx?ID=872"><font size="3">Workflow excitement</font></a><font size="3">, 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. </font></p>  <p><font size="3">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. </font></p>  <blockquote>   <p><font size="3" face="Consolas">Get-AdminFlow | ForEach-Object { $user = Get-UsersOrGroupsFromGraph -ObjectId $_.CreatedBy.userId;[PSCustomObject]@{ FlowName = $_.DisplayName; OwnerName = $user.DisplayName ; OwnerEmail = $user.UserPrincipalName ; }; }</font></p> </blockquote>  <p><font size="3">Let’s break that down a bit. You’ll need to install the </font><a href="/blog/Lists/Posts/Post.aspx?ID=826"><font size="3"><em>PowerApps and Flow for Admins</em> module</font></a><font size="3">. Install the <em>PowerApps and Flow for Makers</em> module while you’re at it. If you don’t run <font face="Consolas">Add-PowerAppsAccount</font> and add your Tenant Admin account you’ll get prompted for authentication the first time you run <font face="Consolas">Get-AdminFlow</font>.</font></p>  <p><font size="3"><font face="Consolas">Get-AdminFlow</font> lists all of the Flows in a tenant, but not in the most user friendly way:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/876/image_4_08FC0017.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/876/image_thumb_1_08FC0017.png" width="707" height="391" /></font></a></p>  <p><font size="3">So I cleaned it up a bit. Using <font face="Consolas">ForEach-Object</font> I walk through each Flow. I use <font face="Consolas">Get-UsersOrGroupsFromGraph</font> to get the Owner object. <font size="3">Then I create a <font face="Consolas">PSCustomObject</font> and populate it with the Flow’s DisplayName and the user’s DisplayName and UserPrincipalName properties. It looks like this:</font></font></p>  <p><a href="/blog/Lists/Posts/Attachments/876/image_2_08FC0017.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/876/image_thumb_08FC0017.png" width="711" height="201" /></font></a></p>  <p><font size="3">Making it an object is a little extra work as opposed to just spewing it onto the screen with <font face="Consolas">Write-Host</font>. 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<font face="Consolas"> | Export-Csv -Path .\Flows.csv –NoTypeInformation</font> to the end. </font></p>  <p><a href="/blog/Lists/Posts/Attachments/876/image_6_08FC0017.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/876/image_thumb_2_08FC0017.png" width="720" height="105" /></font></a></p>  <p><font size="3">That seems a bit anticlimactic at first, but open up that CSV file and prepare to be amazed.</font></p>  <p><a href="/blog/Lists/Posts/Attachments/876/image_8_08FC0017.png"><font size="3"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/876/image_thumb_3_08FC0017.png" width="718" height="429" /></font></a></p>  <p><font size="3">If you want different information about each Flow, run <font face="Consolas">Get-AdminFlow | Get-Member</font> and see what other properties are exposed to you. </font></p>  <p><font size="3">Let me know if this helps and what else you’d like help with.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/POSHFindAllFlows"><font size="3">https://www.toddklindt.com/POSHFindAllFlows</font></a><font size="3"> </font></p>  <p><font size="3"><font color="#ff0000">Edit 7/15/2020 – Changed the PowerShell to be more efficient, but now it doesn’t match the screenshots.</font> </font></p>  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=3\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=3&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_2_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_2_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_4_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_4_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_6_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_6_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_8_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_8_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_1_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_1_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_2_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_2_08FC0017.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_3_08FC0017.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/876/image_thumb_3_08FC0017.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell</category>
      <pubDate>Wed, 15 Jul 2020 16:59:57 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=876</guid>
    </item>
    <item>
      <title>Find Only the Active SharePoint 2010 Workflows in SharePoint Online</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=874</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassBB961E38BB1A4C4395A5981F208FB8F4"><p><font size="3"><em>Workflow Retirement Series TOC</em></font></p>
<p><font size="3">Part 1 - <a href="/blog/Lists/Posts/Post.aspx?ID=872">SharePoint 2010 and 2013 Workflows Kaput in Office 365</a> <br /><font size="3">Part 2 - <a href="/blog/Lists/Posts/Post.aspx?ID=873">Finding All the SharePoint 2010 Workflows in SharePoint Online</a> <br /></font></font><span style="font-size:medium"><strong>Part 3 - </strong></span><a href="/blog/Lists/Posts/Post.aspx?ID=874" style="font-size:medium"><strong>Find Only the Active SharePoint 2010 Workflows in SharePoint Online</strong></a><span style="font-size:medium"><strong>   <br /></strong></span><span style="font-size:medium">Part 4 - </span><a href="/blog/Lists/Posts/Post.aspx?ID=877" style="font-size:medium">Use PowerShell to Work with SharePoint 2010 Workflow Scan</a><font size="3"><font size="3">  ​</font></font></p>
<p><span style="font-size:medium"><strong>  </strong> ​</span></p>
<p><span style="font-size:medium"></span><font size="3">In the <a href="/blog/Lists/Posts/Post.aspx?ID=873">last episode</a> 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!</font></p>
  <p><font size="3">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. </font></p>
  <p><font size="3">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. </font></p>
  <p><font size="3">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 <font face="Consolas">ModernizationWorkflowScanResults.csv</font> 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 <font face="Consolas">/lists/Workflow%20history/AllItems.aspx</font> at the end of it and get which Workflows are being executed. Here is what we see in the report:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/874/image_2_60BC0489.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/874/image_thumb_60BC0489.png" width="862" height="265" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">In my browser I pasted </font><a href="https://m365x541279.sharepoint.com/sites/SalesAndMarketing/lists/Workflow%20history/AllItems.aspx"><font size="3">https://m365x541279.sharepoint.com/sites/SalesAndMarketing/<strong>lists/Workflow%20history/AllItems.aspx</strong></font></a><font size="3"> and I got a page like this:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/874/image_4_60BC0489.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/874/image_thumb_1_60BC0489.png" width="865" height="359" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">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. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/874/image_8_21998962.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/874/image_thumb_3_21998962.png" width="867" height="320" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">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:</font></p>
  <blockquote>   <p><font size="3" face="Consolas">Get-PnPList | Where-Object -Property BaseTemplate -EQ -Value &quot;140&quot; | Select-Object Title, @{Label=&quot;URL&quot;;Expression={$_.RootFolder.ServerRelativeUrl}}, BaseTemplate</font></p>
    <p><font size="3" face="Consolas"></font></p>
 </blockquote>
  <p><a href="/blog/Lists/Posts/Attachments/874/image_12_21998962.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/874/image_thumb_5_21998962.png" width="881" height="165" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">You can run that against the sites that show up in the <font face="Consolas">ModernizationWorkflowScanResults.csv</font> 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:</font></p>
<blockquote><p><font size="3" face="Consolas">Set-PnPList -Identity &quot;Workflow History&quot; -Hidden $false<br /></font></p></blockquote>
<p><span style="font-size:medium">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.</span><br /></p>
  <p><font size="3">Look at all the time you just saved! More time to watch </font><a href="https://www.youtube.com/watch?v=ScuR7s3wSlM"><font size="3">hamster videos on YouTube</font></a><font size="3">. </font></p>
  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: </font><a href="/FindActiveWorkflows"><font size="3">https://www.toddklindt.com/FindActiveWorkflows</font></a></p></div>
​​</div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=3\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=3&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_12_21998962.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_12_21998962.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_2_60BC0489.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_2_60BC0489.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_4_60BC0489.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_4_60BC0489.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_8_21998962.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_8_21998962.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_1_60BC0489.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_1_60BC0489.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_3_21998962.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_3_21998962.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_5_21998962.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_5_21998962.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_60BC0489.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/874/image_thumb_60BC0489.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; Sharepoint</category>
      <pubDate>Tue, 14 Jul 2020 15:25:55 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=874</guid>
    </item>
    <item>
      <title>Finding All the SharePoint 2010 Workflows in SharePoint Online</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=873</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF188EADB4FFE4F9B8F3D5212A52A3846"><p><font size="3"><em>Workflow Retirement Series TOC</em></font></p>
<p><font size="3">Part 1 - <a href="/blog/Lists/Posts/Post.aspx?ID=872">SharePoint 2010 and 2013 Workflows Kaput in Office 365</a> <br /><font size="3"><strong>Part 2 - </strong><a href="/blog/Lists/Posts/Post.aspx?ID=873"><strong>Finding All the SharePoint 2010 Workflows in SharePoint Online</strong></a><strong> </strong><br /></font></font><span style="font-size:medium">Part 3 - </span><a href="/blog/Lists/Posts/Post.aspx?ID=874" style="font-size:medium">Find Only the Active SharePoint 2010 Workflows in SharePoint Online</a><br /><span style="font-size:medium">Part 4 - </span><a href="/blog/Lists/Posts/Post.aspx?ID=877" style="font-size:medium">Use PowerShell to Work with SharePoint 2010 Workflow Scan</a><font size="3"><font size="3"><span> </span> ​</font></font></p>
<p><span style="font-size:medium">   <br /></span><font size="3">By now you’ve probably seen Microsoft’s announcement that they’re going to </font><a href="/blog/Lists/Posts/Post.aspx?ID=872" style="font-size:8pt"><font size="3">remove SharePoint 2010 Workflows</font></a><font size="3"> 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 <a href="https://flow.microsoft.com/">Power Automate</a>, 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 </font><font size="3"><a href="https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-scanner">SharePoint Modernization Scanner</a></font><font size="3"> (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.</font><span style="font-size:medium"><br /></span></p>
  <p><font size="3">To get started, download the SMS from <a href="https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-scanner">the link on this page</a></font><font size="3"></font><font size="3">. 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 </font></p>
  <p><font size="3"><font face="Consolas">SharePoint.Modernization.Scanner.exe</font> to <font face="Consolas">D:\SMAT</font>. 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. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_2_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_2_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_7141E5B5.png" width="456" height="372" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">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 </font><a href="https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread"><font size="3">create an App Registration</font></a><font size="3"> 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.</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_4_7141E5B5.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_1_7141E5B5.png" width="610" height="484" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">The Application ID can be copied directly from the Overview page of the App Registration itself. The domain is the<em> Azure AD domain</em>, 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 </font><a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview"><font size="3">Azure Active Directory Dashboard Overview page</font></a><font size="3"> and find Primary Domain. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_6_7141E5B5.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_2_7141E5B5.png" width="593" height="488" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">You will also need the PFX file for the certificate that was used for the App Registration, and the password for that cert. </font></p>
  <p><font size="3">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. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_8_7141E5B5.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_3_7141E5B5.png" width="495" height="403" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">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. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_10_7141E5B5.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_4_7141E5B5.png" width="512" height="417" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">The final screen has some options. I always go with the defaults. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_12_7141E5B5.png"><font size="3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_5_7141E5B5.png" width="513" height="417" style="display:inline;background-image:none" /></font></a> </p>
  <p><font size="3">Hit “Start scan” and then anxiously await the report. It’ll look like this. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_14_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_14_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_6_7141E5B5.png" width="700" height="608" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">Maybe pop some popcorn. It might take a minute. Finally you’ll get this:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_16_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_16_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_7_7141E5B5.png" width="712" height="618" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">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.</font></p>
  <p><font size="3" face="Consolas">.\SharePoint.Modernization.Scanner.exe --azuretenant M365x541279.onmicrosoft.com --certificatepfx &quot;d:\smat\SMAT App Reg.pfx&quot; --certificatepfxpassword pass@word1 --tenant M365x541279 --mode WorkflowOnly --clientid a204b312-c2a9-4a47-861c-b0c874e8219a</font></p>
  <p><font size="3">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:</font></p>
<p><span style="font-family:consolas;font-size:medium">.\SharePoint.Modernization.Scanner.exe --azuretenant M365x541279.onmicrosoft.com --certificatepfx &quot;d:\smat</span><font face="consolas" size="3">\SMAT App Reg.pfx&quot; --certificatepfxpassword pass@word1 --tenant M365x541279 --mode <strong>WorkflowWithDetailsOnly </strong>--clientid a204b312-c2a9-4a47-861c-b0c874e8219a​ </font><font size="3"><br /></font></p>
<p><span style="font-size:medium"><br /></span></p>
<p><span style="font-size:medium">It looks like this:</span><br /></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_24_467BADA5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_11_318A2B32.png" width="714" height="98" style="display:inline;background-image:none" /></a> </p>
  <p><font size="3">Once the scanner is finished it’ll drop a bunch of files into the folder listed above. Mine looked like this:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_18_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_18_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_8_7141E5B5.png" width="715" height="374" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">Since we only care about Workflows we can jump right into the <font face="Consolas">ModernizationWorkflowScanResults.csv</font> 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:</font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_20_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_20_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_9_7141E5B5.png" width="720" height="312" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">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.</font></p>
  <p><font size="3">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. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/873/wlEmoticon-smile_2_7141E5B5.png" /> I want to add one additional bit though. In that same report directory is <font face="Consolas">Office 365 Classic workflow inventory.xlsx.</font> 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 <font face="Consolas">Office 365 Classic workflow inventory.xlsx</font> and click “Enable” in the bar at the top. When you click Enable the spreadsheet will load the information from the <font face="Consolas">ModernizationWorkflowScanResults.csv</font> file and make it look all pretty. </font></p>
  <p><a href="/blog/Lists/Posts/Attachments/873/image_22_7141E5B5.png"><font size="3"></font></a><font size="3"><a href="/blog/Lists/Posts/Attachments/873/image_22_7141E5B5.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/873/image_thumb_10_7141E5B5.png" width="723" height="514" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">That version will look better on a PowerPoint. You’ve got some filters to play with, really put some polish on it. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/873/wlEmoticon-smile_2_7141E5B5.png" /> </font></p>
  <p><font size="3">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 </font><a href="https://twitter.com/toddklindt"><font size="3">@toddklindt.</font></a></p>
  <p><font size="3">tk</font></p>
  <p><font size="3">ShortURL: </font><a href="/FindO365Workflows"><font size="3">https://www.toddklindt.com/FindO365Workflows</font></a><font size="3"> </font></p>
  <p><font color="#ff0000" size="3">Edit (7/9/20): Edited to replace wrong tool name with SharePoint Modernization Scanner.</font></p>
  <p><font color="#ff0000" size="3">Edit (7/10/20): Edited to add command line syntax.</font></p>
<p><font color="#ff0000" size="3">Edit (7/27/20): Edited to add the 2.14.0.0 and later command line syntax.</font></p>
  <p><font size="3"></font></p>
  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=9\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=9&amp;RootFolder=*">SharePoint 2010</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=12\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=12&amp;RootFolder=*">SharePoint 2013</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=11\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=11&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_10_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_10_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_12_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_12_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_14_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_14_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_16_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_16_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_18_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_18_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_2_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_2_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_20_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_20_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_22_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_22_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_24_467BADA5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_24_467BADA5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_4_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_4_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_6_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_6_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_8_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_8_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_1_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_1_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_10_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_10_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_11_318A2B32.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_11_318A2B32.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_2_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_2_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_3_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_3_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_4_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_4_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_5_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_5_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_6_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_6_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_7_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_7_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_8_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_8_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_9_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/image_thumb_9_7141E5B5.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/wlEmoticon-smile_2_7141E5B5.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/873/wlEmoticon-smile_2_7141E5B5.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; SharePoint 2010; SharePoint 2013; Sharepoint</category>
      <pubDate>Thu, 09 Jul 2020 19:53:22 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=873</guid>
    </item>
    <item>
      <title>SharePoint 2010 and 2013 Workflows Kaput in Office 365</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=872</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE3F0EC69497242C5A0D8FC3179E274FD"><p><em style="font-size:medium">Workflow Retirement Series TOC​</em></p>
<p><em style="font-size:medium"></em><font size="3"><strong>Part 1 - </strong><a href="/blog/Lists/Posts/Post.aspx?ID=872"><strong>SharePoint 2010 and 2013 Workflows Kaput in Office 365</strong></a><strong> </strong><br /><font size="3">Part 2 - <a href="/blog/Lists/Posts/Post.aspx?ID=873">Finding All the SharePoint 2010 Workflows in SharePoint Online</a>        <br />Part 3 - <a href="/blog/Lists/Posts/Post.aspx?ID=874">Find Only the Active SharePoint 2010 Workflows in SharePoint Online</a>  <br /></font></font><span style="font-size:medium">Part 4 - </span><a href="/blog/Lists/Posts/Post.aspx?ID=877" style="font-size:medium">Use PowerShell to Work with SharePoint 2010 Workflow Scan</a><font size="3"><font size="3">  ​</font></font><font size="3"><br /></font></p>
<p><font size="3"><br /></font></p>
<p><font size="3">Hot off the presses! Today Microsoft announced the <a href="https://support.microsoft.com/en-us/office/sharepoint-2010-workflow-retirement-1ca3fff8-9985-410a-85aa-8120f626965f">SharePoint 2010 workflow retirement</a> 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:</font></p>
 <font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font><font size="3"></font>  <table cellspacing="0" cellpadding="2" border="1"><tbody>     <tr>       <td valign="top"><font size="3">SharePoint 2010 workflows turned off for new tenants</font></td>
        <td valign="center">         <p><font size="3">August 1, 2020</font></p>
       </td>
     </tr>
      <tr>       <td valign="top"><font size="3">SharePoint 2010 workflow turned off for ALL tenants</font></td>
        <td valign="top"><font size="3">November 1, 2020</font></td>
     </tr>
      <tr>       <td valign="top"><font size="3">SharePoint 2013 workflow turned off for new tenants</font></td>
        <td valign="top"><font size="3">November 1, 2020</font></td>
     </tr>
      <tr>       <td valign="top"><font size="3">SharePoint 2013 workflow turned off for ALL tenants</font></td>
        <td valign="top"><font size="3">TBD</font></td>
     </tr>
   </tbody></table>
 <font size="3"></font>  <p><font size="3"></font></p>
  <p><font size="3">The following built-in workflows will also be removed; Approvals, Collect Feedback, Collect Signatures, Classic pages publishing Approval, and Three-state.</font></p>
  <p><font size="3">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 <a href="https://flow.microsoft.com/en-us/">Power Automate</a> flows. If you’ve been putting it off, now is the time to get on it. You do, however, need to know <em>where</em> all of these workflows are in your tenant. Microsoft has a tool, the <a href="https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-scanner">SharePoint modernization scanner</a>, 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. </font></p>
  <p><font size="3">Let me know what you think about it. <font size="3">Let me know how this impacts you. The July 15th, 2020 episode of <a href="https://sympraxisconsulting.com/portfolio/ask-sympraxis/">Ask Sympraxis</a> will cover this topic. Join us. It’s free. It’ll be a hoot, and worth every penny you spend on it.</font></font></p>
  <p><font size="3">tk</font></p>
  <p><font size="3"><a href="/SP2010Workflows">https://www.toddklindt.com/SP2010Workflows</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=4\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=4&amp;RootFolder=*">SharePoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=4\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=4&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; SharePoint</category>
      <pubDate>Tue, 07 Jul 2020 02:37:36 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=872</guid>
    </item>
    <item>
      <title>Are you joining us for Ask Sympraxis? Why not?</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=871</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass422F7B7B08CE4231A449D215AB066445"><p><font size="3">Every couple of weeks me and my fellow Sympraxians get together on Wednesday for an open forum we call </font><a href="https://sympraxisconsulting.com/portfolio/ask-sympraxis/"><font size="3">Ask Sympraxis</font></a><font size="3">. Anyone can get on and chat with us. </font><a href="https://forms.office.com/Pages/ResponsePage.aspx?id=n5Q_Wrpwe0a5FbQP7q3Gfck1ipeJJgxJp5_R0ceZGz5UOVhCNFZUU0E1UExMM0NBQTVXNVA1SzVTOCQlQCN0PWcu"><font size="3">We take questions</font></a><font size="3"> 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 </font><a href="https://symp.info/AskSympraxisICal"><font size="3">add it to your calendar</font></a><font size="3">, or you can just </font><a href="https://symp.info/AskSympraxisMeeting"><font size="3">jump into the Teams meeting</font></a><font size="3"> the first and third Wednesday of the month at 11:30 Central Time. </font></p>  <p><font size="3">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.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: </font><a href="/AskSympraxis"><font size="3">https://www.toddklindt.com/AskSympraxis</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365</category>
      <pubDate>Mon, 01 Jun 2020 20:34:50 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=871</guid>
    </item>
    <item>
      <title>Using PowerShell to Find Power Apps that use the SharePoint Connector</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=870</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass3F285851CBBB4DA0BE4E5C37AD82F973"><p><font size="3">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.</font></p> <font size="3"></font>  <p><font size="3">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 <strike>Flow</strike> 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:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Get-AdminPowerApp | ForEach-Object { if (Get-AdminPowerAppConnectionReferences -EnvironmentName $(Get-PowerAppEnvironment).EnvironmentName -AppName $_.AppName | Where-Object -Property ConnectorName -EQ -Value &quot;shared_sharepointonline&quot;) {$_ | Select-Object DisplayName, @{Label=&quot;Owner&quot;;e={$_.Owner.displayName}},@{Label=&quot;Email&quot;;e={$_.Owner.userPrincipalName}}, AppName }}</font></p> </blockquote>  <p><font size="3">Here’s what it looks like when it runs:</font></p>  <p><a href="/blog/Lists/Posts/Attachments/870/image_2_10C3FD20.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/870/image_thumb_10C3FD20.png" width="643" height="204" /></a></p>  <p><font size="3">I have the following two Power Apps modules installed with these versions:</font></p> <font size="3"></font>  <p><font size="3">2.0.61 </font><a href="https://www.powershellgallery.com/packages/Microsoft.PowerApps.Administration.PowerShell"><font size="3">Microsoft.PowerApps.Administration.PowerShell</font></a><font size="3">      <br />1.0.9 </font><a href="https://www.powershellgallery.com/packages/Microsoft.PowerApps.PowerShell"><font size="3">Microsoft.PowerApps.PowerShell</font></a></p> <font size="3"></font>  <p><font size="3">(</font><a href="/blog/Lists/Posts/Post.aspx?ID=826"><font size="3">Full list of Office 365 PowerShell modules</font></a><font size="3">)</font></p> <font size="3"></font>  <p><font size="3">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. </font></p> <font size="3"></font>  <p><font size="3">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 </font><a href="https://urldefense.com/v3/__https:/powerapps.microsoft.com/en-us/blog/introducing-the-powerapps-center-of-excellence-starter-kit/__;!!KDurfCY!pcXXgcdGZ4xiC4LA_1tfWYSAUjmfKYooUnzfdf0hR3OlsyPLIWz6TR9-13tj8RmjBFPCTpZN$"><font size="3">Center of Excellence Starter Kit</font></a><font size="3"> has a way to get that information, but it’s a really big hammer for a nail this small. </font></p> <font size="3"></font>  <p><font size="3">This will work for any of the Connectors. You can use the following PowerShell to see all Connectors that are in use:</font></p>  <blockquote>   <p><font size="3" face="Consolas">Get-AdminPowerAppConnection | Select-Object ConnectorName</font></p> </blockquote>  <p><font size="3">That will give you the value you need to search for with the <font face="Consolas">Where-Object</font>. 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 </font><a href="https://www.youtube.com/watch?v=BPmCW1uXh38"><font size="3">PowerShell for PowerApps and Flow</font></a><font size="3"> video. It’s okay. I guess. In a pinch. </font></p> <font size="3"></font>  <p><font size="3">Enjoy.</font></p> <font size="3"></font>  <p><font size="3">tk</font></p> <font size="3"></font>  <p><font size="3">ShortUrl: </font><a href="/PoshFindPowerAppsConnectors"><font size="3">https://www.toddklindt.com/PoshFindPowerAppsConnectors</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/870/image_2_10C3FD20.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/870/image_2_10C3FD20.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/870/image_thumb_10C3FD20.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/870/image_thumb_10C3FD20.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Thu, 21 May 2020 16:26:48 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=870</guid>
    </item>
    <item>
      <title>Podcast 454 - Quarantine Beard</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=869</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass064718F32CF546C583ABF026EA4C9EF2"><p><font size="3">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.</font></p> <font size="3"></font>  <p><font size="3">Recorded 4/8/2020</font></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast454-QuarantineBeard.mp3"><font size="3">Audio File</font></a><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast454-QuarantineBeard.mp4"><font size="3">Video File</font></a><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="https://youtu.be/giC4JdUEr5k"><font size="3"><img title="Podcast 454 - Quarantine Beard (Time 0_24_14;21)" style="display:inline;background-image:none" border="0" alt="Podcast 454 - Quarantine Beard (Time 0_24_14;21)" src="/blog/Lists/Posts/Attachments/869/Podcast-454---Quarantine-Beard-Time-0_24_1421_3_75FF2472.png" width="244" height="139" /></font></a></p> <font size="3"></font>  <p><a href="https://youtu.be/giC4JdUEr5k"><font size="3">YouTube</font></a><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p> <font size="3"></font>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p> <font size="3"></font>  <p><font size="3">Running Time: 47:07</font></p> <font size="3"></font>  <p><u><font size="3">Links:</font></u></p> <font size="3"></font>  <p><font size="3">27:00 </font><a href="https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/sharepoint-mobile-app-will-now-allow-admins-to-customize-their/ba-p/1243066"><font size="3">SharePoint Mobile App Branding</font></a><font size="3">      <br />26:55 </font><a href="https://www.microsoft.com/en-us/microsoft-365/blog/2020/03/21/commitment-customers-microsoft-cloud-services-continuity/"><font size="3">Microsoft Monitoring Cloud Services</font></a><font size="3">      <br />40:03 </font><a href="http://ymp.info/AskSympraxis"><font size="3">Ask Sympraxis</font></a><font size="3">      <br />41:48 </font><a href="https://aka.ms/m365-community-docs"><font size="3">Microsoft 365 Community Content</font></a></p> <font size="3"></font>  <p><font size="3">ShortURL: </font><a href="/Podcast454"><font size="3">https://www.toddklindt.com/Podcast454</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/869/Podcast-454---Quarantine-Beard-Time-0_24_1421_3_75FF2472.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/869/Podcast-454---Quarantine-Beard-Time-0_24_1421_3_75FF2472.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 17 Apr 2020 17:55:05 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=869</guid>
    </item>
    <item>
      <title>Podcast 453 - Holes All Over My Walls</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=868</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass17C48E7E8A2940B88AD292FC6D6AB3A7"><p><font size="3">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.</font></p> <font size="3"></font>  <p><font size="3">Recorded 3/25/2020</font></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast453-HolesAllOverMyWalls.mp3"><font size="3">Audio File</font></a><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast453-HolesAllOverMyWalls.mp4"><font size="3">Video File</font></a><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="https://youtu.be/2mCIbHEiRUg"><font size="3"><a href="https://youtu.be/Lzevh2iK4Wo"><img title="Podcast 453 - Holes All Over My Walls (Time 0_23_11;07)" style="display:inline;background-image:none" border="0" alt="Podcast 453 - Holes All Over My Walls (Time 0_23_11;07)" src="/blog/Lists/Posts/Attachments/868/Podcast-453---Holes-All-Over-My-Walls-Time-0_23_1107_3_21383B1E.png" width="244" height="139" /></a></font></a></p> <font size="3"></font>  <p><font size="3"><a href="https://youtu.be/Lzevh2iK4Wo">YouTube</a></font><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p> <font size="3"></font>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p> <font size="3"></font>  <p><font size="3">Running Time: 39:36</font></p> <font size="3"></font>  <p><u><font size="3">Links:</font></u></p> <font size="3"></font>  <p><a href="https://intrazone.libsyn.com/crisis-management-and-remote-work"><font size="3">The Intrazone - Crisis Management and Remote Work</font></a><font size="3">      <br /></font><a href="https://www.eventbrite.com/o/teams-thursday-new-england-29043387479"><font size="3">Teams Thursday virtual events</font></a><font size="3">      <br /></font><a href="/blog/Lists/Posts/Post.aspx?ID=864"><font size="3">My own presence indicator</font></a><font size="3">      <br /></font><a href="https://jpda.dev/teams-presence-publisher"><font size="3">Teams Presence Publisher</font></a></p> <font size="3"></font>  <p><font size="3">ShortURL: </font><a href="/Podcast453"><font size="3">https://www.toddklindt.com/Podcast453</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/868/Podcast-453---Holes-All-Over-My-Walls-Time-0_23_1107_3_21383B1E.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/868/Podcast-453---Holes-All-Over-My-Walls-Time-0_23_1107_3_21383B1E.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 14 Apr 2020 20:20:07 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=868</guid>
    </item>
    <item>
      <title>Podcast 452 - Just Be Me</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=867</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass6BB76A6C31174A86B22BB2C1B186DBB9"><p><font size="3">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.</font></p> <font size="3"></font>  <p><font size="3">Recorded 3/11/2020</font></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast452-JustBeMe.mp3"><font size="3">Audio File</font></a><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="http://media.toddklindt.com/Netcast/Podcast452-JustBeMe.mp4"><font size="3">Video File</font></a><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p> <font size="3"></font>  <p><a href="https://youtu.be/DZ-XKy5wNGs"><font size="3"><img title="Podcast 452 - Just Be Me (Time 0_13_42;17)" style="display:inline;background-image:none" border="0" alt="Podcast 452 - Just Be Me (Time 0_13_42;17)" src="/blog/Lists/Posts/Attachments/867/Podcast-452---Just-Be-Me-Time-0_13_4217_3_4E9DCF80.png" width="244" height="139" /></font></a></p> <font size="3"></font>  <p><a href="https://youtu.be/DZ-XKy5wNGs"><font size="3">YouTube</font></a><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p> <font size="3"></font>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p> <font size="3"></font>  <p><font size="3">Running Time: 35:49</font></p> <font size="3"></font>  <p><u><font size="3">Links:</font></u></p> <font size="3"></font>  <p><font size="3">02:41 </font><a href="https://techcommunity.microsoft.com/t5/microsoft-onedrive-blog/onedrive-roadmap-roundup-january-2020/ba-p/1153467"><font size="3">&quot;People with Existing Access&quot; will be the default when sharing a file</font></a><font size="3">      <br />05:19 </font><a href="/blog/Lists/Posts/Post.aspx?ID=857"><font size="3">Installing Web Apps on Chromium Edge</font></a><font size="3">      <br />12:23 </font><a href="/blog/Lists/Posts/Post.aspx?ID=859"><font size="3">PowerShell 7 and a Whole Lot More</font></a><font size="3">      <br />15:00 </font><a href="/blog/Lists/Posts/Post.aspx?ID=826"><font size="3">Office 365 PowerShell Module Installs</font></a><font size="3">      <br />18:00 </font><a href="https://www.thomasmaurer.ch/2020/03/how-to-use-powershell-ise-mode-in-visual-studio-code/"><font size="3">How To Use PowerShell ISE Mode In Visual Studio Code</font></a><font size="3">      <br />23:43 </font><a href="https://www.thurrott.com/microsoft/231376/microsoft-teams-giving-away-paid-features-for-six-months-due-to-coronavirus"><font size="3">Microsoft Teams Giving Away Paid Features for Six Months Due to Coronavirus</font></a><font size="3">      <br />28:50 </font><a href="https://powerapps.microsoft.com/en-us/blog/crisis-communication-a-power-platform-template/"><font size="3">Crisis Communication Power App</font></a><font size="3">      <br />30:38 </font><a href="https://ts.la/todd68264"><font size="3">Free Supercharging for Tesla Model S purchases</font></a><font size="3">      <br />34:10 </font><a href="https://sharepointna.com/#%21/speaker/Todd%20Klindt/1313"><font size="3">SharePoint Conference</font></a><font size="3">      <br />34:35 </font><a href="https://techorama.be/"><font size="3">Techorama Belgium </font></a></p> <font size="3"></font>  <p><font size="3">ShortURL: </font><a href="/Podcast452"><font size="3">https://www.toddklindt.com/Podcast452</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/867/Podcast-452---Just-Be-Me-Time-0_13_4217_3_4E9DCF80.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/867/Podcast-452---Just-Be-Me-Time-0_13_4217_3_4E9DCF80.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 10 Apr 2020 18:08:04 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=867</guid>
    </item>
    <item>
      <title>Office 365 PowerShell with the Omaha SPUG</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=866</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass806035B5414D4CDAACF91256B581603D"><p><font size="3">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. </font></p>  <p><font size="3"><a href="/Shared%20Documents/OmahSPUG0420.ics">Here is an ICS file</a> to add the Teams meeting to your schedule. If you’re a crazy person and want to throw caution to the wind, </font><a href="/OmahaSPUG0420"><font size="3">here’s a direct link to the Teams meeting</font></a><font size="3"> itself. </font></p>  <p><font size="3">Thanks to David and Amber at the Omaha SPUG for inviting me. I appreciate it.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/OmahaSPUGtalk2020">https://www.toddklindt.com/OmahaSPUGtalk2020</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=23\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=23&amp;RootFolder=*">Speaking</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell; Speaking</category>
      <pubDate>Wed, 01 Apr 2020 18:26:55 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=866</guid>
    </item>
    <item>
      <title>Podcast 451 - Evaporated from Both of our Memories</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=865</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass99796600C53B4682B982ED2657C846A7"><div class="ExternalClass3218D401B15C46469D4653A433B52444 ms-rteFontSize-3"><p>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.</p>
  <p>Recorded 2/19/2020</p>
  <p><a href="http://media.toddklindt.com/Netcast/Podcast451-EvaporatedfromBothofourMemories.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" alt="" /></a></p>
  <p><a href="http://media.toddklindt.com/Netcast/Podcast451-EvaporatedfromBothofourMemories.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" alt="" /></a></p>
  <p><a href="https://youtu.be/2nOBfdcwPv4"><img title="title clip" border="0" alt="title clip" src="/blog/Lists/Posts/Attachments/865/title-clip_3_0CC9B41B.png" width="244" height="139" style="display:inline;background-image:none" /></a> </p>
  <p><a href="https://youtu.be/2nOBfdcwPv4">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>
  <p><a href="/iTunes">Subscribe in iTunes</a></p>
  <p>Running Time: 43:15</p>
  <p><u>Links:</u></p>
  <p>04:20 <a href="https://www.helloitsliam.com/2020/02/18/un-sharepoint-hack-should-i-worry/">UN SharePoint Hack. Should I worry?</a>    <br />28:10 <a href="https://www.thurrott.com/cloud/office-365/230222/microsofts-unified-office-app-for-android-now-available-to-everyone">Microsoft’s Unified Office App for Android Now Available to Everyone</a>    <br />31:55 <a href="https://www.windowscentral.com/microsoft-your-phone-and-samsung-galaxy-z-flip">Samsung Galaxy Z Flip, Microsoft Your Phone could change the way you use mobile tech</a></p>
  <p>ShortURL: <a href="/Podcast451">https://www.toddklindt.com/Podcast451</a></p></div>
</div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/865/title-clip_3_0CC9B41B.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/865/title-clip_3_0CC9B41B.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 27 Mar 2020 18:52:26 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=865</guid>
    </item>
    <item>
      <title>How to Keep Unwanted Visitors out of my Basement Office</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=864</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1367444F01824E76B62E2F7BDB3296D2"><p><font size="3">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.</font></p>
  <p><font size="3"><a href="/blog/Lists/Posts/Attachments/864/20200320_141751_2_2E1219CF.jpg"><img title="20200320_141751" border="0" alt="20200320_141751" src="/blog/Lists/Posts/Attachments/864/20200320_141751_thumb_2E1219CF.jpg" width="381" height="287" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">Come on down. And…</font></p>
  <p><font size="3"><a href="/blog/Lists/Posts/Attachments/864/20200320_141733_2_2E1219CF.jpg"><img title="20200320_141733" border="0" alt="20200320_141733" src="/blog/Lists/Posts/Attachments/864/20200320_141733_thumb_2E1219CF.jpg" width="378" height="284" style="display:inline;background-image:none" /></a></font> </p>
  <p><font size="3">You shall not pass!</font></p>
  <p>   </p>
<p><font size="3">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. </font></p>
    <p>     </p>
<p><font size="3">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, <a href="https://amzn.to/2UjWjIS">Nexlux LED Strip Lights.</a> If you want to put your own package together you’ll need three pieces; a power supply, <a href="https://amzn.to/3dsrHwl">a controller</a>, and an LED light strip. You’ll find a nearly endless supply of combinations of those on Amazon. I used <a href="https://amzn.to/2JfL4Lg">double-sided tape</a> 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. </font></p>
      <p><font size="3">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.</font></p>
      <p><font size="3">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 <a href="https://amzn.to/3aoncRy">smart plug</a> 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 <a href="https://www.amazon.com/s?k=wemo+smart+plug&amp;i=arts-crafts&amp;crid=3VNU3WJLH3N8C&amp;sprefix=wemo+%2carts-crafts%2c160&amp;ref=nb_sb_ss_fb_1_5">Wemo smart plugs</a> from Belkin and they’ve treated me pretty well. They also integrate with <a href="https://ifttt.com/">IFTTT</a> so I can have them flash a lamp when the <a href="https://www.myq.com/">garage door opens</a>, fun things like that. </font></p>
      <p><font size="3">If this article was interesting, let me know. I’ll post some of my other home automation projects.</font></p>
<p><font size="3">I've seen a couple of blog posts of people that have done this better than I have. Check out <a href="https://www.sharepointsiren.com/2020/04/wfh-hack-smart-busy-lights/?fbclid=IwAR1PvrKNMkd87pSp9242cGGkny5cJGRPzqElGlkuGDIubR5Fxx8kWtaYYbQ">April Dunham's post​</a> on it and also <a href="https://www.eliostruyf.com/diy-building-busy-light-show-microsoft-teams-presence/">Elio Struyf's</a>. </font></p>
      <p><font size="3">tk</font></p>
      <p><font size="3">ShortURL: <a href="/SmartBusyLight">https://www.toddklindt.com/SmartBusyLight</a> </font></p>
<p></p>
<p></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=5\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=5&amp;RootFolder=*">Tech Stuff</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=22\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=22&amp;RootFolder=*">IoT</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=4\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=4&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141733_2_2E1219CF.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141733_2_2E1219CF.jpg</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141733_thumb_2E1219CF.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141733_thumb_2E1219CF.jpg</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141751_2_2E1219CF.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141751_2_2E1219CF.jpg</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141751_thumb_2E1219CF.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/864/20200320_141751_thumb_2E1219CF.jpg</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Tech Stuff; IoT</category>
      <pubDate>Wed, 25 Mar 2020 21:44:57 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=864</guid>
    </item>
    <item>
      <title>Podcast 450 - The Lost Episodes</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=863</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD3A4747CB2164BFE9BC7D8DC278AF7CF"><p><font size="3">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.</font></p>  <p><font size="3">Recorded 2/12/2020</font></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast450-TheLostEpisodes.mp3">Audio File</a></font><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast450-TheLostEpisodes.mp4">Video File</a></font><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><a href="https://youtu.be/aqxwa5ioixA"><img title="Podcast 450 - The Lost Episodes (Time 0_03_36;17)" style="display:inline;background-image:none" border="0" alt="Podcast 450 - The Lost Episodes (Time 0_03_36;17)" src="/blog/Lists/Posts/Attachments/863/Podcast-450---The-Lost-Episodes-Time-0_03_3617_3_73BAB722.png" width="244" height="139" /></a></p>  <p><font size="3"><a href="https://youtu.be/aqxwa5ioixA">YouTube</a></font><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p>  <p><font size="3">Running Time: 46:22</font></p>  <p><u><font size="3">Links:</font></u></p>  <p><font size="3">22:55 </font><a href="https://www.zdnet.com/article/microsoft-backtracks-on-bing-jacking-chrome-with-its-microsoft-search-extension/"><font size="3">Microsoft relented on Bing-Jacking</font></a>    <br /><font size="3">36:45 </font><a href="https://youtu.be/2svOtXaD3gg"><font size="3">Home Stallone [DeepFake] </font></a></p>  <p><font size="3">ShortURL: </font><font size="3"><a href="/Podcast450">https://www.toddklindt.com/Podcast450</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/863/Podcast-450---The-Lost-Episodes-Time-0_03_3617_3_73BAB722.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/863/Podcast-450---The-Lost-Episodes-Time-0_03_3617_3_73BAB722.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 25 Mar 2020 19:35:20 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=863</guid>
    </item>
    <item>
      <title>Podcast 449 - One Big Hot Blob</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=862</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF4CFD919F4194777938237D3ECE46325"><p><font size="3">ChrEdge, PowerShell, and the Super Bowl top the topics on this week's Podcast.</font></p>  <p><font size="3">Recorded 2/5/2020</font></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast449-OneBigHotBlob.mp3">Audio File</a></font><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast449-OneBigHotBlob.mp4">Video File</a></font><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><a href="https://youtu.be/k4i9ZrH_vG4"><img title="Podcast 449 - One Big Hot Blob (Time 0_31_27;22)" style="display:inline;background-image:none" border="0" alt="Podcast 449 - One Big Hot Blob (Time 0_31_27;22)" src="/blog/Lists/Posts/Attachments/862/Podcast-449---One-Big-Hot-Blob-Time-0_31_2722_3_498DD843.png" width="244" height="139" /></a></p>  <p><font size="3"><a href="https://youtu.be/k4i9ZrH_vG4">YouTube</a></font><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p>  <p><font size="3">Running Time: 44:07</font></p>  <p><u><font size="3">Links:</font></u></p>  <p><a href="https://support.office.com/en-us/article/live-presentations-039aa2cc-67fa-4fb5-9677-46ed8a060c8c"><font size="3">PowerPoint Live Presentations</font></a>    <br /><a href="https://docs.microsoft.com/en-us/sharepoint/disable-auto-modernization-classic-home-pages"><font size="3">SharePoint Continues to push you to Modern</font></a>    <br /><a href="https://www.youtube.com/watch?v=YgWT9mJKEzk"><font size="3">Intro to Microsoft Forms</font></a></p>  <p><font size="3">ShortURL: </font><font size="3"><a href="/Podcast449">https://www.toddklindt.com/Podcast449</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/862/Podcast-449---One-Big-Hot-Blob-Time-0_31_2722_3_498DD843.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/862/Podcast-449---One-Big-Hot-Blob-Time-0_31_2722_3_498DD843.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 24 Mar 2020 18:51:39 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=862</guid>
    </item>
    <item>
      <title>Sorting Hash Tables in PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=861</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass47F8E9D993CC4CCCB65232F9559B0F5A"><p><font size="3">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:</font></p> <font size="3"></font>  <blockquote><font size="3"></font>    <p><font size="3" face="Consolas">Connect-PnPOnline -Url </font><a href="https://m365x246038.sharepoint.com/sites/ContosoWeb1"><font size="3" face="Consolas">https://m365x246038.sharepoint.com/sites/ContosoWeb1</font></a><font size="3" face="Consolas">        <br />(Get-PnPListItem -List &quot;SitePages&quot; -Id 5).FieldValues</font></p> </blockquote>  <p><a href="/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_139FA5E4.png"><img title="SNAGHTML155621a" style="display:inline;background-image:none" border="0" alt="SNAGHTML155621a" src="/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_thumb_139FA5E4.png" width="522" height="369" /></a></p>  <p><font size="3">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. </font></p> <font size="3"></font>  <p><font size="3">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. </font></p> <font size="3"></font>  <p><font size="3">The secret is the <font face="Consolas">GetEnumerator()</font> Method of the Hash Table. This got me what I was looking for:</font></p> <font size="3"></font>  <blockquote><font size="3"></font>    <p><font size="3" face="Consolas">(Get-PnPListItem -List &quot;SitePages&quot; -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key</font></p> </blockquote>  <p><a href="/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_139FA5E4.png"><img title="SNAGHTML17b6b87" style="display:inline;background-image:none" border="0" alt="SNAGHTML17b6b87" src="/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_thumb_139FA5E4.png" width="522" height="369" /></a></p>  <p><font size="3">Isn’t that much better?</font></p> <font size="3"></font>  <p><font size="3">Once you introduce .GetEnumerator() into the picture you can also get crazy with things like Where-Object, like this:</font></p> <font size="3"></font>  <blockquote><font size="3"></font>    <p><font size="3"><font face="Consolas">(Get-PnPListItem -List &quot;SitePages&quot; -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key  | Where-Object -Property <strong>Key</strong> -Like -Value &quot;*mod*&quot;</font> </font></p>   <font size="3"></font></blockquote> <font size="3"></font>  <p><font size="3">or </font></p> <font size="3"></font>  <blockquote><font size="3"></font>    <p><font size="3" face="Consolas">(Get-PnPListItem -List &quot;SitePages&quot; -Id 5).FieldValues.GetEnumerator() | Sort-Object -Property Key  | Where-Object -Property <strong>Value</strong> -Like -Value &quot;true&quot;</font></p> </blockquote>  <p><a href="/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_139FA5E4.png"><img title="SNAGHTML1825780" style="display:inline;background-image:none" border="0" alt="SNAGHTML1825780" src="/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_thumb_139FA5E4.png" width="515" height="247" /></a></p>  <p><font size="3">Normally you would put the <font face="Consolas">Where-Object</font> before the <font face="Consolas">Sort-Object</font> so that the Sort has fewer items to churn through. </font></p> <font size="3"></font>  <p><font size="3">While I did this in the context of a hash of SharePoint list item properties, it’s applicable to all PowerShell hash tables. </font></p> <font size="3"></font>  <p><font size="3">Happy PowerShelling.</font></p> <font size="3"></font>  <p><font size="3">tk</font></p> <font size="3"></font>  <p><font size="3">ShortURL: </font><a href="/PoshSortHashTables"><font size="3">https://www.toddklindt.com/PoshSortHashTables</font></a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_139FA5E4.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_thumb_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML155621a_thumb_139FA5E4.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_139FA5E4.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_thumb_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML17b6b87_thumb_139FA5E4.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_139FA5E4.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_thumb_139FA5E4.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/861/SNAGHTML1825780_thumb_139FA5E4.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Mon, 23 Mar 2020 21:19:41 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=861</guid>
    </item>
    <item>
      <title>Podcast 448 - Never Go Barefoot</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=860</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassB17879FE852243CEADF66C16472BF4AB"><p class="ms-rteFontSize-3">Chromium Edge, Windows 7 is dead, and everyone should love Microsoft Forms.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">Recorded 1/15/2020</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3"><a href="http://media.toddklindt.com/Netcast/Podcast448-NeverGoBarefoot.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" alt="" /></a></p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3"><a href="http://media.toddklindt.com/Netcast/Podcast448-NeverGoBarefoot.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" alt="" /></a></p>
  <p><a href="https://youtu.be/Y_CIXtnI8KE"><img title="Podcast 448 - Never Go Barefoot (Time 0_01_43;28)" border="0" alt="Podcast 448 - Never Go Barefoot (Time 0_01_43;28)" src="/blog/Lists/Posts/Attachments/860/Podcast-448---Never-Go-Barefoot-Time-0_01_4328_3_2E85BC38.png" width="244" height="139" style="display:inline;background-image:none" /></a> </p>
  <p class="ms-rteFontSize-3"><a href="https://youtu.be/Y_CIXtnI8KE">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3"><a href="/iTunes">Subscribe in iTunes</a></p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">Running Time: 40:05</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3"><u>Links:</u></p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">16:54 <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2020/01/14/windows-7-support-ends-today-and-windows-10-is-better-than-ever/">Windows 7 is dead</a></p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">ShortURL: <a href="/Podcast448">https://www.toddklindt.com/Podcast448</a></p></div>
</div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/860/Podcast-448---Never-Go-Barefoot-Time-0_01_4328_3_2E85BC38.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/860/Podcast-448---Never-Go-Barefoot-Time-0_01_4328_3_2E85BC38.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 23 Mar 2020 14:52:50 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=860</guid>
    </item>
    <item>
      <title>PowerShell 7 and a Whole Lot More</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=859</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass378A7808D0964932A4D65892F09066A4"><p><font size="3">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. </font></p>  <p><font size="3"><a href="https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/">PowerShell 7 is released</a> (<a href="https://github.com/PowerShell/PowerShell/releases">Download</a>)</font></p>  <p><font size="3"><a href="https://devblogs.microsoft.com/powershell/visual-studio-code-for-powershell-7/">PowerShell Extension for VS Code</a> (<a href="https://docs.microsoft.com/en-us/powershell/scripting/components/vscode/using-vscode?view=powershell-7">Setup instructions</a>) </font></p>  <p><font size="3">While you’re downloading all that PowerShell goodness you might as well include this:</font></p>  <p><font size="3"><a href="https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701?activetab=pivot:overviewtab">Windows Terminal Preview</a></font></p>  <p><font size="3">As always you can go to my blog post <a href="/blog/Lists/Posts/Post.aspx?ID=826">Office 365 PowerShell Module Installs</a> to see which PowerShell modules I use with Office 365.</font></p>  <p><font size="3">Happy PowerShelling.</font></p>  <p><font size="3">tk</font></p>  <p><font size="3">ShortURL: <a href="/PowerShell7andmore">https://www.toddklindt.com/PowerShell7andmore</a> </font></p>  <p><font size="3"></font></p>  <p><font size="3"></font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell</category>
      <pubDate>Thu, 05 Mar 2020 20:28:32 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=859</guid>
    </item>
    <item>
      <title>Podcast 447 - Bob's Smarter than Us</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=858</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassAE3A59BF55794B89AFF43F21860260D8"><p><font size="3">It's the first podcast of 2020. Todd and Shane start off the new year talking about Chrome, Teams apps, and foldable PCs.</font></p>  <p><font size="3">Recorded 1/8/2020</font></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast447-Bob-sSmarterthanUs.mp3">Audio File</a></font><font size="3"> </font><a href="/netcast/MP3/feed-mp3.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><font size="3"><a href="http://media.toddklindt.com/Netcast/Podcast447-Bob-sSmarterthanUs.mp4">Video File</a></font><font size="3"> </font><a href="/netcast/WMVSmall/feed-wmv.rss"><font size="3"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></font></a></p>  <p><a href="https://www.youtube.com/watch?v=6TNGtC0N3Oc"><img title="Podcast 447 - Bob's Smarter than Us (Time 0_24_17;03)" style="display:inline;background-image:none" border="0" alt="Podcast 447 - Bob's Smarter than Us (Time 0_24_17;03)" src="/blog/Lists/Posts/Attachments/858/Podcast-447---Bobs-Smarter-than-Us-Time-0_24_1703_3_1DEEC869.png" width="244" height="139" /></a></p>  <p><font size="3"><a href="https://www.youtube.com/watch?v=6TNGtC0N3Oc">YouTube</a></font><font size="3"> (</font><a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast"><font size="3">Subscribe</font></a><font size="3">)</font></p>  <p><a href="/iTunes"><font size="3">Subscribe in iTunes</font></a></p>  <p><font size="3">Running Time: 45:40</font></p>  <p><u><font size="3">Links:</font></u></p>  <p><a href="https://support.microsoft.com/en-us/help/4522904/potential-disruption-to-customer-websites-in-latest-chrome"><font size="3">Potential disruption to customer websites and Microsoft products and services in Chrome version 79 and later</font></a>    <br /><a href="https://bob1german.com/2020/01/06/teams-apps-with-sharepoint1/"><font size="3">Building Microsoft Teams apps with SharePoint Pages</font></a>    <br /><a href="https://www.thurrott.com/hardware/227139/lenovo-joins-foldable-pc-party-with-new-thinkpad-x1-fold-device#"><font size="3">Lenovo Joins Foldable PC Party With New ThinkPad X1 Fold Device</font></a>    <br /><a href="https://www.usatoday.com/story/travel/airline-news/2020/01/07/ces-2020-delta-ceo-announces-tech-no-free-wifi-yet/2804465001/"><font size="3">Delta CEO unveils cool new travel tech at CES</font></a>    <br /><a href="https://youtu.be/UaBmVUQx_Fk"><font size="3">PowerApps Delegation and the 500 item limit</font></a>    <br /><a href="http://www.lorigowin.com/sitepages/tkcharity.aspx"><font size="3">TK Charity</font></a></p>  <p><font size="3">ShortURL: </font><font size="3"><a href="/Podcast447">https://www.toddklindt.com/Podcast447</a> </font></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/858/Podcast-447---Bobs-Smarter-than-Us-Time-0_24_1703_3_1DEEC869.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/858/Podcast-447---Bobs-Smarter-than-Us-Time-0_24_1703_3_1DEEC869.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Thu, 20 Feb 2020 21:53:54 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=858</guid>
    </item>
    <item>
      <title>Installing Web Apps on Chromium Edge</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=857</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF541D47C8BBA4CE0B84C28F20425E5B5"><p class="ms-rteFontSize-3">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. </p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">And then Edge didn’t suck anymore.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">In December of 2018 Microsoft announced that it was going to <a href="https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/">move to the Chromium engine for Edge</a>. 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 <a href="https://en.wikipedia.org/wiki/Chromium_%28web_browser%29">Chromium engine</a>, obviously, so what on Earth could Edge possibly offer me? I was about to find out.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">Last year at Ignite <a href="https://sympmarc.com/">Marc</a> 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. </p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">Then it grew on me.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">The first thing I really liked about ChrEdge was not only did it have the <a href="/blog/Lists/Posts/Post.aspx?ID=791">profiles that I used constantly in Chrome</a>, it allowed me to set up the Sync for those profiles <a href="/blog/Lists/Posts/Post.aspx?ID=852">with Microsoft accounts</a>. 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.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">And then it did the undoable, it made me hate Microsoft Teams less!</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">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. </p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">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 <a href="https://teams.microsoft.com/">https://teams.microsoft.com/</a> 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.</p>
<span class="ms-rteFontSize-3">
  </span><p><span class="ms-rteFontSize-3">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!”</span> </p>
  <p><a href="/blog/Lists/Posts/Attachments/857/image_2_11103852.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/857/image_thumb_11103852.png" width="594" height="215" style="display:inline;background-image:none" /></a> </p>
  <p class="ms-rteFontSize-3">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.</p>
  <p><a href="/blog/Lists/Posts/Attachments/857/image_6_11103852.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/857/image_thumb_2_11103852.png" width="428" height="78" style="display:inline;background-image:none" /></a> </p>
  <p class="ms-rteFontSize-3">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. </p>
<span class="ms-rteFontSize-3">
  </span><p><a href="/blog/Lists/Posts/Attachments/857/image_8_11103852.png" class="ms-rteFontSize-3"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/857/image_thumb_3_11103852.png" width="640" height="349" style="display:inline;background-image:none" /></a> </p>
  <p class="ms-rteFontSize-3">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. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/857/wlEmoticon-smile_2_11103852.png" /> 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. &lt;slow clap&gt;</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">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 <a href="https://outlook.office.com/mail/inbox">Outlook</a>, <a href="https://www.onenote.com/notebooks?auth=2&amp;nf=1">OneNote</a>, 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 <a href="https://www.howtogeek.com/342121/what-are-progressive-web-apps/">Progressive Web Apps</a>, PWAs. Many companies are taking part in this, not just Microsoft. Microsoft does, though, offer <a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps/">some guidance on making PWAs for Windows</a>.</p>
<span class="ms-rteFontSize-3">
  </span><p><span class="ms-rteFontSize-3">Since PWAs aren’t simply a Microsoft concoction you can find them all over the Internet. </span><a href="https://www.wikipedia.org/" class="ms-rteFontSize-3">Wikipedia</a><span class="ms-rteFontSize-3">, </span><a href="https://www.disneyplus.com/" class="ms-rteFontSize-3">Disney+</a><span class="ms-rteFontSize-3">, </span><a href="https://smile.amazon.com/" class="ms-rteFontSize-3">Amazon</a><span class="ms-rteFontSize-3">, and </span><a href="https://slack.com/" class="ms-rteFontSize-3">Slack</a><span class="ms-rteFontSize-3"> among others have the option of installing a web based PWA.</span> </p>
  <p><a href="/blog/Lists/Posts/Attachments/857/image_12_11103852.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/857/image_thumb_5_11103852.png" width="569" height="324" style="display:inline;background-image:none" /></a> </p>
  <p><span class="ms-rteFontSize-3">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 &amp; Features” or at edge://apps in ChrEdge.</span> </p>
  <p><a href="/blog/Lists/Posts/Attachments/857/image_10_11103852.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/857/image_thumb_4_11103852.png" width="550" height="485" style="display:inline;background-image:none" /></a> </p>
  <p class="ms-rteFontSize-3">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.</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">tk</p>
<span class="ms-rteFontSize-3">
  </span><p class="ms-rteFontSize-3">ShortURL: <a href="/ChrEdgeTeams">https://www.toddklindt.com/ChrEdgeTeams</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=5\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=5&amp;RootFolder=*">Tech Stuff</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=19\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=19&amp;RootFolder=*">Windows 10</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_10_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_10_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_12_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_12_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_2_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_2_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_6_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_6_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_8_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_8_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_2_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_2_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_3_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_3_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_4_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_4_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_5_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/image_thumb_5_11103852.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/wlEmoticon-smile_2_11103852.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/857/wlEmoticon-smile_2_11103852.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Tech Stuff; Office 365; Windows 10</category>
      <pubDate>Wed, 19 Feb 2020 21:22:25 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=857</guid>
    </item>
    <item>
      <title>Podcast 446 - Cascade of Events</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=856</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass46D48AAC9BF044C6AC139BD97C19EC2B"><p>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.</p>  <p>Recorded 12/18/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast446-CascadeofEvents.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast446-CascadeofEvents.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/AWCHsmZsn4E"><img title="Podcast 446 - Cascade of Events (Time 0_19_35;22)" style="display:inline;background-image:none" border="0" alt="Podcast 446 - Cascade of Events (Time 0_19_35;22)" src="/blog/Lists/Posts/Attachments/856/Podcast-446---Cascade-of-Events-Time-0_19_3522_3_71B0506C.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/AWCHsmZsn4E">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 46:49</p>  <p><u>Links:</u></p>  <p>05:50 <a href="https://slate.com/podcasts/lexicon-valley">Lexicon Valley</a>    <br />05:51 <a href="https://gretchenmcculloch.com/tag/lexicon-valley/">Because Internet</a>    <br />14:37 <a href="https://www.sharepointfest.com/">SPFest in Chicago</a>    <br />17:48 <a href="https://www.syskit.com/products/insights/">SysKit Insights</a>    <br />24:17 <a href="https://tv.youtube.com/">YouTube TV</a>    <br />36:50 <a href="https://github.com/microsoftgraph/msgraph-sdk-powershell/">Graph PowerShell</a>    <br />40:35 <a href="https://youtu.be/3QaiM8SeWfM">Save files from Power Apps directly to a SharePoint Document Library</a>    <br />42:42 <a href="http://www.lorigowin.com/sitepages/tkcharity.aspx">TK Charity</a></p>  <p>ShortURL: <a href="/Podcast446">https://www.toddklindt.com/Podcast446</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/856/Podcast-446---Cascade-of-Events-Time-0_19_3522_3_71B0506C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/856/Podcast-446---Cascade-of-Events-Time-0_19_3522_3_71B0506C.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 19 Feb 2020 20:15:31 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=856</guid>
    </item>
    <item>
      <title>Podcast 445 - Meat and Potatoes</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=855</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass20510360AF244906922BA8C5CC2FBD5C"><p>Shane's out today so it's 100% Todd as he talks about OneNote, PowerShell, and how Jeff Snover explains the Microsoft Graph.    <br /></p>  <p>Recorded 11/20/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast445-MeatandPotatoes.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast445-MeatandPotatoes.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/R-JciEdU9iA"><img title="Podcast 445 - Meat and Potatoes (Time 0_17_41;27)" style="display:inline;background-image:none" border="0" alt="Podcast 445 - Meat and Potatoes (Time 0_17_41;27)" src="/blog/Lists/Posts/Attachments/855/Podcast-445---Meat-and-Potatoes-Time-0_17_4127_3_2508DE9E.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/R-JciEdU9iA">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 33:22</p>  <p><u>Links:</u></p>  <p><a href="https://www.syskit.com/blog/syskit-point-office-365-governance">SysKit Point is out!</a>    <br /><a href="https://docs.microsoft.com/en-us/microsoft-365/commerce/subscriptions/self-service-purchase-faq">Changes to PowerApps self-service policy</a>    <br /><a href="https://www.windowscentral.com/microsoft-merging-modern-features-back-onenote-2016">Microsoft merging modern features into OneNote 2016</a>    <br /><a href="https://azure.microsoft.com/en-us/updates/powershell-support-in-azure-functions-is-now-generally-available/">PowerShell support in Azure Functions is now generally available</a>    <br /><a href="https://www.youtube.com/watch?v=uuiTR8r27Os">Jeff Snover explains the substrate and the Graph for dummies</a>    <br /><a href="/blog/Lists/Posts/Post.aspx?ID=850">Reversing Arrays in PowerShell blog post</a>    <br /><a href="/blog/Lists/Posts/Post.aspx?ID=851">Finding Missing Properties in PnP PowerShell</a>    <br /><a href="http://www.lorigowin.com/sitepages/tkcharity.aspx">TK Charity</a></p>  <p>ShortURL: <a href="/Podcast445">https://www.toddklindt.com/Podcast445</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/855/Podcast-445---Meat-and-Potatoes-Time-0_17_4127_3_2508DE9E.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/855/Podcast-445---Meat-and-Potatoes-Time-0_17_4127_3_2508DE9E.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 18 Feb 2020 14:37:59 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=855</guid>
    </item>
    <item>
      <title>Podcast 444 - Meh, at Best</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=854</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass334732B901A14F0FBD32451F043E5A6C"><p>Shane and Todd talk about PowerApps, cord cutting, and Azure this week.</p>  <p>Recorded 10/30/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast444-Meh-atBest.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast444-Meh-atBest.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/4Y6fkwhqV8I"><img title="Podcast 444 - Meh, at Best (Time 0_17_18;12)" style="display:inline;background-image:none" border="0" alt="Podcast 444 - Meh, at Best (Time 0_17_18;12)" src="/blog/Lists/Posts/Attachments/854/Podcast-444---Meh-at-Best-Time-0_17_1812_3_02DD0902.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/4Y6fkwhqV8I">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 47:14</p>  <p><u>Links:</u></p>  <p><a href="https://training.powerapps911.com/courses/video-library?utm_source=thinkific-admin&amp;utm_medium=social&amp;utm_campaign=social-share">Curated PowerApps content</a>    <br /><a href="https://blog.us.playstation.com/2019/10/29/sony-interactive-entertainment-to-shut-down-playstation-vue/">Sony kills Playstation Vue</a>    <br /><a href="https://www.hmnow.com/prices-membership">Hallmark Movies Now</a>    <br /><a href="https://register.gotowebinar.com/register/8081171172958600971">Office 365 User Offboarding Done Right</a></p>  <p>ShortURL: <a href="/Podcast444">https://www.toddklindt.com/Podcast444</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/854/Podcast-444---Meh-at-Best-Time-0_17_1812_3_02DD0902.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/854/Podcast-444---Meh-at-Best-Time-0_17_1812_3_02DD0902.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 14 Feb 2020 17:14:29 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=854</guid>
    </item>
    <item>
      <title>I’m speaking at the SharePoint Conference 2020! Yippee!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=853</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass4BEA37EE156D4FCEA3C4DEE087BCD36D"><p>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:</p>
  <p><a href="/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_2_2507004C.jpg"><img title="SPC_2020_SpeakerBanners_KLINDT" border="0" alt="SPC_2020_SpeakerBanners_KLINDT" src="/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_thumb_2507004C.jpg" width="362" height="205" style="display:inline;background-image:none" /></a> </p>
  <p>The <a href="https://sharepointna.com/#%21/">mighty SharePoint Conference</a> is May 19-21, 2020 at the MGM Grand in Las Vegas. </p>
  <p>I’m doing two sessions, <a href="https://sharepointna.com/#%21/session/PowerShell%2c%20a%20Microsoft%20365%20Admin%27s%20Best%20Friend/4334">PowerShell, a Microsoft 365 Admin's Best Friend</a> and <a href="https://sharepointna.com/#%21/session/Automating%20and%20Standardizing%20Site%20Creation%20with%20Site%20Designs%20and%20Site%20Scripts/4335">Automating and Standardizing Site Creation with Site Designs and Site Scripts.</a> Both will be amazing, I’m sure. </p>
  <p>If you haven’t signed up for SPC yet, first, shame on you! Second, there are still spots. You can <a href="https://sharepointna.com/#%21/register">sign up here</a>. 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 <a href="https://medium.com/%40mikegilronan">Mike</a>, he’s a bit prickly. We’re working on him. <a href="https://sympmarc.com/">Marc</a> and <a href="https://julieturner.net/">Julie</a> are also presenting sessions, so as long they don’t conflict with mine. </p>
  <p><a href="https://spdcp.com/">Derek</a> and <a href="https://emilymancini.com/">Emily</a> will also be there, so say Hi to them if you see them.</p>
  <p>See you there,</p>
  <p>tk</p>
  <p>ShortURL: <a href="/SPC20Yippee">https://www.toddklindt.com/SPC20Yippee</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_2_2507004C.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_2_2507004C.jpg</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_thumb_2507004C.jpg">https://www.toddklindt.com/blog/Lists/Posts/Attachments/853/SPC_2020_SpeakerBanners_KLINDT_thumb_2507004C.jpg</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; Sharepoint; PowerShell</category>
      <pubDate>Thu, 16 Jan 2020 23:21:04 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=853</guid>
    </item>
    <item>
      <title>How to Connect to Multiple Office 365 Accounts in Edge, without Losing Your Damned Mind</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=852</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass516B1419184F471A8C86E4836D984E62"><p>In two previous blog posts I cover how to easily connect to <a href="/blog/Lists/Posts/Post.aspx?ID=800">Office 365 with multiple accounts in PowerShell</a>, and <a href="/blog/Lists/Posts/Post.aspx?ID=791">in Chrome</a>. Those techniques still work great and I use them daily. </p>
  <p>Microsoft will soon be releasing <a href="https://www.microsoftedgeinsider.com/">a new version of the much maligned Edge Browser</a>. The new version will be based on the <a href="https://www.chromium.org/Home">Chromium engine</a>, 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, <span style="font-size:8pt">to manage the Profiles, or click the Profile icon in the upper right corner of the browser. </span></p>
<p></p>
  <p>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.</p>
  <p>tk</p>
  <p>ShortURL: <a href="/ChrEdgeProfiles">https://www.toddklindt.com/ChrEdgeProfiles</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=4\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=4&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365</category>
      <pubDate>Wed, 08 Jan 2020 23:05:00 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=852</guid>
    </item>
    <item>
      <title>Finding Missing Properties in PnP PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=851</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass4FB2254A314C4B4C885375FCECCE3D14"><p>I’ve recently been working with a customer migrating some content from one SharePoint Online Site Collection to another. They have <strong>a lot</strong> 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 <a href="https://docs.microsoft.com/en-us/powershell/scripting/components/vscode/using-vscode?view=powershell-6">VS Code</a>) and started noodling.</p>  <p>Whenever I’m trying something new in PowerShell I have a standard process. I do a <font face="Consolas">Get-Command</font> to see if there’s a cmdlet that does what I need. In this case there were four cmdlets that piqued my interest, <font face="Consolas">Add-PnPView, Get-PnPView, Remove-PnPView</font>, and <font face="Consolas">Set-PnPView</font>. The process seemed super easy, do a <font face="Consolas">Get-PnPView</font> on the source View, gobble up all the details, then spit them back into<font face="Consolas"> Add-PnPView</font> on the other site collection. Easy Peasy. Until it isn’t. </p>  <p>Here’s what the view looked like, roughly.</p>  <p><a href="/blog/Lists/Posts/Attachments/851/image_2_5B6341BE.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/851/image_thumb_5B6341BE.png" width="646" height="461" /></a></p>  <p>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 <font face="Consolas">Get-PnPView</font> told me about said view:</p>  <p><a href="/blog/Lists/Posts/Attachments/851/image_4_5B6341BE.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/851/image_thumb_1_5B6341BE.png" width="579" height="816" /></a></p>  <p>I can see the columns I added in the <font face="Consolas">ViewFields</font> 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 <font face="Consolas">ViewQuery</font> 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, <font face="Consolas">Get-PnPProperty</font>. </p>  <p><a href="/blog/Lists/Posts/Attachments/851/image_6_5B6341BE.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/851/image_thumb_2_5B6341BE.png" width="575" height="860" /></a></p>  <p>Here’s the code for it all:</p>  <blockquote>   <p><font face="Consolas"><strong>Connect-PnPOnline -Url https://toddklindt.sharepoint.com/sites/8884aced -Credentials Me         <br />Get-PnPView -List Documents          <br />Get-PnPView -List Documents -Identity 3c4126aa-d2fe-4b57-9a70-e03ebb9c76ef          <br />$view = Get-PnPView -List Documents -Identity 3c4126aa-d2fe-4b57-9a70-e03ebb9c76ef          <br />$view          <br />$view | select *          <br />$view.ViewQuery          <br />Get-PnPProperty -ClientObject $view -Property ViewQuery          <br />$view.ViewQuery          <br />$view          <br />$view | select *</strong></font></p> </blockquote>  <p>Not only does <font face="Consolas">Get-PnPProperty</font> 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:</p>  <blockquote>   <p><font face="Consolas"><strong>Get-PnPView –List Documents         <br />$viewlist| ForEach-Object { Get-PnPProperty -ClientObject $_ -Property ViewQuery, ListViewXml }</strong></font></p> </blockquote>  <p>That hydrates the <font face="Consolas">ViewQuery</font> and <font face="Consolas">ListViewXml</font> property for all of the objects in<font face="Consolas"> $viewlist</font>.</p>  <p><a href="/blog/Lists/Posts/Attachments/851/image_8_5B6341BE.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/851/image_thumb_3_5B6341BE.png" width="566" height="1156" /></a></p>  <p>It snuck some other properties in too, but I don’t mind. </p>  <p>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<font face="Consolas"> Get-PnPProperty</font>.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshGetPNPProperty">https://www.toddklindt.com/PoshGetPNPProperty</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_2_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_2_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_4_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_4_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_6_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_6_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_8_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_8_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_1_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_1_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_2_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_2_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_3_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_3_5B6341BE.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_5B6341BE.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/851/image_thumb_5B6341BE.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Mon, 18 Nov 2019 23:42:33 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=851</guid>
    </item>
    <item>
      <title>Reversing Arrays easily in PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=850</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass56FD5C35A9244FDD89AA7F8CA0D41E4C"><p>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:</p>  <p>I want to copy these links:</p>  <p><a href="/blog/Lists/Posts/Attachments/850/image_2_78C98F1F.png"><img title="image" style="margin:0px;display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/850/image_thumb_78C98F1F.png" width="179" height="244" /></a></p>  <p>and put them on top of these links on another site.</p>  <p><a href="/blog/Lists/Posts/Attachments/850/image_4_78C98F1F.png"><img title="image" style="margin:0px;display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/850/image_thumb_1_78C98F1F.png" width="152" height="244" /></a></p>  <p>Of course I immediately thought of your friend and mine, the <a href="/blog/Lists/Posts/Post.aspx?ID=826">PnP PowerShell</a> for this task. Sure enough, there are cmdlets for that, <strong><font face="Consolas">Get-PnPNavigationNode</font></strong> and <strong><font face="Consolas">Add-PnPNavigationNode</font></strong>. Just what the doctor ordered.</p>  <p><font face="Consolas"><strong>Add-PnPNavigationNode<font face="Verdana"> </font></strong><font face="Verdana">is pretty basic and I had to work a bit to get exactly what the customer wanted. When you add a Navigtation node with</font> <strong>Add-PnPNavigationNode</strong> <font face="Verdana">it puts it at the end of the list, which makes sense. You can also throw the switch parameter, <font face="Consolas"><strong>–First</strong></font>, to put it at the top.</font><font face="Verdana"> 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 <font face="Consolas"><strong>Get-PnPNavigationNode </strong><font face="Verdana">it returns them in their correct order, so as I walked through them with <strong><font face="Consolas">Foreach</font></strong> 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 <strong><font face="Consolas">[array]::Reverse</font></strong>.</font></font></font></font></p>  <p>The <a href="https://docs.microsoft.com/en-us/dotnet/api/system.array?view=netframework-4.8">Array class</a> 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, <a href="https://docs.microsoft.com/en-us/dotnet/api/system.array?view=netframework-4.8">go to this page</a>, or type <strong><font face="Consolas">[array]::</font></strong> in a PowerShell host and tab through the list. It’s quite impressive.  </p>  <p>Here’s what my code looked like:</p>  <blockquote>   <p><strong><font face="Consolas">$oldsiteurl = “</font></strong><strong><font face="Consolas">https://contoso.sharepoint.com/sites/8884aced</font></strong>”      <br /><strong><font face="Consolas">$newsiteurl = “</font></strong><strong><font face="Consolas">https://contoso.sharepoint.com/sites/PublicTest</font></strong>”</p>    <p>     <br /><strong><font face="Consolas">$oldsite = Connect-PnPOnline -Url $oldsiteurl -Credentials Compliance -ReturnConnection         <br />$newsite = Connect-PnPOnline -Url $newsiteurl -Credentials Compliance –ReturnConnection</font></strong></p>    <p>     <br /><strong><font face="Consolas">$oldnavlinks = Get-PnPNavigationNode -Location QuickLaunch -Connection $oldsite</font></strong></p>    <p><strong><font face="Consolas">[array]::Reverse($oldnavlinks) # &lt;-- The magic goes here</font></strong></p>    <p><strong><font face="Consolas">foreach ($link in $oldnavlinks) {         <br />Add-PnPNavigationNode -Location QuickLaunch -Title $link.Title -Url $link.Url -First -Connection $newsite -External          <br />}</font></strong></p> </blockquote>  <p>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:</p>  <p><a href="/blog/Lists/Posts/Attachments/850/image_10_78C98F1F.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/850/image_thumb_4_78C98F1F.png" width="515" height="468" /></a></p>  <p>And here’s what it looked like after I ran it:</p>  <p><a href="/blog/Lists/Posts/Attachments/850/image_12_78C98F1F.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/850/image_thumb_5_78C98F1F.png" width="221" height="500" /></a></p>  <p>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.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshReverseArray">https://www.toddklindt.com/PoshReverseArray</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_10_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_10_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_12_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_12_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_2_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_2_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_4_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_4_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_1_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_1_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_4_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_4_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_5_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_5_78C98F1F.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_78C98F1F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/850/image_thumb_78C98F1F.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Thu, 31 Oct 2019 20:24:06 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=850</guid>
    </item>
    <item>
      <title>Podcast 443 - Read the History Books</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=849</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass5BF9B219CD70475DA417B1EBF0DDB47A"><p>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. </p>  <p>Recorded 10/23/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast443-ReadtheHistoryBooks.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast443-ReadtheHistoryBooks.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/X8OcFCW_jgI"><img title="Podcast 443 - Read the History Books (Time 0_18_03;06)" style="display:inline;background-image:none" border="0" alt="Podcast 443 - Read the History Books (Time 0_18_03;06)" src="/blog/Lists/Posts/Attachments/849/Podcast-443---Read-the-History-Books-Time-0_18_0306_3_38B9E97A.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/X8OcFCW_jgI">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 40:14</p>  <p><u>Links:</u></p>  <p><a href="https://training.powerapps911.com/courses/powerapps-for-sharepoint?utm_source=thinkific-admin&amp;utm_medium=social&amp;utm_campaign=social-share">PowerApps for SharePoint People</a>    <br /><a href="https://www.youtube.com/watch?v=Fa6HjOK30EQ&amp;feature=youtu.be">SnagIt 2020 is here</a>    <br /><a href="https://register.gotowebinar.com/register/8081171172958600971">Office 365 User Offboarding Done Right</a></p>  <p>ShortURL: <a href="/Podcast443">https://www.toddklindt.com/Podcast443</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/849/Podcast-443---Read-the-History-Books-Time-0_18_0306_3_38B9E97A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/849/Podcast-443---Read-the-History-Books-Time-0_18_0306_3_38B9E97A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 28 Oct 2019 15:39:24 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=849</guid>
    </item>
    <item>
      <title>Podcast 442 - Masking Tape on a Stick</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=848</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass230E09E02DC14CDB923E657A0094E92B"><p>Todd and Shane are back after a &quot;break&quot; 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.</p>  <p>Recorded 10/02/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast442-MaskingTapeonaStick.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast442-MaskingTapeonaStick.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/Q6oENhyjQTI"><img title="Podcast 442 - Masking Tape on a Stick (Time 0_18_56;04)" style="display:inline;background-image:none" border="0" alt="Podcast 442 - Masking Tape on a Stick (Time 0_18_56;04)" src="/blog/Lists/Posts/Attachments/848/Podcast-442---Masking-Tape-on-a-Stick-Time-0_18_5604_3_6B6C3CB9.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/Q6oENhyjQTI">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 44:01</p>  <p><u>Links:</u></p>  <p>07:57 <a href="https://docs.microsoft.com/en-us/sharepointmigration/how-to-use-the-sharepoint-migration-tool">SharePoint Migration adds public preview of 2010</a>    <br />39:29 <a href="https://www.thurrott.com/hardware/218080/surface-laptop-3-launches-with-new-15-inch-variant-amd-processors-metal-finish#">Surface Laptop 3</a>    <br />39:30 <a href="https://www.windowscentral.com/surface-pro-7-adds-usb-c-10-gen-intel-core-cpus">Surface Pro</a>    <br />15:24 <a href="https://www.petri.com/everything-you-need-to-know-about-office-365-and-sharepoint-september-2019">Everything you need to know about Office 365 September 2019</a>    <br />16:04 <a href="https://support.office.com/en-us/article/Rehearse-your-slide-show-with-Presenter-Coach-cd7fc941-5c3b-498c-a225-83ef3f64f07b">PowerPoint Presenter Coach</a></p>  <p>ShortURL: <a href="/Podcast442">https://www.toddklindt.com/Podcast442</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/848/Podcast-442---Masking-Tape-on-a-Stick-Time-0_18_5604_3_6B6C3CB9.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/848/Podcast-442---Masking-Tape-on-a-Stick-Time-0_18_5604_3_6B6C3CB9.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 25 Oct 2019 14:11:09 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=848</guid>
    </item>
    <item>
      <title>Podcast 441 - That's Great Feedback!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=847</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCCE1C01323F44D41911B45A7C4E677DE"><p>Todd airs some grievances, Shane talks about his new iPhone and the maze that is PowerApps licensing. All in this week's podcast.   <br /></p>  <p>Recorded 9/25/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast441-That-sGreatFeedback.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast441-That-sGreatFeedback.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/tJlQNdISzzU"><img title="Podcast 441 - That's Great Feedback! (Time 0_35_15;16)" style="display:inline;background-image:none" border="0" alt="Podcast 441 - That's Great Feedback! (Time 0_35_15;16)" src="/blog/Lists/Posts/Attachments/847/Podcast-441---Thats-Great-Feedback-Time-0_35_1516_3_44EF198C.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/tJlQNdISzzU">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 39:09</p>  <p>   <p>ShortURL: <a href="/Podcast441">https://www.toddklindt.com/Podcast441</a></p></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/847/Podcast-441---Thats-Great-Feedback-Time-0_35_1516_3_44EF198C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/847/Podcast-441---Thats-Great-Feedback-Time-0_35_1516_3_44EF198C.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 23 Oct 2019 20:46:19 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=847</guid>
    </item>
    <item>
      <title>Podcast 440 - Special Dance that We Do</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=846</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCDD2D61FA1CD4150896E3459C0F6BC59"><p>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.</p>  <p>Recorded 9/4/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast440-SpecialDancethatWeDo.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast440-SpecialDancethatWeDo.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/2DQVxGeFpF4"><img title="Podcast 440 - Special Dance that We Do (Time 0_06_50;04)" style="display:inline;background-image:none" border="0" alt="Podcast 440 - Special Dance that We Do (Time 0_06_50;04)" src="/blog/Lists/Posts/Attachments/846/Podcast-440---Special-Dance-that-We-Do-Time-0_06_5004_3_6AF7762A.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/2DQVxGeFpF4">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 23:04</p>  <p><u>Links:</u></p>  <p>03:14 <a href="https://amzn.to/2ZPE3qi">Blink XT2 cameras</a>    <br />15:46 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/New-web-parts-coming-to-SharePoint-August-2019/ba-p/828376">New SharePoint Web Parts</a>    <br />18:34 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/August-2019-Updates-to-SharePoint-page-and-news-authoring/ba-p/801482">SharePoint Page Publishing got some enhancements</a>    <br />19:03 <a href="https://sympmarc.com/2019/08/22/using-invoke-spositeswap-to-swap-in-a-new-root-site-in-office-365/">Using Invoke-SPOSiteSwap to Swap in a New Root Site in Office 365</a>    <br />19:10 <a href="https://sympmarc.com/2019/08/29/using-invoke-spositeswap-to-swap-in-a-new-root-site-in-office-365-follow-up/">Using Invoke-SPOSiteSwap to Swap in a New Root Site in Office 365 – Follow Up</a></p>  <p>ShortURL: <a href="/Podcast440">https://www.toddklindt.com/Podcast440</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/846/Podcast-440---Special-Dance-that-We-Do-Time-0_06_5004_3_6AF7762A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/846/Podcast-440---Special-Dance-that-We-Do-Time-0_06_5004_3_6AF7762A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 23 Oct 2019 16:31:25 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=846</guid>
    </item>
    <item>
      <title>Podcast 439 - Handsome Faces and Witty Repertoire</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=845</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF7B4C36CD72341419FC754DB0898B633"><p>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. </p>  <p>Recorded 8/21/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast439-HandsomeFacesandWittyRepertoire.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast439-HandsomeFacesandWittyRepertoire.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/v3ZigBHAPqs"><img title="Podcast 439 - Handsome Faces and Witty Repertoire (Time 0_21_57;16)" style="display:inline;background-image:none" border="0" alt="Podcast 439 - Handsome Faces and Witty Repertoire (Time 0_21_57;16)" src="/blog/Lists/Posts/Attachments/845/Podcast-439---Handsome-Faces-and-Witty-Repertoire-Time-0_21_5716_3_0F3322DC.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/v3ZigBHAPqs">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 47:33</p>  <p><u>Links:</u></p>  <p>42:27 <a href="https://www.youtube.com/watch?v=0MB-z9cyFCQ">PowerApps Hide Button based on User</a>    <br />43:05 <a href="https://www.youtube.com/watch?v=Ws6xEr5N1cU">PowerApps Email Attachments </a></p>  <p>ShortURL: <a href="/Podcast439">https://www.toddklindt.com/Podcast439</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/845/Podcast-439---Handsome-Faces-and-Witty-Repertoire-Time-0_21_5716_3_0F3322DC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/845/Podcast-439---Handsome-Faces-and-Witty-Repertoire-Time-0_21_5716_3_0F3322DC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 21 Oct 2019 22:26:19 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=845</guid>
    </item>
    <item>
      <title>Podcast 438 - No Argument. Shut Up. Boom!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=844</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassBBB9EBBE7A704A079B5AE76223FDF05E"><p>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.</p>  <p>Recorded 7/31/2019</p>  <p><a href="https://media.toddklindt.com/Netcast/Podcast438-NoArgument.ShutUp.Boom.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://media.toddklindt.com/Netcast/Podcast438-NoArgument.ShutUp.Boom.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/ASWidQB20-Q"><img title="Podcast 438 - No Argument. Shut Up. Boom! (Time 0_27_49;15)" style="display:inline;background-image:none" border="0" alt="Podcast 438 - No Argument. Shut Up. Boom! (Time 0_27_49;15)" src="/blog/Lists/Posts/Attachments/844/Podcast-438---No-Argument_-Shut-Up_-Boom-Time-0_27_4915_1E484D9A_31cc1415-6730-4f80-a724-29ff5a4d9945_1E484D9A.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/ASWidQB20-Q">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 46:00</p>  <p><u>Links:</u></p>  <p>04:02 <a href="https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/Skype-for-Business-Online-to-Be-Retired-in-2021/ba-p/777833">Skype for Business Online to Be Retired in 2021</a>    <br />09:37 <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/07/11/microsoft-teams-reaches-13-million-daily-active-users-introduces-4-new-ways-for-teams-to-work-better-together/?wt.mc_id=AID2409696_QSG_PD_SCL_349209&amp;ocid=AID2409696_QSG_PD_SCL_349209">13 Million Daily User in Teams</a>    <br />17:38 <a href="https://sharepointmaven.com/how-many-document-libraries-shall-i-have-in-a-sharepoint-site/">How many document libraries shall I have in a SharePoint Site?</a>    <br />22:11 <a href="https://thomy.tech/10-things-you-should-do-with-your-office365-demo-or-dev-tenant/">10 things you should do with your office365 demo or dev tenant</a>    <br />25:46 <a href="/blog/Lists/Posts/Post.aspx?ID=839">Wrangling Dates and Times with PowerShell</a>    <br />26:00 <a href="https://www.youtube.com/watch?v=YQn7zgwlG40">Video PowerShell Date and Time</a>    <br />33:31 <a href="https://powerapps.microsoft.com/en-us/blog/new-licensing-options-for-powerapps-and-flow/">PowerApps and Flow Licensing Update</a>    <br />41:01 <a href="https://threader.app/thread/1156312965265707013">Why does it take 4-6 weeks to unsubscribe</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/SharePoint-Roadmap-Pitstop-July-2019/ba-p/776272">SharePoint Roadmap</a>    <br /><a href="https://www.youtube.com/watch?v=0MB-z9cyFCQ">PowerApps Hide Button based on User</a></p>  <p>ShortURL: <a href="/Podcast438">https://www.toddklindt.com/Podcast438</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/844/Podcast-438---No-Argument_-Shut-Up_-Boom-Time-0_27_4915_1E484D9A_31cc1415-6730-4f80-a724-29ff5a4d9945_1E484D9A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/844/Podcast-438---No-Argument_-Shut-Up_-Boom-Time-0_27_4915_1E484D9A_31cc1415-6730-4f80-a724-29ff5a4d9945_1E484D9A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 18 Oct 2019 20:17:12 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=844</guid>
    </item>
    <item>
      <title>Podcast 437 - Not Restricted by Reality</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=843</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass826F41512DB5432FBA9FBDA0371052A3"><p>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. </p>  <p>Recorded 7/24/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast437-NotRestrictedbyReality.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast437-NotRestrictedbyReality.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/-FjLKatjoEw"><img title="Podcast 437 - Not Restricted by Reality (Time 0_12_26;27)" style="display:inline;background-image:none" border="0" alt="Podcast 437 - Not Restricted by Reality (Time 0_12_26;27)" src="/blog/Lists/Posts/Attachments/843/Podcast-437---Not-Restricted-by-Reality-Time-0_12_2627_3_652F8D89.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/-FjLKatjoEw">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 43:23</p>  <p>ShortURL: <a href="/Podcast437">https://www.toddklindt.com/Podcast437</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/843/Podcast-437---Not-Restricted-by-Reality-Time-0_12_2627_3_652F8D89.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/843/Podcast-437---Not-Restricted-by-Reality-Time-0_12_2627_3_652F8D89.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 18 Oct 2019 18:48:11 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=843</guid>
    </item>
    <item>
      <title>Podcast 436 - Just being Jerks</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=842</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass0DA50DA43453425DB481C0DE9F9DAF45"><p>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.   <br /></p>  <p>Recorded 7/3/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast436-JustbeingJerks.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast436-JustbeingJerks.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/1_mABYPzuXw"><img title="Podcast 436 - Just being Jerks (Time 0_28_03;20)" style="display:inline;background-image:none" border="0" alt="Podcast 436 - Just being Jerks (Time 0_28_03;20)" src="/blog/Lists/Posts/Attachments/842/Podcast-436---Just-being-Jerks-Time-0_28_0320_3_507BAD4E.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/1_mABYPzuXw">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 48:01</p>  <p><u>Links:</u></p>  <ol>   <li>08:40 <a href="/blog/Lists/Posts/Post.aspx?ID=837">How to Store Windows Credentials with the PnP PowerShell</a></li>    <li>11:02 <a href="/POSHOffice365Modules">Office 365 PowerShell Module Installs</a></li>    <li>40:39 <a href="https://www.businessinsider.com/cloudflare-outage-causes-major-websites-across-internet-to-go-down-2019-7">Cloudflare took down part of the internet</a></li>    <li>20:46 <a href="https://techcommunity.microsoft.com/t5/Microsoft-365-Blog/Teams-is-coming-to-Office-365-Business-amp-Office-365-ProPlus/ba-p/725481">Teams Client is getting bundled in</a></li>    <li>28:00 <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/06/25/onedrive-personal-vault-added-security-onedrive-additional-storage/">OneDrive Personal gets new security and more storage</a></li>    <li>38:33 <a href="https://www.youtube.com/watch?v=VQGkypdzTj4">PowerApps Business Card Scanner</a></li>    <li>39:00 <a href="https://www.youtube.com/watch?v=UFkKD5Huops">PowerApps Object Detector</a></li> </ol>  <p>ShortURL: <a href="/Podcast436">https://www.toddklindt.com/Podcast436</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/842/Podcast-436---Just-being-Jerks-Time-0_28_0320_3_507BAD4E.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/842/Podcast-436---Just-being-Jerks-Time-0_28_0320_3_507BAD4E.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Fri, 18 Oct 2019 01:57:10 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=842</guid>
    </item>
    <item>
      <title>Podcast 435 - Be the Idiot</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=841</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass8799B3F18841465F92C977DDE7D9FC92"><p>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.   <br /></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast435-BetheIdiot.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast435-BetheIdiot.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/knGvf3Ea5PA"><img title="Podcast 435 - Be the Idiot (Time 0_33_28;09)" style="display:inline;background-image:none" border="0" alt="Podcast 435 - Be the Idiot (Time 0_33_28;09)" src="/blog/Lists/Posts/Attachments/841/Podcast-435---Be-the-Idiot-Time-0_33_2809_3_338C0F7A.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/knGvf3Ea5PA">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>04:42 <a href="https://blog.syskit.com/top-10-office-365-best-practices">Top 10 Office 365 Best Practices Every Admin Should Know</a>    <br />12:00 <a href="https://www.facebook.com/pat.thesharepointcow">Pat the SharePoint Cow</a>    <br />14:09 <a href="https://www.powerapps911.com/mbas19">MBAS Resources</a>    <br />23:20 <a href="https://www.petri.com/powerapps-enhanced-with-artificial-intelligence-gain-new-capabilities">PowerApps AI is awesome</a>    <br />32.53 <a href="https://powerapps.microsoft.com/en-us/blog/introducing-powerapps-portals-powerful-low-code-websites-for-external-users/">PowerApps Portal</a>    <br />42:30 <a href="https://powerusers.microsoft.com/t5/MBAS-Gallery/bd-p/PA_MBAS_Gallery">All MBAS Sessions on Demand</a>    <br />43:00 <a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=&amp;searchterms=51933">SharePoint hubs limit raised to 2,000</a>    <br />44:58 <a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=&amp;filters=&amp;searchterms=26821">New Yammer files in Office 365-connected groups will be stored in SharePoint</a>    <br />45:00 <a href="https://support.office.com/en-us/article/how-do-i-tell-where-my-yammer-files-are-being-stored-fadfdefa-e00d-40b6-94cb-a9ddb171a443?ui=en-US&amp;rs=en-US&amp;ad=US">How do I tell where my Yammer files are being stored?</a>    <br />51:00 <a href="https://www.cartalk.com/radio/letter/texting-abbreviations-elderly">https://www.cartalk.com/radio/letter/texting-abbreviations-elderly</a></p>  <p>Running Time: 52:17</p>  <p><u>Links:</u></p>  <p>ShortURL: <a href="/Podcast435">https://www.toddklindt.com/Podcast435</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/841/Podcast-435---Be-the-Idiot-Time-0_33_2809_3_338C0F7A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/841/Podcast-435---Be-the-Idiot-Time-0_33_2809_3_338C0F7A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 16 Oct 2019 18:36:44 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=841</guid>
    </item>
    <item>
      <title>Podcast 434 - Professional Ineptitude</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=840</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassC8A542738A17477FBF4E3C991360EB12"><p>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. </p>  <p>Recorded 6/5/2019</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast434-ProfessionalIneptitude.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast434-ProfessionalIneptitude.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/l9wpH8y_tlY"><img title="Podcast 434 - Professional Ineptitude (Time 0_01_08;27)" style="display:inline;background-image:none" border="0" alt="Podcast 434 - Professional Ineptitude (Time 0_01_08;27)" src="/blog/Lists/Posts/Attachments/840/Podcast-434---Professional-Ineptitude-Time-0_01_0827_3_7E2C0B8A.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/l9wpH8y_tlY">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 50:11</p>  <p><u>Links:</u></p>  <p>4:50 <a href="https://www.msn.com/en-us/news/technology/heres-a-first-look-at-apples-new-dollar5999-mac-pro-the-mac-die-hard-fans-have-been-waiting-for/ar-AAClayB">Apple announced gold plated hardware? Price seemed that way</a>    <br />27:06 <a href="https://www.youtube.com/watch?v=gsk14D-CYRE">Working with complex SharePoint Columns in PowerApps</a>    <br />27:59 <a href="https://amzn.to/2Ijrg90">Dell u3415W </a>    <br />45:20 <a href="https://mspsug.com/">Mississippi PowerShell User Group</a>    <br />47:37 <a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a></p>  <p>ShortURL: <a href="/Podcast434">https://www.toddklindt.com/Podcast434</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/840/Podcast-434---Professional-Ineptitude-Time-0_01_0827_3_7E2C0B8A.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/840/Podcast-434---Professional-Ineptitude-Time-0_01_0827_3_7E2C0B8A.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 16 Oct 2019 15:22:59 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=840</guid>
    </item>
    <item>
      <title>Wrangling Dates and Times with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=839</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF55B7C0C6B1C4EBD8C19CB5A45C3712E"><p>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 <font face="Consolas">DateTime</font> formatting the help for <font face="Consolas">Get-Date</font> shows some great, easy to use examples.</p>  <p><font face="Consolas">help Get-Date –Examples</font></p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_2_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_79B7AE00.png" width="976" height="547" /></a></p>  <p>There’s <font face="Consolas">–Format, –UFormat</font>, and <font face="Consolas">–DisplayHint</font>, and those are all before we get to the flexibility that is <font face="Consolas">.tostring(). </font><font face="Verdana">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 <font face="Consolas">.GetDateTimeFormats()</font></font></p>  <p><font face="Consolas">(Get-Date).GetDateTimeFormats()</font></p>  <p>It lists out a collection of precanned <font face="Consolas">DateTime</font> formats you can select from:</p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_4_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_1_79B7AE00.png" width="976" height="547" /></a></p>  <p>You can use one of those formats just by selecting its index number:</p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_6_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_2_79B7AE00.png" width="769" height="179" /></a></p>  <p>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. </p>  <p>Until now.</p>  <p>I had danced this dance a few times, squinting to find that just perfect <font face="Consolas">DateTime</font> 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:</p>  <p><font face="Consolas">(Get-Date).GetDateTimeFormats() | foreach {$I = 0} { Write-Host &quot;$I - $_&quot; ; $I++ }</font></p>  <p><font color="#ff0000">Edit 7/9/2019</font></p>  <p>A helpful reader suggested this even shinier gem:</p>  <p><font face="Consolas">(Get-Date).GetDateTimeFormats() | foreach-object -begin {$I = 0} -process {[pscustomobject]@{Index = $I;Value = $_}; $I++ }</font></p>  <p>This lists each format, along with its index number.</p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_8_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_3_79B7AE00.png" width="1040" height="582" /></a></p>  <p>Once you’ve found the format of your dreams you can look to its left and see what its index is.</p>  <p><font face="Consolas">(Get-Date).GetDateTimeFormats()[27]</font></p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_10_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_4_79B7AE00.png" width="836" height="188" /></a></p>  <p>If you want to use it with a variable instead of <font face="Consolas">Get-Date</font>, it looks like this:</p>  <p><a href="/blog/Lists/Posts/Attachments/839/image_12_79B7AE00.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/839/image_thumb_5_79B7AE00.png" width="851" height="300" /></a></p>  <p>Now you have no excuses for getting exactly the <font face="Consolas">DateTime </font>format you want.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshFormatDateTime">https://www.toddklindt.com/PoshFormatDateTime</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_10_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_10_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_12_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_12_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_2_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_2_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_4_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_4_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_6_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_6_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_8_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_8_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_1_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_1_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_2_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_2_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_3_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_3_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_4_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_4_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_5_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_5_79B7AE00.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_79B7AE00.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/839/image_thumb_79B7AE00.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell</category>
      <pubDate>Mon, 08 Jul 2019 13:40:40 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=839</guid>
    </item>
    <item>
      <title>Renewed as Microsoft MVP, 2019 Edition</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=838</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassC315476F1E5F4178A0F14FA516A7BC91"><p>Another July 1st, another nervous couple of weeks. Fortunately the news this year was good, I was renewed. </p>     <a href="/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_094BB8D3.png"><img title="SNAGHTML635de263" style="display:inline;background-image:none" border="0" alt="SNAGHTML635de263" src="/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_thumb_745A365F.png" width="589" height="304" /></a>    <p><a href="https://mvp.microsoft.com/">Microsoft’s MVP Program</a> 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 <a href="https://mvp.microsoft.com/en-us/PublicProfile/35862?fullName=Todd%20%20Klindt">since 2006</a> when I got my first MVP award. </p>  <p>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. </p>  <p>Congratulations to the other renewed and newly awarded MVPs.</p>  <p>tk </p>  <p>ShortURL: <a href="/2019MVPAward">https://www.toddklindt.com/2019MVPAward</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=20\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=20&amp;RootFolder=*">Sharepoint</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_094BB8D3.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_094BB8D3.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_thumb_745A365F.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/838/SNAGHTML635de263_thumb_745A365F.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; Sharepoint</category>
      <pubDate>Tue, 02 Jul 2019 13:16:10 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=838</guid>
    </item>
    <item>
      <title>How to Store Windows Credentials with the PnP PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=837</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD38956EDDB0E40DEBBBC02FB5731B4CB"><p>A few months ago I wrote one of my favorite blog posts, <a href="/blog/Lists/Posts/Post.aspx?ID=800">Connecting to Office 365 with Multiple Accounts in PowerShell without Losing Your Damned Mind</a> 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 <em>and </em>without loading any additional modules!*</p>  <p>*(as long as you already have the <a href="https://github.com/SharePoint/PnP-PowerShell">PnP PowerShell module</a> installed, that is)</p>  <p>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, <font face="Consolas">Add-PnPStoredCredential, Get-PnPStoredCredential, Get-PnPStoredCredential</font>. </p>  <p><a href="/blog/Lists/Posts/Attachments/837/image_2_3F1A7E4B.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/837/image_thumb_3F1A7E4B.png" width="1203" height="369" /></a></p>    <p>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.</p>  <p>Use the <font face="Consolas">Get-PnPStoredCredential</font> cmdlet to retrieve a stored credential by name. I’ve only had it work if I specify the <font face="Consolas">–Type</font> parameter with the <font face="Consolas">PSCredential</font> value.</p>  <p><font face="Consolas">$creds = Get-PnPStoredCredential -Name MODAdmin -Type PSCredential</font></p>  <p>You can output the <font face="Consolas">$creds</font> object to make sure it it grabbed the account you expected. Then you can pass that object to another cmdlet, like <font face="Consolas">Connect-AzureAD</font> and use it to authenticate.</p>  <p><font face="Consolas">Connect-AzureAD -Credential $creds</font></p>  <p>Here’s how it looks.</p>  <p><a href="/blog/Lists/Posts/Attachments/837/image_4_3F1A7E4B.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/837/image_thumb_1_3F1A7E4B.png" width="1241" height="421" /></a></p>  <p>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.</p>  <p>Happy Credential Storing.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshMultipleAccountsPnP">https://www.toddklindt.com/PoshMultipleAccountsPnP</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=2\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=2&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_2_3F1A7E4B.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_2_3F1A7E4B.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_4_3F1A7E4B.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_4_3F1A7E4B.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_thumb_1_3F1A7E4B.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_thumb_1_3F1A7E4B.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_thumb_3F1A7E4B.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/837/image_thumb_3F1A7E4B.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell</category>
      <pubDate>Mon, 01 Jul 2019 14:49:43 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=837</guid>
    </item>
    <item>
      <title>Migrating to Office 365 Checklist Blog Post</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=836</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass6204CEC3E61F42C5879FB9258D477E64"><p>This is a blog post, about a blog post. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/836/wlEmoticon-smile_2_24D7BDF9.png" /> I recently published a blog post, “<a href="https://blog.syskit.com/office-365-migration-checklist">Migrating to Office 365 Checklist</a>” 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, “<a href="https://blog.syskit.com/top-10-office-365-best-practices">Top 10 Office 365 Best Practices Every Admin Should Know</a>” from Toni Frankola. </p>  <p>Check out my article and let me know what you think.</p>  <p>tk</p>  <p>ShortURL: <a href="/MigO365Blog">https://www.toddklindt.com/MigO365Blog</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=27\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=27&amp;RootFolder=*">SPDocKit</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/836/wlEmoticon-smile_2_24D7BDF9.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/836/wlEmoticon-smile_2_24D7BDF9.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; SPDocKit</category>
      <pubDate>Mon, 17 Jun 2019 13:52:17 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=836</guid>
    </item>
    <item>
      <title>Podcast 433 - CDXXXIII (Into a Dutch Canal)</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=835</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass55E5C699932949CBBDD19033B4FEA878"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast433-CDXXXIII(IntoaDutchCanal).mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast433-CDXXXIII(IntoaDutchCanal).mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/qFAxxX5tFeY"><img title="Podcast 433 - CDXXXIII (Into a Dutch Canal) (Time 0_11_09;01)" style="display:inline;background-image:none" border="0" alt="Podcast 433 - CDXXXIII (Into a Dutch Canal) (Time 0_11_09;01)" src="/blog/Lists/Posts/Attachments/835/Podcast-433---CDXXXIII-Into-a-Dutch-Canal-Time-0_11_0901_3_783C3470.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/qFAxxX5tFeY">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 49:26</p>  <p><u>Links:</u></p>  <p><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Search-that-works-wherever-you-re-working/ba-p/576431">Microsoft Search</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-OneDrive-Blog/OneDrive-announcements-SharePoint-Conference-2019/ba-p/616047">OneDrive Announcements</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/SharePoint-home-sites-a-landing-for-your-organization-on-the/ba-p/621933">SharePoint Home Sites</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/What-s-new-for-SharePoint-Server/ba-p/579550">SharePoint On-Prem in Azure IaaS can use SQL PaaS</a>    <br /><a href="https://www.youtube.com/watch?v=gsk14D-CYRE">Working with complex SharePoint Columns in PowerApps</a>    <br /><a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a></p>  <p>ShortURL: <a href="/Podcast433">https://www.toddklindt.com/Podcast433</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/835/Podcast-433---CDXXXIII-Into-a-Dutch-Canal-Time-0_11_0901_3_783C3470.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/835/Podcast-433---CDXXXIII-Into-a-Dutch-Canal-Time-0_11_0901_3_783C3470.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 04 Jun 2019 21:41:22 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=835</guid>
    </item>
    <item>
      <title>Podcast 432 - Intimate Podcast</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=834</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCD86C1AC7B14492C8AC88F4B26B29D7E"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast432-IntimatePodcast.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast432-IntimatePodcast.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/r4HQPsaK8AQ"><img title="Podcast 432 - Intimate Podcast (Time 0_20_15;01)" style="display:inline;background-image:none" border="0" alt="Podcast 432 - Intimate Podcast (Time 0_20_15;01)" src="/blog/Lists/Posts/Attachments/834/Podcast-432---Intimate-Podcast-Time-0_20_1501_3_7E592397.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/r4HQPsaK8AQ">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 32:23</p>  <p><u>Links:</u></p>  <p><a href="https://office365itpros.com/2019/05/02/sharepoint-online-rename-site-names/">SharePoint Online Can Now Rename Site URLs</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Create-SharePoint-lists-from-Excel-or-other-lists/ba-p/533395">Making lists in SharePoint just got easier</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Welcome-to-Microsoft-Search-intelligent-search-for-the-modern/ba-p/509097">Welcome to Microsoft Search</a>    <br /><a href="https://techcrunch.com/2019/05/06/microsoft-wants-to-reinvent-documents-with-its-new-fluid-framework">New Fluid Framework</a>    <br /><a href="https://webster.net.nz/2019/05/04/no-headset-companion-devices-to-the-rescue-microsoft-teams/">Companion devices to the rescue – Microsoft Teams</a>    <br /><a href="https://sergeluca.wordpress.com/2019/04/08/create-a-flow-that-finds-your-flow/">Create A Flow That Finds Your Flows</a>    <br /><a href="https://sergeluca.wordpress.com/2019/05/03/create-a-super-finder-microsoft-flow/">Create A Super Finder Microsoft Flow</a>    <br /><a href="http://www.spsevents.org/city/Nashville/Nashville2019/">SPS Nashville</a>    <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>    <br /><a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a>    <br /><a href="https://www.youtube.com/user/powerscriptinglive">PowerScripting Live</a></p>  <p>ShortURL: <a href="/Podcast432">https://www.toddklindt.com/Podcast432</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/834/Podcast-432---Intimate-Podcast-Time-0_20_1501_3_7E592397.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/834/Podcast-432---Intimate-Podcast-Time-0_20_1501_3_7E592397.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 04 Jun 2019 19:42:53 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=834</guid>
    </item>
    <item>
      <title>See me at the SharePoint Conference 2019</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=833</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE5DBE9C517374A28B800EAD4367FA8B6"><p>I can’t believe it’s almost here! <a href="https://www.sharepointna.com/">The SharePoint Conference 2019</a> 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:</p>  <p><strong>Monday May 20th</strong> - <a href="https://www.sharepointna.com/#%21/workshop/SharePoint%20Administrator%20Day%20Camp/3763">SharePoint Administrator Day Camp</a> – 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) </p>  <p><strong>Tuesday May 21st 10:45 – 11:30</strong> – <a href="https://www.syskit.com/">SysKit</a> Q&amp;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. </p>  <p>I’ll also be wandering around spreading good cheer. If you want to catch up email me or tweet me @toddklindt.</p>  <p>See you next week.</p>  <p>tk</p>  <p>ShortURL: <a href="/SPC2019Meetup">https://www.toddklindt.com/SPC2019Meetup</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Mon, 13 May 2019 18:35:56 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=833</guid>
    </item>
    <item>
      <title>PowerShell to Update your PowerShell Modules</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=832</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1EAB7C5760C242538F47193A46F162C4"><p>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. <a href="/blog/Lists/Posts/Post.aspx?ID=826">I wrote this blog post</a> 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. </p>
  <p>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.</p>
  <p>The key to this magic is a group of cmdlets that deal with modules, particularly <font face="Consolas">Find-Module</font> and <font face="Consolas">Update-Module</font>. That’s why it only works with modules installed from a repository with <font face="Consolas">Install-Module</font>. To find the relevant cmdlets run:</p>
  <p><font face="Consolas">Get-Command -Noun module</font></p>
  <p>and</p>
  <p><font face="Consolas">Get-Command -Noun InstalledModule</font></p>
  <p>Here’s how I stitch them together to get a list of modules that have updates:</p>
  <p><font face="Consolas"><strong>     Get-InstalledModule | foreach { $b = (find-module $_.name).version ; if ($b -ne $_.version) { Write-host &quot;$($_.name) has an update from $($_.version) to $b&quot; } }</strong></font></p>
  <p>Let’s break that down.</p>
  <p><font face="Consolas">Get-InstalledModule</font></p>
  <p>Gets all of the modules that have been installed from a repository.</p>
  <p><font face="Consolas">| foreach</font> </p>
  <p>Pipes them all l through a <font face="Consolas">foreach</font> loop.</p>
  <p><font face="Consolas">$b = (find-module $_.name).version</font> </p>
  <p>Grabs the current published version of the module in the loop. </p>
  <p><font face="Consolas">if ($b -ne $_.version)</font> </p>
  <p>Checks to see if the published version is the same as the Version property of the installed module.</p>
  <p><font face="Consolas">{ Write-host &quot;$($_.name) has an update from $($_.version) to $b&quot; }</font></p>
  <p>If they are not equal, it writes out the module name, the installed version, and the current published version. </p>
  <p>It looks like this:</p>
  <p><a href="/blog/Lists/Posts/Attachments/832/image_2_0F4B738D.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/832/image_thumb_7A59F119.png" width="756" height="289" style="display:inline;background-image:none" /></a> </p>
  <p>In screenshot I ran <font face="Consolas">Get-InstalledModule</font> to show its full output, then the full command and its output.</p>
  <p>Now we know which modules can be updated. We can update an individual module like this:</p>
  <p><font face="Consolas">Update-Module SharePointPnPPowerShellOnline –Force</font></p>
  <p>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 <font face="Consolas">Update-Module</font> cmdlet in an Administrator prompt. </p>
  <p><a href="/blog/Lists/Posts/Attachments/832/image_4_7A59F119.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/832/image_thumb_1_7A59F119.png" width="755" height="417" style="display:inline;background-image:none" /></a> </p>
  <p>Now if I run my command it will not report that that the SharePointPnPPowerShellOnline module has an update. </p>
  <p><a href="/blog/Lists/Posts/Attachments/832/image_6_7A59F119.png"><img title="image" border="0" alt="image" src="/blog/Lists/Posts/Attachments/832/image_thumb_2_7A59F119.png" width="769" height="425" style="display:inline;background-image:none" /></a> </p>
  <p>It would be easy to replace the “<font face="Consolas">Write-Host</font>…” part of the command with “<font face="Consolas">Update-Module $_.name</font>” 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.</p>
  <p>I hope you’ve found this helpful.</p>
  <p>tk</p>
  <p>ShortURL: <a href="/PoshUpdateModules">https://www.toddklindt.com/PoshUpdateModules</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=3\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=3&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_2_0F4B738D.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_2_0F4B738D.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_4_7A59F119.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_4_7A59F119.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_6_7A59F119.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_6_7A59F119.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_1_7A59F119.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_1_7A59F119.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_2_7A59F119.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_2_7A59F119.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_7A59F119.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/832/image_thumb_7A59F119.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell</category>
      <pubDate>Sat, 11 May 2019 03:48:32 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=832</guid>
    </item>
    <item>
      <title>Podcast 431 - It's about Time</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=831</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass6D86521CD7314FA98D275129E02F6908"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast431-It-saboutTime.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast431-It-saboutTime.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/GrjdlwaFdYM"><img title="Podcast 431 - It's about Time (Time 0_00_41;13)" style="display:inline;background-image:none" border="0" alt="Podcast 431 - It's about Time (Time 0_00_41;13)" src="/blog/Lists/Posts/Attachments/831/Podcast-431---Its-about-Time-Time-0_00_4113_3_69408F42.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/GrjdlwaFdYM">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 1:08:12</p>  <p><u>Links:</u></p>  <p><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/April-2019-Updates-to-SharePoint-News/ba-p/481718">Chris's April Round-Up for SharePoint</a>    <br /><a href="https://techcrunch.com/2019/04/30/citrix-internal-network-breach/?_lrsc=67ca0a55-0cd1-4cb5-83a1-6af2accd7294">Hackers went undetected in Citrix's internal network for six months</a>    <br /><a href="https://www.microsoftedgeinsider.com/en-us/?form=MO12FO&amp;OCID=MO12FO">Edge Chromium added Chromecasting</a>    <br /><a href="https://amzn.to/2XW7sP1">Cloud Key Gen 2 Plus</a>    <br /><a href="https://amzn.to/2PDZaIJ">Unifi Security Gateway</a>    <br /><a href="https://amzn.to/2PE0awt">8 Port switch with POE</a>    <br /><a href="https://amzn.to/2J7UV7a">2 x AC LR AP (access points)</a>    <br /><a href="http://www.spsevents.org/city/Nashville/Nashville2019/">SPS Nashville</a>    <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>    <br /><a href="http://www.spsevents.org/city/atlanta/atlanta2019">SharePoint Saturday Atlanta     <br /></a><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>    <br /><a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a></p>  <p>ShortURL: <a href="/Podcast431">https://www.toddklindt.com/Podcast431</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/831/Podcast-431---Its-about-Time-Time-0_00_4113_3_69408F42.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/831/Podcast-431---Its-about-Time-Time-0_00_4113_3_69408F42.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 08 May 2019 14:09:13 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=831</guid>
    </item>
    <item>
      <title>Podcast 430 - Everything is Shared</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=830</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE7B85F025974405EA741B93FB7E05F3C"><p>In this epic episode, Shane and Todd talk about &quot;kids these days&quot; 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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast430-EverythingisShared.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast430-EverythingisShared.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/11GoHpVbRDs"><img title="Podcast 430 - Everything is Shared (Time 0_00_26;29)" style="display:inline;background-image:none" border="0" alt="Podcast 430 - Everything is Shared (Time 0_00_26;29)" src="/blog/Lists/Posts/Attachments/830/Podcast-430---Everything-is-Shared-Time-0_00_2629_3_79D10D5E.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/11GoHpVbRDs">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 1:11:14</p>  <p><u>Links:</u></p>  <p><a href="https://n8d.at/blog/introducing-the-idea-of-archive-hub-sites/">Archive Hub Sites     <br /><a href="https://www.zdnet.com/article/microsoft-starts-rolling-out-google-g-suite-to-office-365-migration-tools/">Google G Suite to Office 365 migration tools       <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Files-restore-for-SharePoint-and-Microsoft-Teams/ba-p/480760?fbclid=IwAR0NKv4YbUnFGtuWY2yiim0Wymk8xTRg0HLxVe7D_MqZiZaoDxpPEMpfZeY">Files restore for SharePoint and Microsoft Teams         <br /><a href="https://office365itpros.com/2019/04/23/outlook-option-end-appointments-meetings-early/">Outlook’s Option to End Appointments and Meetings Early           <br /><a href="https://www.thurrott.com/mobile/android/205507/galaxy-fold-teardown-reveals-that-samsung-has-big-problems#">Foldable Phones Fail             <br /><a href="https://www.youtube.com/watch?v=ZOz3HvKDWMk">PowerApps Attachments</a>              <br /><a href="http://www.spsevents.org/city/Nashville/Nashville2019/">SPS Nashville</a>              <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>              <br /><a href="http://www.spsevents.org/city/atlanta/atlanta2019">SharePoint Saturday Atlanta               <br /></a><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>              <br /><a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a></a></a></a></a></a></p>  <p>ShortURL: <a href="/Podcast430">https://www.toddklindt.com/Podcast430</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/830/Podcast-430---Everything-is-Shared-Time-0_00_2629_3_79D10D5E.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/830/Podcast-430---Everything-is-Shared-Time-0_00_2629_3_79D10D5E.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 06 May 2019 20:08:53 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=830</guid>
    </item>
    <item>
      <title>Podcast 429 - Pro Gravity Stance</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=829</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass318D3DB49250445FA569D83107D8FE48"><p>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!</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast429-ProGravityStance.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast429-ProGravityStance.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/sI7nSZ2DuiI"><img title="Podcast 429 - Pro Gravity Stance (Time 1_23_17;12)" style="display:inline;background-image:none" border="0" alt="Podcast 429 - Pro Gravity Stance (Time 1_23_17;12)" src="/blog/Lists/Posts/Attachments/829/Podcast-429---Pro-Gravity-Stance-Time-1_23_1712_3_7CA97D56.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/sI7nSZ2DuiI">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 1:12:49</p>  <p><u>Links:</u></p>  <p><a href="https://powerapps.microsoft.com/en-us/blog/the-smallest-feature/">PowerApps - The smallest feature</a>    <br /><a href="https://developer.microsoft.com/en-us/sharepoint/blogs/new-renewable-office-365-developer-subscriptions-launch-on-april-3rd/">New renewable Office 365 developer subscriptions</a>    <br /><a href="https://sympmarc.com/2019/04/10/creating-and-deploying-a-custom-theme-in-sharepoint-online/">Creating and Deploying a Custom Theme in SharePoint Online</a>    <br /><a href="https://techcommunity.microsoft.com/t5/SharePoint/Configure-modern-search-results-to-search-all-of-your/m-p/447334">Configure modern search results to search all of your organization (rather than the current site)</a>    <br /><a href="https://www.youtube.com/watch?v=AqZkUQ78e50">PowerApps Components Intro Video</a>    <br /><a href="http://www.spsevents.org/city/Nashville/Nashville2019/">SPS Nashville</a>    <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>    <br /><a href="http://www.spsevents.org/city/atlanta/atlanta2019">SharePoint Saturday Atlanta     <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>      <br /><a href="https://www.microsoft.com/en-us/BusinessApplicationsSummit">Microsoft Business Application Summit</a></a></p>  <p>ShortURL: <a href="/Podcast429">https://www.toddklindt.com/Podcast429</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/829/Podcast-429---Pro-Gravity-Stance-Time-1_23_1712_3_7CA97D56.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/829/Podcast-429---Pro-Gravity-Stance-Time-1_23_1712_3_7CA97D56.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Wed, 24 Apr 2019 19:12:07 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=829</guid>
    </item>
    <item>
      <title>Podcast 428 - Poorly Made and Askew</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=828</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass35033E1200DF44AF8CFE23AF62A67BFE"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast428-PoorlyMadeandAskew.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast428-PoorlyMadeandAskew.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/njIzEvqTxXg"><img title="Podcast 428 - Poorly Made and Askew (Time 0_06_48;16)" style="display:inline;background-image:none" border="0" alt="Podcast 428 - Poorly Made and Askew (Time 0_06_48;16)" src="/blog/Lists/Posts/Attachments/828/Podcast-428---Poorly-Made-and-Askew-Time-0_06_4816_3_05365661.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/njIzEvqTxXg">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 38:00</p>  <p><u>Links:</u></p>  <p><a href="/blog/Lists/Posts/Post.aspx?ID=826">Office 365 PowerShell Module Installs</a>    <br /><a href="/blog/Lists/Posts/Post.aspx?ID=824">Free Office 365 Groups Webinar with SysKit</a>    <br /><a href="https://www.youtube.com/watch?v=gCyyN3IS0l4&amp;feature=youtu.be">PowerShell talk for the Utah UG</a>    <br /><a href="https://www.kcci.com/article/officers-respond-to-a-burglary-call-with-their-guns-drawn-only-to-find-a-trapped-roomba-1/27098006">Officers respond to a burglary call with their guns drawn only to find a trapped Roomba</a>    <br /><a href="https://developer.microsoft.com/en-us/sharepoint/blogs/explore-sharepoint-designs-with-the-preview-of-the-sharepoint-pnp-provisioning-service/">Explore SharePoint designs with the preview of the SharePoint Provisioning Service     <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/What-s-new-in-Microsoft-Teams-the-Enterprise-Connect-feature/ba-p/376255">New Teams functionality</a>      <br /><a href="https://blog.syskit.com/sharepoint-page-performance-why-does-it-matter">SharePoint Page Performance—Why Does It Matter?</a>      <br /><a href="https://spsnashville.org/cfs">SPS Nashville Call for Speakers</a>      <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>      <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>      <br /><a href="https://www.collabsummit.eu/">ECS</a></a></p>  <p>ShortURL: <a href="/Podcast428">https://www.toddklindt.com/Podcast428</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/828/Podcast-428---Poorly-Made-and-Askew-Time-0_06_4816_3_05365661.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/828/Podcast-428---Poorly-Made-and-Askew-Time-0_06_4816_3_05365661.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 22 Apr 2019 14:37:23 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=828</guid>
    </item>
    <item>
      <title>Podcast 427 - The Bottom of the Barrel!</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=827</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass2B43BDE302DD46DAB8BD289B319525D6"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast427-TheBottomoftheBarrel.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast427-TheBottomoftheBarrel.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/n6dWqSRpDro"><img title="Podcast 427 - The Bottom of the Barrel! (Time 0_02_50;22)" style="display:inline;background-image:none" border="0" alt="Podcast 427 - The Bottom of the Barrel! (Time 0_02_50;22)" src="/blog/Lists/Posts/Attachments/827/Podcast-427---The-Bottom-of-the-Barrel-Time-0_02_5022_3_2FF7ECD7.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/n6dWqSRpDro">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 51:34</p>  <p><u>Links:</u></p>  <p><a href="https://www.linkedin.com/feed/update/urn:li:activity:6516393228781129728/">OneDrive and SharePoint Content Team job opening</a>    <br /><a href="https://docs.microsoft.com/en-us/sharepoint/dev/community/open-source-projects">SharePoint Dev Open Source</a>    <br /><a href="https://www.npmjs.com/~officedevpnp">Office Dev PnP</a>     <br /><a href="https://blog.syskit.com/sharepoint-farm-documentation-save-your-neck?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=sp_doc_todd_blog">How SharePoint Farm Documentation Can Save Your Neck</a>    <br /><a href="https://blog.syskit.com/">SysKit Blog</a>    <br /><a href="https://spsnashville.org/cfs">SPS Nashville Call for Speakers</a>    <br /><a href="http://www.spsevents.org/city/charlotte/clt2019">SPS Charlotte</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>    <br /><a href="https://www.collabsummit.eu/">ECS</a> </p>  <p>ShortURL: <a href="/Podcast427">https://www.toddklindt.com/Podcast427</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/827/Podcast-427---The-Bottom-of-the-Barrel-Time-0_02_5022_3_2FF7ECD7.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/827/Podcast-427---The-Bottom-of-the-Barrel-Time-0_02_5022_3_2FF7ECD7.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 10 Apr 2019 13:33:42 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=827</guid>
    </item>
    <item>
      <title>Office 365 PowerShell Module Installs</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=826</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass88B7333706FF4D04AE2A1C13111AA431"><p>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.</p>
  <p>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 <a href="https://www.powershellgallery.com/">PowerShell Gallery</a>.</p>
  <p>To see which modules you have installed and which version they are run this:</p>
  <p><font face="Consolas">Get-InstalledModule | select name, version</font></p>
  <p>To suppress the warning you get when installing from the PowerShell Gallery, run this:</p>
  <p><font face="Consolas">Set-PSRepository -Name PSGallery -InstallationPolicy Trusted</font></p>
  <p><font face="Consolas"><font face="Verdana">To update to latest version of a module use the</font> Update-Module </font>cmdlet. You can use the technique in this blog post, <a href="/blog/Lists/Posts/Post.aspx?ID=832">PowerShell to Update ​your PowerShell Modules​</a>​​, to see which version you have and whether it's the latest. </p>
  <p><strong><u><font size="3">Official Microsoft Modules</font></u></strong></p>
  <p><a href="http://www.microsoft.com/en-us/download/details.aspx?id=41950">Sign-in assistant</a> (needed for MSOL and AzureAD Modules)</p>
  <p><a href="https://docs.microsoft.com/en-us/powershell/azure/active-directory/overview?view=azureadps-1.0">Microsoft Online</a> (1.1.183.66)    <br />Original Tenant Directory Management    <br />Prefix: MSOL    <br /><font face="Consolas">Install-Module -Name <a href="https://www.powershellgallery.com/packages/MSOnline">MSOnline</a></font></p>
  <p><a href="https://docs.microsoft.com/en-us/powershell/module/Azuread/?view=azureadps-2.0">AzureAD</a> (2.0.2.140)   <br />Newer Tenant Directory Management    <br />Prefix: AzureAD    <br /><font face="Consolas">Install-Module </font><span style="font-family:consolas;font-size:10.6667px">-</span><span style="font-family:consolas;font-size:10.6667px">Name </span><a href="https://www.powershellgallery.com/packages/AzureAD" style="font-family:consolas;font-size:8pt">azuread</a></p>
  <p><a href="https://docs.microsoft.com/en-us/powershell/azure/active-directory/install-adv2?view=azureadps-2.0">AzureADPreview</a> (2.0.2.138)    <br />Latest Tenant Directory Management    <br />Prefix: AzureAD    <br /><font face="Consolas">Install-Module -Name <a href="https://www.powershellgallery.com/packages/AzureADPreview">AzureADPreview</a></font></p>
  <p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=35588">SharePoint Online</a> (16.0.21909.12000)    <br />Manage SharePoint sites and related services    <br />Prefix: SPO    <br />Install-Module -Name <a href="https://www.powershellgallery.com/packages/Microsoft.Online.SharePoint.PowerShell">Microsoft.Online.SharePoint.PowerShell</a></p>
  <p><a href="https://blogs.technet.microsoft.com/skypehybridguy/2017/11/07/microsoft-teams-powershell-support/">Teams</a> <br /><a href="https://www.powershellgallery.com/packages/MicrosoftTeams/0.9.6">Microsoft Teams Management Preview</a> <span style="font-size:10.6667px">(</span><span style="font-size:10.6667px">0.9.6) ​</span><br />(uses Graph beta/preview APIs)   <br />Prefix: Team    <br /><font face="Consolas">Install-Module -Name MicrosoftTeams -RequiredVersion 0.9.6</font><br /></p>
<p><span style="font-size:10.6667px"><a href="https://www.powershellgallery.com/packages/MicrosoftTeams/1.0.0">Microsoft Teams Management</a> (3.0.0)<br />(uses 1.0 Graph API)</span><span style="font-size:10.6667px"> </span><br style="font-size:10.6667px" /><span style="font-size:10.6667px">Prefix: Team </span><br style="font-size:10.6667px" /><font face="Consolas" style="font-size:10.6667px">Install-Module -Name MicrosoftTeams</font><font face="Consolas"><br /></font></p>
<p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=39366">Skype for Business​</a><span style="font-size:8pt"><br /></span><span style="font-size:8pt">No PowerShell module install from Gallery</span><br /><a href="https://docs.microsoft.com/en-us/office365/enterprise/powershell/manage-skype-for-business-online-with-office-365-powershell">Manage Skype for Business Online with Office 365 PowerShell</a><br /></p>
<p><a href="https://www.powershellgallery.com/packages/ExchangeOnlineManagement">Exchange Online Management​ </a>(2.0.5)<br />Manage Exchange Online without PSRemoting<br />Prefix: EXO<br /><span style="font-size:8pt">Install-Module -Name ExchangeOnlineManagement<br /></span><a href="https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/connect-to-exchange-online-powershell/connect-to-exchange-online-powershell?view=exchange-ps" style="font-size:8pt">Connect to Exchange Online PowerShell​</a></p>
<p><a href="https://www.powershellgallery.com/packages/Microsoft.PowerApps.PowerShell">PowerApps and Flow for Makers​</a> (1.0.20)<br />User management for Flow and PowerApps<br />Prefix: PowerApp (for most cmdlets)<br />Install-Module -Name Microsoft.PowerApps.PowerShell<br /></p>
<p><a href="https://www.powershellgallery.com/packages/Microsoft.PowerApps.Administration.PowerShell">PowerApps and Flow for Admins</a> (2.0.139)<br />Tenant admin managent of Flow and PowerApps<br />Prefix: AdminPowerApp (for most cmdlets)<br />Install-Module -Name Microsoft.PowerApps.Administration.PowerShell <span style="font-size:10.6667px">–AllowClobber</span><span style="font-size:10.6667px"> ​</span><br /></p>
<p><span style="font-size:10.6667px"><a href="https://www.powershellgallery.com/packages/Microsoft.Graph">Graph SDK​</a> (1</span><span style="font-size:10.6667px">.9.0)<br /><a href="https://github.com/microsoftgraph/msgraph-sdk-powershell">Beta for Microsoft Graph​</a><br />Prefix: MG<br /></span><span style="font-size:10.6667px">Install-Module Microsoft.Graph</span><br /></p>
<p><strong style="font-size:8pt"><u><font size="3"><br />3rd Party Installs</font></u></strong><br /></p>
  <p><a href="https://github.com/pnp/powershell">PnP.PowerShell</a> (1.8.0)<br />Invaluable Module for working with SPO and M365<br />Install-Module -Name <a href="https://www.powershellgallery.com/packages/pnp.powershell">PnP.PowerShell​</a></p>
<p><a href="https://github.com/SharePoint/PnP-PowerShell">SharePoint PnP PowerShell</a> (3.29.2101.0) (Final Version)<br />Old version. Upgrade to PnP.PowerShell<br />Install-Module <span style="font-family:consolas;font-size:10.6667px">-</span><span style="font-family:consolas;font-size:10.6667px">Name</span><span style="font-size:8pt"> </span><a href="https://www.powershellgallery.com/packages/SharePointPnPPowerShellOnline" style="font-size:8pt">SharePointPnPPowerShellOnline</a></p>
<p><strong style="font-size:8pt"><br /></strong></p>
<p><strong style="font-size:8pt">Last Updated 12/12/2021</strong></p>
  <p>I hope this comes in handy. Let me know if there are any other modules I should consider adding.</p>
  <p>tk</p>
  <p>ShortUrl: <a href="/POSHOffice365Modules">https://www.toddklindt.com/POSHOffice365Modules</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=8&amp;RootFolder=*"></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell</category>
      <pubDate>Mon, 01 Apr 2019 08:00:01 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=826</guid>
    </item>
    <item>
      <title>Podcast 426 - Going with the Flow</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=825</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass8BAD5AD15BB64BEBA485A3BA0D83F008"><p>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</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast426-GoingwiththeFlow.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast426-GoingwiththeFlow.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/36r1GqL6-h4"><img title="Podcast 426 - Going with the Flow (Time 0_42_30;09)" style="display:inline;background-image:none" border="0" alt="Podcast 426 - Going with the Flow (Time 0_42_30;09)" src="/blog/Lists/Posts/Attachments/825/Podcast-426---Going-with-the-Flow-Time-0_42_3009_3_3A825974.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/36r1GqL6-h4">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 45:53</p>  <p><u>Links:</u></p>  <p><a href="https://support.office.com/en-us/article/sync-your-documents-pictures-and-desktop-folders-with-onedrive-d61a7930-a6fb-4b95-b28a-6552e77c3057?ui=en-US&amp;rs=en-US&amp;ad=US">Setting up OneDrive Folder Protection</a>    <br /><a href="https://amzn.to/2ST187X">Quite Mouse</a>    <br /><a href="https://portal.office.com/adminportal/home#/MessageCenter?id=MC175518%26MCLinkSource=DigestMail">Connected web parts for SharePoint Online</a>    <br /><a href="https://portal.office.com/adminportal/home#/MessageCenter?id=MC175518%26MCLinkSource=DigestMail">Flow endpoint allows you to send a message in Teams</a>    <br /><a href="https://www.w3schools.com/graphics/svg_intro.asp">SVG Tutorial</a>    <br /><a href="https://www.businessinsider.com/microsoft-windows-7-users-upgrade-windows-10-april-2019-3">Microsoft will stop updating Windows 7</a>    <br /><a href="https://www.twilio.com">Twilio</a>    <br /><a href="https://portal.office.com/adminportal/home#/MessageCenter?id=MC175683%26MCLinkSource=MajorUpdate">Collab with LinkedIn connections</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://events.eventzilla.net/e/powerapps-and-flow-are-awesome-with-shane-young-2138727938">Omaha PowerApps and Flow class</a>    <br /><a href="https://seforum.se/">SEF 2019</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast426">https://www.toddklindt.com/Podcast426</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/825/Podcast-426---Going-with-the-Flow-Time-0_42_3009_3_3A825974.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/825/Podcast-426---Going-with-the-Flow-Time-0_42_3009_3_3A825974.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 27 Mar 2019 13:13:11 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=825</guid>
    </item>
    <item>
      <title>Free Office 365 Groups Webinar with SysKit</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=824</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass202FEB5FFEBC4ED3B4EB32D4F656FF47"><p>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. </p>  <p>On April 16th I’ll be doing a <a href="https://solutions.syskit.com/spsec/webinar-office-365-groups?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=O365_groups_todd_webinar">free Webinar</a> 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. </p>  <p>You can <a href="https://solutions.syskit.com/spsec/webinar-office-365-groups?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=O365_groups_todd_webinar">register here</a> 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. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/824/wlEmoticon-smile_2_4D5B6D9C.png" /></p>  <p>tk</p>  <p>ShortURL: <a href="/SysKitGroupsWebinar">https://www.toddklindt.com/SysKitGroupsWebinar</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/824/wlEmoticon-smile_2_4D5B6D9C.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/824/wlEmoticon-smile_2_4D5B6D9C.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Mon, 25 Mar 2019 14:11:12 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=824</guid>
    </item>
    <item>
      <title>Podcast 425 - Cat Fancy</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=823</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1B984E62F9FB4F1394F7F477DC4A2BA3"><p>This week Todd and Shane mourn the loss of the Band and Health Dashboard before they jump into all the cool things you can do with your phone and Microsoft apps. Following with some PowerShell goodness and a few other technical tips and tricks.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast425-CatFancy.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast425-CatFancy.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/E-2-SnLzEPM"><img title="Podcast 425 - Cat Fancy (Time 0_07_11;12)" style="display:inline;background-image:none" border="0" alt="Podcast 425 - Cat Fancy (Time 0_07_11;12)" src="/blog/Lists/Posts/Attachments/823/Podcast-425---Cat-Fancy-Time-0_07_1112_3_4CCE76A1.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/E-2-SnLzEPM">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 52:03</p>  <p><u>Links:</u></p>  <p>02:39 <a href="https://www.windowscentral.com/microsoft-band-apps-and-health-dashboard-getting-ax-march-31?utm_source=wc_tw&amp;utm_medium=tw_card&amp;utm_content=62886&amp;utm_campaign=social">Microsoft Band apps and Health Dashboard getting the ax on May 31</a>     <br />07:26 <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/02/28/new-to-microsoft-365-in-february-advance-security-and-empower-a-modern-workplace/?utm_source=t.co&amp;utm_medium=referral#excel">Create Excel spreadsheet from picture of data</a>     <br />12:09 <a href="https://www.youtube.com/watch?v=kWUvttbYpu4">PowerApps barcode scanner</a>     <br />20:03 <a href="https://github.com/SharePoint/PnP-PowerShell/issues/1370#issuecomment-469172886">Only use one version of PnP PowerShell at once</a>    <br /> 22:50 <a href="https://www.powershellgallery.com/packages/Microsoft.Online.SharePoint.PowerShell/16.0.8615.1200">SharePoint Online February PowerShell update</a>  <br />31:28 <a href="https://gist.github.com/alirobe/7f3b34ad89a159e6daa1">Ali's Windows 10 Debloater</a>     <br />36:20 <a href="https://microsoftteams.uservoice.com/forums/555103-public/suggestions/17750851-i-want-to-use-multiple-teams-accounts-at-the-same?fbclid=IwAR2N5YaTOc3cFvVGxmSQUizinZWLHccQzTBTXaAGvGLCx3Ufaxy3kOlY9u4">I want to use multiple Teams accounts at the same time</a>     <br />38:43 <a href="https://thomasdaly.net/2017/02/24/branding-hide-newsfeed-onedrive-andor-sites-from-the-waffle-for-sharepoint-2016/">Hide Newsfeed, OneDrive and/or Sites from the Waffle for SharePoint 2016</a>     <br />39:41 <a href="https://betanews.com/2019/03/04/facebook-search-by-mobile-number-2fa/">If you've added your phone number to Facebook for 2FA security, it can be used to search for you</a>     <br /><a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>     <br /><a href="https://www.powerapps911.com/training">PowerApps and Flow Training</a>     <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>     <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>     <br /><a href="https://seforum.se/">SEF 2019</a>     <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast425">https://www.toddklindt.com/Podcast425</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/823/Podcast-425---Cat-Fancy-Time-0_07_1112_3_4CCE76A1.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/823/Podcast-425---Cat-Fancy-Time-0_07_1112_3_4CCE76A1.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 12 Mar 2019 22:40:59 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=823</guid>
    </item>
    <item>
      <title>Podcast 424 - Pulls and Pushes Go in the Wrong Direction</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=822</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE134228AFE324001A809DC6755903DE3"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast424-PullsandPushesGointheWrongDirection.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast424-PullsandPushesGointheWrongDirection.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/3ECToYb3tTQ"><img title="Podcast 424 - Pulls and Pushes Go in the Wrong Direction (Time 0_22_05;28)" style="display:inline;background-image:none" border="0" alt="Podcast 424 - Pulls and Pushes Go in the Wrong Direction (Time 0_22_05;28)" src="/blog/Lists/Posts/Attachments/822/Podcast-424---Pulls-and-Pushes-Go-in-the-Wrong-Direction-Time-0_22_0528_3_46E50438.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/3ECToYb3tTQ">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 39:42</p>  <p><u>Links:</u></p>  <p><a href="https://blog.xpnsec.com/azuread-connect-for-redteam/">Azure AD Connect for Red Teamers</a>    <br /><a href="https://www.powershellgallery.com/packages/SharePointPnPPowerShell2019/3.6.1902.2">PnP PowerShell has a version for SharePoint 2019</a>    <br /><a href="https://github.com/PowerShell/SharePointDsc">Share Point DSC</a>    <br /><a href="https://github.com/Sycnex/Windows10Debloater">Windows 10 Debloater</a>    <br /><a href="https://www.summit-consulting.net/blog/why-i-attended-sptechcon-austin-2019">Why I attended SPTechCon Austin 2019</a>    <br /><a href="https://amzn.to/2Tk1tG0">Surface Go</a>    <br /><a href="https://amzn.to/2EzCFzF">USB C hub</a>    <br /><a href="http://www.slate.com/articles/podcasts/slate_money.html">Slate Money Podcast</a>    <br /><a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br /><a href="https://www.powerapps911.com/training">PowerApps and Flow Training</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://seforum.se/">SEF 2019</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast424">https://www.toddklindt.com/Podcast424</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/822/Podcast-424---Pulls-and-Pushes-Go-in-the-Wrong-Direction-Time-0_22_0528_3_46E50438.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/822/Podcast-424---Pulls-and-Pushes-Go-in-the-Wrong-Direction-Time-0_22_0528_3_46E50438.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 05 Mar 2019 22:19:55 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=822</guid>
    </item>
    <item>
      <title>Podcast 423 - I Like it When I Like it</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=821</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassD37FF96B5B3D4E748FEAAEDA680328EF"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast423-ILikeitWhenILikeit.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast423-ILikeitWhenILikeit.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/pZbJzxBLWTg"><img title="Podcast 423 - I Like it When I Like it (Time 0_00_06;00)" style="display:inline;background-image:none" border="0" alt="Podcast 423 - I Like it When I Like it (Time 0_00_06;00)" src="/blog/Lists/Posts/Attachments/821/Podcast-423---I-Like-it-When-I-Like-it-Time-0_00_0600_3_2D81EA34.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/pZbJzxBLWTg">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 55:33</p>  <p><u>Links:</u></p>  <p>10:34 <a href="https://blogs.technet.microsoft.com/stefan_gossner/2019/02/20/important-critical-regression-in-february-2019-cu-for-sharepoint-2016/">Critical regression in February 2019 CU for SharePoint 2016</a>    <br />14:10 <a href="https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-2017">SQL Decimal and Numeric are the same column</a>    <br />15:00 <a href="https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-2017">SQL Column Definitions</a>    <br />20:06 <a href="https://powerapps.microsoft.com/en-us/blog/components-available-in-preview/">PowerApps components</a>    <br />33:01 <a href="https://www.petri.com/how-to-send-emails-to-onenote?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-send-emails-to-onenote">How to Send Emails to OneNote</a>    <br />40:25 <a href="https://twitter.com/bonniespringer/status/1098219772121108480">Fan of the week, Bonne Springer</a>    <br />50:54 <a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br />51:00 <a href="https://www.powerapps911.com/training">PowerApps and Flow Training</a>    <br />51:10 <a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br />51:20 <a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br />51:30 <a href="https://seforum.se/">SEF 2019</a>    <br />51:40 <a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast423">https://www.toddklindt.com/Podcast423</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/821/Podcast-423---I-Like-it-When-I-Like-it-Time-0_00_0600_3_2D81EA34.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/821/Podcast-423---I-Like-it-When-I-Like-it-Time-0_00_0600_3_2D81EA34.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 04 Mar 2019 17:02:00 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=821</guid>
    </item>
    <item>
      <title>Podcast 422 - Rained Scooters</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=820</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassA5A3BF462A6B47A6AA60BCD343545F7C"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast422-RainedScooters.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast422-RainedScooters.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_2_4D5B40D9.png"><img title="Podcast 422 - Rained Scooters (Time 0_26_15;07)" style="display:inline;background-image:none" border="0" alt="Podcast 422 - Rained Scooters (Time 0_26_15;07)" src="/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_thumb_4D5B40D9.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/2s3g-IA4I_M">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 45:47   <br /></p>  <p><u>Links:</u></p>  <p>15:06 <a href="https://foxdeploy.com/2019/02/07/life-after-write-debug/">Don't use Write-Debug</a>    <br />20:17 <a href="https://blog.syskit.com/sharepoint-page-performance-why-does-it-matter?utm_source=facebook&amp;utm_medium=social&amp;utm_campaign=sp-page-pperformance-blog&amp;utm_term=blog%20post">SharePoint Page Performance—Why Does It Matter?</a>    <br />26:54 <a href="https://aka.ms/o365twins">Office 356 vs Office 2019</a>    <br />27:00 <a href="https://erwinbierens.com/switch-office-2016-to-monthly-targeted-channel/">Move to monthly release</a>    <br />32:47 <a href="https://techcommunity.microsoft.com/t5/Windows-IT-Pro-Blog/The-perils-of-using-Internet-Explorer-as-your-default-browser/ba-p/331732">The perils of using Internet Explorer as your default browser</a>    <br /><a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://seforum.se/">SEF 2019</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast422">https://www.toddklindt.com/Podcast422</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_2_4D5B40D9.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_2_4D5B40D9.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_thumb_4D5B40D9.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/820/Podcast-422---Rained-Scooters-Time-0_26_1507_thumb_4D5B40D9.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 20 Feb 2019 22:28:08 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=820</guid>
    </item>
    <item>
      <title>Podcast 421 - We're Idiots</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=819</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF20658C7DBC844EFAEAACF36E72C8FB0"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast421-We-reIdiots.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast421-We-reIdiots.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/i5ivaqDjCA0"><img title="Podcast 421 - We're Idiots (Time 0_24_25;16)" style="display:inline;background-image:none" border="0" alt="Podcast 421 - We're Idiots (Time 0_24_25;16)" src="/blog/Lists/Posts/Attachments/819/Podcast-421---Were-Idiots-Time-0_24_2516_3_53EC937D.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/i5ivaqDjCA0">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 53:42</p>  <p><u>Links:</u></p>  <p>06:00 <a href="https://amzn.to/2UIzrA4">Foot warmer</a>    <br />17:50 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/January-2019-SharePoint-Modernization-News/ba-p/320552">January 2019 SharePoint Modernization News</a>    <br />25:03 <a href="https://admin.microsoft.com/AdminPortal/home?switchtomodern=true#/MessageCenter?id=MC172231">A new mass delete notification is coming to SharePoint Online and OneDrive for Business</a>    <br />26:00 <a href="/blog/Lists/Posts/Post.aspx?ID=709">How to Keep up with Office 365 Changes</a>    <br />26:30 <a href="/blog/Lists/Posts/Post.aspx?ID=806">Bulk Undelete Files in Office 365 and SharePoint Online with PnP PowerShell</a>    <br />33:07 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Organize-your-SharePoint-sites-with-megamenu-navigation-and-new/ba-p/328068">Organize your site navigation with SharePoint megamenus</a>    <br />34:00 <a href="https://www.computerworld.com/article/3338036/cloud-computing/6-tips-to-get-mega-value-from-the-new-megamenu-navigation-for-sharepoint.html">6 tips to get mega value from the new megamenu navigation for SharePoint</a>    <br />36:06 <a href="https://www.youtube.com/watch?v=if_mFIfi5PM">PowerApps Tabbed Forms</a>    <br /><a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://seforum.se/">SEF 2019</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast421">https://www.toddklindt.com/Podcast421</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/819/Podcast-421---Were-Idiots-Time-0_24_2516_3_53EC937D.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/819/Podcast-421---Were-Idiots-Time-0_24_2516_3_53EC937D.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 18 Feb 2019 20:54:52 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=819</guid>
    </item>
    <item>
      <title>Podcast 420 - Enhance Your Calm</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=818</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass2ADAE41817FB46759CE699A98AE5281D"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast420-EnhanceYourCalm.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast420-EnhanceYourCalm.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/m-lH5-o-CgU"><img title="Podcast 420 - Enhance Your Calm (Time 0_20_16;00)" style="display:inline;background-image:none" border="0" alt="Podcast 420 - Enhance Your Calm (Time 0_20_16;00)" src="/blog/Lists/Posts/Attachments/818/Podcast-420---Enhance-Your-Calm-Time-0_20_1600_3_64299766.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/m-lH5-o-CgU">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 51:16</p>  <p><u>Links:</u></p>  <p><a href="https://powerbi.microsoft.com/en-us/blog/on-premises-data-gateway-management-in-the-power-platform-admin-center/">On-premises data gateway management in the Power platform admin center</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Delivering-SharePoint-modern-experiences/ba-p/315023">Modern vs. Classic and the change</a>    <br /><a href="https://getpocket.com/explore/item/the-secret-algorithm-behind-learning?_lrsc=b54fc314-0863-4970-9b6e-a4ce417d3736">The Secret Algorithm Behind Learning</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/Updated-IT-Pro-and-Admin-documentation/ba-p/326674">New Teams documentation</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Healthcare-and-Life-Sciences/Managing-Microsoft-Groups-in-Office-365-to-Avoid-Potential-Group/ba-p/325715">Managing Microsoft Groups in Office 365 to Avoid Potential Group Sprawl</a>    <br /><a href="https://techcrunch.com/2019/01/28/dropbox-snares-hellosign-for-230m-gets-workflow-and-esignature/">Dropbox to Acquire E-Signature Software Company HelloSign</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/January-2019-SharePoint-Modernization-News/ba-p/320552">SharePoint Lists getting cooler and cooler</a>    <br /><a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://seforum.se/">SEF 2019</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast420">https://www.toddklindt.com/Podcast420</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/818/Podcast-420---Enhance-Your-Calm-Time-0_20_1600_3_64299766.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/818/Podcast-420---Enhance-Your-Calm-Time-0_20_1600_3_64299766.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 05 Feb 2019 22:33:54 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=818</guid>
    </item>
    <item>
      <title>Podcast 419 - My Tootsies are Cold</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=817</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassE67618DDA59D438084379D3E11E422B3"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast419-MyTootsiesareCold.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast419-MyTootsiesareCold.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_2_1A767118.png"><img title="Podcast 419 - My Tootsies are Cold (Time 0_16_16;20)" style="display:inline;background-image:none" border="0" alt="Podcast 419 - My Tootsies are Cold (Time 0_16_16;20)" src="/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_thumb_4863C3D0.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/AEsGx1txZzw">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 51:59</p>  <p><u>Links:</u></p>  <p>21:16 <a href="https://powerapps.microsoft.com/en-us/blog/improved-datasource-and-field-selection-in-canvas-apps/">PowerApps shipped some new UI and CDS functionality</a>    <br />26:45 <a href="https://www.youtube.com/watch?v=wF0MmiaGO_o">PowerApps Azure Blob Storage</a>    <br />34:10 <a href="https://www.powerapps911.com/training">PowerApps and Flow Training</a>    <br />48:34 <a href="https://www.eventbrite.com/e/sharepointo365-saturday-kansas-city-2019-tickets-55174844445?ref=enivtefor001&amp;invite=MTU3NzgyNTEvdG9kZEBrbGluZHQub3JnLzA%3D%0a&amp;utm_source=eb_email&amp;utm_medium=email&amp;utm_campaign=inviteformalv2&amp;utm_term=eventpage">SharePoint Saturday Kansas City</a>    <br />48:54 <a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br />48:55 <a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br />48:56 <a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br />48:57 <a href="https://seforum.se/">SEF 2019</a>    <br />48:58 <a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast419">https://www.toddklindt.com/Podcast419</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_2_1A767118.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_2_1A767118.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_thumb_4863C3D0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/817/Podcast-419---My-Tootsies-are-Cold-Time-0_16_1620_thumb_4863C3D0.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 28 Jan 2019 20:06:54 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=817</guid>
    </item>
    <item>
      <title>Podcast 418 - I'm a Teapot</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=816</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass9D54F03DA15A4F02B88C4B9A62A2D587"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast418-I-maTeapot.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast418-I-maTeapot.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/mFYP6fZiHCA"><img title="Podcast 418 - I'm a Teapot (Time 0_04_25;19)" style="display:inline;background-image:none" border="0" alt="Podcast 418 - I'm a Teapot (Time 0_04_25;19)" src="/blog/Lists/Posts/Attachments/816/Podcast-418---Im-a-Teapot-Time-0_04_2519_3_3AEDFB99.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/mFYP6fZiHCA">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 58:30</p>  <p><u>Links:</u></p>  <p>1:00 <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418">HTTP 418</a>    <br />08:04 <a href="http://www.lorigowin.com/sitepages/tkcharity.aspx">Charity</a>    <br />16:11 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Delivering-SharePoint-modern-experiences/ba-p/315023">Tenant setting for classis lists/libraries going away on April 1</a>    <br />17:00 <a href="https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-scanner">SharePoint Modernization Scanner</a>    <br />20:28 <a href="https://laurakokkarinen.com/the-ultimate-guide-to-sharepoint-site-designs-and-site-scripts/">THE ULTIMATE GUIDE TO SHAREPOINT SITE DESIGNS AND SITE SCRIPTS </a>    <br />20:29 <a href="https://www.sitedesigner.io">https://www.sitedesigner.io</a>    <br />20:30 <a href="https://sptools.netlify.com">https://sptools.netlify.com</a>    <br />25:00 <a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/SharePoint-Roadmap-Pitstop-December-2018/ba-p/307754">View and apply site designs from within a SharePoint site</a>    <br />30:12 <a href="https://github.com/pnp/office365-cli/blob/2b4f0052c476763562be326524ec0404c19a40c0/docs/manual/docs/about/release-notes.md#v1130">Office 365 CLI release 1/14 v1.13.0</a>    <br />39:31 <a href="https://pnp.github.io/pnpjs/">PnPJS</a>    <br />39:32 <a href="https://sharepoint.github.io/sp-dev-fx-controls-react/">Reusable React controls for your SharePoint Framework solutions</a>    <br />39:33 <a>Reusable property pane controls for the SharePoint Framework solutions</a>     <br />39:34 <a href="https://pnp.github.io/generator-spfx/">PnP SPFx Yeoman Generator</a>    <br />52:16 <a href="https://www.facebook.com/groups/Collab365/permalink/1894335617331338/">Collab 365 monthly virtual conferences - see re: PowerApps</a>    <br />54:46 <a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br />54:47 <a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br />54:48 <a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br />54:49 <a href="https://seforum.se/">SEF 2019</a>    <br />54:50 <a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a>    <br />54:51 <a href="https://www.collabsummit.eu">European Collaboration Summit 2019</a></p>  <p>ShortURL: <a href="/Podcast418">https://www.toddklindt.com/Podcast418</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/816/Podcast-418---Im-a-Teapot-Time-0_04_2519_3_3AEDFB99.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/816/Podcast-418---Im-a-Teapot-Time-0_04_2519_3_3AEDFB99.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 28 Jan 2019 14:28:15 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=816</guid>
    </item>
    <item>
      <title>Free Consulting for Furloughed Workers</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=815</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassBFBF6BDEA8A64ED5B3B2BDC134628D4D"><p>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. </p>  <blockquote>   <p><strong>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 </strong><a href="mailto:furlough@toddklindt.com"><strong>furlough@toddklindt.com</strong></a><strong>. We’ll work out a time and some topics.</strong></p> </blockquote>  <p>Now, hopefully this will all be resolved soon and no one will be able to take me up on my offer. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/815/wlEmoticon-smile_2_77489567.png" /></p>  <p>tk</p>  <p>ShortURL: <a href="/Furlough">https://www.toddklindt.com/Furlough</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/815/wlEmoticon-smile_2_77489567.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/815/wlEmoticon-smile_2_77489567.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Tue, 22 Jan 2019 14:30:56 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=815</guid>
    </item>
    <item>
      <title>Podcast 417 - Expectation Failed</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=814</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass6311DBE48B0344738431EB59D679DC1D"><p>Todd runs the show today while Shane is off playing with PowerApps and Flow. He tells us about some cool technology that could be coming out at CES but mostly talks about some cool things that Microsoft has provided: SharePoint Migration Tools, Updates to My Analytics, Patches, and GitHub improvements.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast417-ExpectationFailed.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast417-ExpectationFailed.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/E8M3cfJky1w"><img title="Podcast 417 - Expectation Failed (Time 0_00_15;22)" style="display:inline;background-image:none" border="0" alt="Podcast 417 - Expectation Failed (Time 0_00_15;22)" src="/blog/Lists/Posts/Attachments/814/Podcast-417---Expectation-Failed-Time-0_00_1522_3_6F5F1320.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/E8M3cfJky1w">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 33:43</p>  <p><u>Links:</u></p>  <p><a href="http://www.lorigowin.com/sitepages/tkcharity.aspx">Charity</a>    <br /><a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/01/02/myanalytics-the-fitness-tracker-for-work-is-now-more-broadly-available/">MyAnalytics, the fitness tracker for work, is now more broadly available</a>    <br /><a href="https://www.hanselman.com/blog/ScottHanselmansCompleteListOfProductivityTips.aspx">Scott Hanselman's Complete List of Productivity Tips</a>    <br /><a href="https://www.cordcuttersnews.com/the-biggest-cord-cutting-news-so-far-from-ces-5g-8k-dvrs/">Cord Cutting new from CES</a>    <br /><a href="https://onedrive.uservoice.com/forums/913522-onedrive-on-windows/suggestions/36377071-pause-syncing-with-powershell">Pause Syncing with PowerShell</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Kick-start-the-new-year-and-your-cloud-migration-with-new/ba-p/309312">Kick start the new year and your cloud migration with new SharePoint Migration Tool improvements</a>    <br /><a href="https://blog.github.com/2019-01-07-new-year-new-github/">New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offering</a>    <br /><a href="https://www.powerapps911.com/training">PowerApps and Flow Training</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast417">https://www.toddklindt.com/Podcast417</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/814/Podcast-417---Expectation-Failed-Time-0_00_1522_3_6F5F1320.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/814/Podcast-417---Expectation-Failed-Time-0_00_1522_3_6F5F1320.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Wed, 09 Jan 2019 22:42:03 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=814</guid>
    </item>
    <item>
      <title>Podcast 416 - 30 Second Skip</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=813</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass8FCC866877CE4C0CBFEEE2C6A0C0F483"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast416-30SecondSkip.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast416-30SecondSkip.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/_yjoX6zLzis"><img title="Podcast 416 - 30 Second Skip (Time 0_34_58;03)" style="display:inline;background-image:none" border="0" alt="Podcast 416 - 30 Second Skip (Time 0_34_58;03)" src="/blog/Lists/Posts/Attachments/813/Podcast-416---30-Second-Skip-Time-0_34_5803_3_17B2F016.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/_yjoX6zLzis">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 54:23</p>  <p><u>Links:</u></p>  <p><a href="https://onedrive.uservoice.com/forums/913522-onedrive-on-windows/suggestions/36377071-pause-syncing-with-powershell">Pause Syncing with PowerShell</a>    <br /><a href="/blog/Lists/Posts/Post.aspx?ID=811">Help me pause OneDrive Sync with PowerShell</a>    <br /><a href="https://erwinbierens.com/switch-office-2016-to-monthly-targeted-channel/">Change your Office update cadence</a>    <br /><a href="https://www.petri.com/how-to-enable-windows-sandbox">How to Enable Windows Sandbox</a>    <br /><a href="https://amzn.to/2CM2UTH">WeMo Mini Smart Plug</a>    <br /><a href="https://www.PowerApps911.com/training">PowerApps and Flow Training</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast416">https://www.toddklindt.com/Podcast416</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/813/Podcast-416---30-Second-Skip-Time-0_34_5803_3_17B2F016.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/813/Podcast-416---30-Second-Skip-Time-0_34_5803_3_17B2F016.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Tue, 08 Jan 2019 20:48:33 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=813</guid>
    </item>
    <item>
      <title>Changing Windows 10’s Language to English with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=812</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass08F643704B3D47CAB5A38024DA4FE07D"><p>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!” </p>  <p>Here’s the TL;DR of what I ran:</p>  <blockquote>   <p><font face="Courier New"><strong>Set-Culture en-US         <br />Set-WinSystemLocale en-US          <br />Set-WinHomeLocation 0xF4          <br />Set-WinUILanguageOverride en-US</strong></font></p>    <p><font face="Courier New"><strong>logoff</strong></font></p> </blockquote>  <p>None of it takes place until you log back in, so I added the <strong><font face="Courier New">logoff</font></strong> at the end.</p>  <p>With PowerShell, knowing the answer is good, but knowing how to get the answer is even better. One of my friends, <a href="https://jdhitsolutions.com/blog/">Jeff Hicks</a>, always does a good job explaining the process of find things in PowerShell, so I thought I’d do that here. </p>  <p>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:</p>  <blockquote>   <p><font face="Courier New"><strong>Get-Help language</strong></font></p> </blockquote>  <p>hoping PowerShell could nudge m in the right direction. I got this back:</p>  <p><a href="/blog/Lists/Posts/Attachments/812/image_2_6C366E48.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/812/image_thumb_6C366E48.png" width="597" height="288" /></a></p>  <p>It wasn’t <em>exactly </em>what I needed, but it did show me there was a module, <strong>International</strong>, that was probably a good place to start. And knowing that I needed to change things, I was mostly interested in the <strong>Set</strong> cmdlets. There were also a couple of good help topics, <strong><font face="Courier New">about_Language_Keywords</font></strong> and <strong><font face="Courier New">about_Language_Modes</font></strong> 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 <strong><font face="Courier New">Get-Command -Module International</font></strong>. That filled in the blanks for me.</p>  <p><a href="/blog/Lists/Posts/Attachments/812/image_4_6C366E48.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/812/image_thumb_1_6C366E48.png" width="601" height="278" /></a></p>  <p>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 <strong><font face="Courier New">help <em>cmdletname</em> –examples</font></strong> paradigm to figure out what the parameter values should be. </p>  <p>After I was finished and was searching to see if I was right I found this Technet article,    <p><a href="https://gallery.technet.microsoft.com/scriptcenter/How-to-change-display-80448f7f">How to change display language in Windows 10</a>, 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.</p>    <p>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 <strong><font face="Courier New">CHCP</font></strong> 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. </p>    <p>tk</p>    <p>ShortURL: <a href="/PoshChangeLanguage">https://www.toddklindt.com/PoshChangeLanguage</a></p></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_2_6C366E48.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_2_6C366E48.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_4_6C366E48.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_4_6C366E48.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_thumb_1_6C366E48.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_thumb_1_6C366E48.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_thumb_6C366E48.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/812/image_thumb_6C366E48.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell</category>
      <pubDate>Fri, 04 Jan 2019 17:37:25 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=812</guid>
    </item>
    <item>
      <title>Help me pause OneDrive Sync with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=811</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassF9F4B8B4CDA34B479353B6CB8303E204"><p>OneDrive and PowerShell. They remind me of that song, <a href="https://www.youtube.com/watch?v=33o32C0ogVM">My Favorite Things</a>. Though I’m not sure which I like more, PowerShell or whiskers on kittens. It’s a close call.</p>  <p>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…</p>  <p>What I really want, nay, <em>need</em>, 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.</p>  <p>So I took the next step, <a href="https://twitter.com/ToddKlindt/status/1078042047301537792">I whined on Twitter</a>. Someone, suggested I create a UserVoice for it. I thought that was pretty solid advice, so I did.</p>  <p><a href="https://onedrive.uservoice.com/forums/913522-onedrive-on-windows/suggestions/36377071-pause-syncing-with-powershell">Pause Syncing with PowerShell</a></p>  <p>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. <img class="wlEmoticon wlEmoticon-smile" style="" alt="Smile" src="/blog/Lists/Posts/Attachments/811/wlEmoticon-smile_2_4E523281.png" /></p>  <p><a href="https://onedrive.uservoice.com/forums/913522-onedrive-on-windows/suggestions/36377071-pause-syncing-with-powershell">Pause Syncing with PowerShell</a></p>  <p>I’ll be keeping an eye on it, and I’ll know if you voted!</p>  <p>Thanks in advance.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshPauseOneDrive">https://www.toddklindt.com/PoshPauseOneDrive</a></p></div></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=1\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=1&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/811/wlEmoticon-smile_2_4E523281.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/811/wlEmoticon-smile_2_4E523281.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <pubDate>Wed, 02 Jan 2019 15:23:17 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=811</guid>
    </item>
    <item>
      <title>Podcast 415 - Brain Shut Off</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=810</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassB714D729D1CB4519973D09BF5B6B7497"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast415-BrainShutOff.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast415-BrainShutOff.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/WfZ5hqSh1qs"><img title="Podcast 415 - Brain Shut Off (Time 0_21_13;28)" style="display:inline;background-image:none" border="0" alt="Podcast 415 - Brain Shut Off (Time 0_21_13;28)" src="/blog/Lists/Posts/Attachments/810/Podcast-415---Brain-Shut-Off-Time-0_21_1328_3_1F68E4E0.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/WfZ5hqSh1qs">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 51:47</p>  <p><u>Links:</u></p>  <p><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/SharePoint-web-part-updates-Yammer-Conversations-My-Documents/ba-p/303719">New SharePoint Web Parts</a>    <br /><a href="https://www.geekwire.com/2018/microsoft-teams-usage-passes-slack-new-survey-pros-expect-presence-double-2020/">Teams passes up Slack</a>    <br /><a href="https://techcommunity.microsoft.com/t5/Office-Retirement-Blog/UPDATED-Updates-to-Microsoft-Flow-and-PowerApps-for-Office-365/ba-p/289589">UPDATED - Updates to Microsoft Flow and PowerApps for Office 365 </a>    <br /><a href="https://regarding365.com/information-architecture-in-a-flat-sharepoint-world-934885869e8a">Information architecture in a flat SharePoint world</a>    <br /><a href="https://www.youtube.com/watch?v=xoxhDk-hwuo&amp;feature=youtu.be">Package Thief vs. Glitter Bomb Trap</a>    <br /><a href="https://www.PowerApps911.com/training">PowerApps and Flow Training</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.spsomaha.org/">SharePoint Saturday Omaha</a>    <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast415">https://www.toddklindt.com/Podcast415</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/810/Podcast-415---Brain-Shut-Off-Time-0_21_1328_3_1F68E4E0.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/810/Podcast-415---Brain-Shut-Off-Time-0_21_1328_3_1F68E4E0.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Thu, 27 Dec 2018 21:23:59 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=810</guid>
    </item>
    <item>
      <title>Podcast 414 - Never Spend all of that Money</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=809</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass1303BB5F95CC43518E2C466BE8D66A07"><p>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!</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast414-NeverSpendallofthatMoney.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast414-NeverSpendallofthatMoney.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/S4bCkwL4zEg"><img title="Podcast 414 - Never Spend all of that Money (Time 0_11_10;28)" style="display:inline;background-image:none" border="0" alt="Podcast 414 - Never Spend all of that Money (Time 0_11_10;28)" src="/blog/Lists/Posts/Attachments/809/Podcast-414---Never-Spend-all-of-that-Money-Time-0_11_1028_3_7C61BA14.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/S4bCkwL4zEg">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 49:15</p>  <p><u>Links:</u></p>  <p><a href="/blog/Lists/Posts/Post.aspx?ID=808">Copying Office 365 Group Permissions with PowerShell     <br /><a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/New-no-code-solutions-for-custom-formatting-in-SharePoint/ba-p/302498?_lrsc=ca696a13-8027-49fa-8eb9-00fff0beffa2">New no code solutions for custom formatting in SharePoint</a>      <br /><a href="https://developer.microsoft.com/en-us/sharepoint/blogs/modernize-your-sharepoint-pages/">Modernize your SharePoint pages</a>      <br /><a href="https://www.remove.bg/">Remove Background from Photos</a>      <br /><a href="https://www.microsoftevents.com/profile/web/index.cfm?PKwebID=0x1024196abcd">PowerApps and Flow App in A Day</a>      <br /><a href="https://www.PowerApps911.com/training">PowerApps and Flow Training</a>      <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>      <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>      <br /><a href="https://sharepointna.com/#%21/register?utm_term=YOUNG">SharePoint Conference NA</a></a></p>  <p>ShortURL: <a href="/Podcast414">https://www.toddklindt.com/Podcast414</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/809/Podcast-414---Never-Spend-all-of-that-Money-Time-0_11_1028_3_7C61BA14.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/809/Podcast-414---Never-Spend-all-of-that-Money-Time-0_11_1028_3_7C61BA14.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Thu, 27 Dec 2018 21:16:27 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=809</guid>
    </item>
    <item>
      <title>Copying Office 365 Group Permissions with PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=808</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass82035B71EC3846BBA19B75ED5236A2D9"><p>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.</p>  <p>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 <font face="Courier New"><strong>Get-Command</strong></font> and listed all the cmdlets that contained the noun “UnifiedGroup.” </p>  <blockquote>   <p><font face="Courier New"><strong>Get-Command -Noun *unifiedgroup*</strong></font></p> </blockquote>  <p>That exposed two cmdlets I’d need: <font face="Courier New"><strong>Get-PnPUnifiedGroupOwners</strong></font> and <strong><font face="Courier New">Get-PnPUnifiedGroupMembers</font>.</strong> 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<font face="Courier New"> <strong>Get-Command -ParameterName members</strong></font>. Low and behold, <font face="Courier New"><strong>Get-Command</strong></font> blessed me with <font face="Courier New"><strong>New-PnPUnifiedGroup</strong></font> and <font face="Courier New"><strong>Set-PnPUnifiedGroup</strong></font>. We retrieve the list of Members with <font face="Courier New"><strong>Get-PnPUnifiedGroupMembers</strong></font> but we set them with <font face="Courier New"><strong>Set-PnPUnifiedGroup –Members</strong></font>. Not totally consistent, but I can work with that.</p>  <p>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. </p>  <blockquote>   <p><strong><font face="Courier New">Connect-PnPOnline –Graph</font></strong></p> </blockquote>  <p>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.</p>  <p>Once I was connected to the Graph I ran <strong><font face="Courier New">Get-PnPUnifiedGroupMembers</font></strong> 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. </p>  <p><a href="/blog/Lists/Posts/Attachments/808/image_2_3C611585.png"><img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/blog/Lists/Posts/Attachments/808/image_thumb_3C611585.png" width="513" height="129" /></a></p>  <p>We can store them in a variable for use later. Now, how do we assign membership? help <strong><font face="Courier New">Set-PnPUnifiedGroup –Examples</font></strong> 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. </p>  <p>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:</p>  <blockquote>   <p><strong><font face="Courier New">$members = Get-PnPUnifiedGroupMembers -Identity $source</font></strong></p>    <p><strong><font face="Courier New">$members | ForEach-Object -begin  {$memberlist  = @() } -process {$memberlist += $($_.UserPrincipalName) }</font></strong></p>    <p><strong><font face="Courier New">Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist</font></strong></p> </blockquote>  <p>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 <strong>not</strong> want to clobber them I used the following code to merge the current Members of Destination with the Members of Source:</p>  <blockquote>   <p><strong><font face="Courier New">$membersDest = Get-PnPUnifiedGroupMembers -Identity $destination</font></strong></p>    <p><strong><font face="Courier New">$members = $members + $membersDest</font></strong></p> </blockquote>  <p>Then later when I write the users in $members to the Destination Group it has both sets of Members. </p>  <p>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:</p>  <blockquote>   <p><strong><font face="Courier New"># Set some values         <br /> # use Get-PnPUnifiedGroup to get Unified Group names          <br /> # Name of Unified Group whose owners and membership we want to copy          <br /> $source = &quot;Regulations&quot; </font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New"># Name of Unified Group whose owners and membership we want to populate         <br /> $destination = &quot;Empty&quot;</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New"># Whether to overwrite Destination membership or merge them         <br /> $mergeusers = $false</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New"># Check to see if PnP Module is loaded         <br /> $pnploaded = Get-Module SharePointPnPPowerShellOnline          <br /> if ($pnploaded -eq $false) {          <br />    Write-Host &quot;Please load the PnP PowerShell and run again&quot;          <br />    Write-Host &quot;install-module SharePointPnPPowerShellOnline&quot;          <br />    break          <br />    }          <br /> # PnP Module is loaded</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New"># Check to see if user is connected to Microsoft Graph         <br /> try           <br /> {           <br />    $owners = Get-PnPUnifiedGroupOwners -Identity $source          <br /> }          <br /> catch [System.InvalidOperationException]          <br /> {           <br />    Write-Host &quot;No connection to Microsoft Graph found&quot;  -BackgroundColor Black -ForegroundColor Red          <br />    Write-Host &quot;No Azure AD connection, please connect first with Connect-PnPOnline -Graph&quot; -BackgroundColor Black -ForegroundColor Red          <br /> break          <br /> }          <br /> catch [System.ArgumentNullException]          <br /> {          <br />        Write-Host &quot;Group not found&quot;  -BackgroundColor Black -ForegroundColor Red          <br />        Write-Host &quot;Verify connection to Azure AD with Connect-PnPOnline -Graph&quot; -BackgroundColor Black -ForegroundColor Red          <br />        Write-Host &quot;Use Get-PnPUnifiedGroup to get Unified Group names&quot;  -BackgroundColor Black -ForegroundColor Red          <br />        break          <br /> }          <br /> catch          <br /> {           <br />    Write-Host &quot;Some other error&quot;   -BackgroundColor Black -ForegroundColor Red          <br /> break          <br /> }</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New">$members = Get-PnPUnifiedGroupMembers -Identity $source</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New">if ($mergeusers -eq $true) {         <br />     # Get existing owners and members of Destination so that we can combine them          <br />    $ownersDest = Get-PnPUnifiedGroupOwners -Identity $destination          <br />    $membersDest = Get-PnPUnifiedGroupMembers -Identity $destination</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New">    # Add the two lists together so we don't overwrite any existing owners or members in Destination         <br />    $owners = $owners + $ownersDest          <br />    $members = $members + $membersDest          <br />    }</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New"># Set the owners and members of Destination         <br /> $owners | ForEach-Object -begin  {$ownerlist  = @() } -process {$ownerlist += $($_.UserPrincipalName) }          <br /> $members | ForEach-Object -begin  {$memberlist  = @() } -process {$memberlist += $($_.UserPrincipalName) }</font></strong></p>   <strong><font face="Courier New"></font></strong>    <p><strong><font face="Courier New">Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist</font></strong></p> </blockquote>    <p>Feel free to pick through that for any nuggets that might help you.</p>  <p>Happy copying.</p>  <p>tk</p>  <p>ShortURL: <a href="/PoshCopyO365GroupMembers">https://www.toddklindt.com/PoshCopyO365GroupMembers</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/808/image_2_3C611585.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/808/image_2_3C611585.png</a><br /><a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/808/image_thumb_3C611585.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/808/image_thumb_3C611585.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>PowerShell; Office 365</category>
      <pubDate>Tue, 18 Dec 2018 21:46:53 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=808</guid>
    </item>
    <item>
      <title>Podcast 413 - Payload is Too Big</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=807</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass29AF4835DCFC458DAA9BDC950F0EDE11"><p>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.</p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast413-PayloadisTooBig.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast413-PayloadisTooBig.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/UEHfvDLCeK4"><img title="Podcast 413 - Payload is Too Big (Time 0_47_15;21)" style="display:inline;background-image:none" border="0" alt="Podcast 413 - Payload is Too Big (Time 0_47_15;21)" src="/blog/Lists/Posts/Attachments/807/Podcast-413---Payload-is-Too-Big-Time-0_47_1521_3_41B6CFFC.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/UEHfvDLCeK4">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 48:19</p>  <p><u>Links:</u></p>  <p><a href="https://www.syskit.com/products/security-manager/">SysKit Security Manager</a>    <br /><a href="/blog/Lists/Posts/Post.aspx?ID=806">Bulk Undelete Files in Office 365 and SharePoint Online with PnP PowerShell</a>    <br /><a href="https://www.youtube.com/watch?v=1tJk7LxgocA">PowerApps Tooltip</a>    <br /><a href="https://www.youtube.com/watch?v=bfXV_GXc_JM">PowerApps create a PDF from SharePoint List data</a>    <br /><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.sharepointna.com/#%21/">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast413">https://www.toddklindt.com/Podcast413</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/807/Podcast-413---Payload-is-Too-Big-Time-0_47_1521_3_41B6CFFC.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/807/Podcast-413---Payload-is-Too-Big-Time-0_47_1521_3_41B6CFFC.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Tue, 18 Dec 2018 20:21:59 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=807</guid>
    </item>
    <item>
      <title>Bulk Undelete Files in Office 365 and SharePoint Online with PnP PowerShell</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=806</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClassCAB9B4A869BF4C568F2BC5D6C74EF550"><p>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.</p>
  <p>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.</p>
  <p>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.</p>
  <p>My tool of choice when it comes to making magic in Office 365 is the <a href="https://github.com/SharePoint/PnP-PowerShell">PnP PowerShell</a>. I had never done this before, so I had to do a bit of spelunking. I ran <font face="Courier New">Get-Command *recycle* -Module SharePointPnPPowerShellOnline</font> to see what PowerShell cmdlets availed themselves to me.  Looky, looky, there it is, <font face="Courier New">Restore-PnPRecycleBinItem</font>. Did you just hear angels sing? I know I did. </p>
  <p>Now we needed to weave a little PowerShell magic. We couldn’t restore <em>all </em>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:</p>
  <blockquote>   <p><font face="Courier New">Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value &quot;*.jpg&quot;  | Where-Object -Property Dirname -Like -Value &quot;Shared Documents/*&quot;  | Where-Object -Property DeletedByEmail -EQ –Value </font><a href="mailto:shane@tkdemo.com"><font face="Courier New">shane@tkdemo.com</font></a> </p>
 </blockquote>
  <p>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.</p>
  <blockquote>   <p><font face="Courier New">$bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value &quot;*.jpg&quot;  | Where-Object -Property Dirname -Like -Value &quot;Shared Documents/*&quot;  | Where-Object -Property DeletedByEmail -EQ –Value </font><a href="mailto:shane@tkdemo.com"><font face="Courier New">shane@tkdemo.com</font></a><font face="Courier New"> </font></p>
    <p><font face="Courier New">$bin | foreach  -begin { $a = 0} -Process  {Write-Host &quot;$a - $($_.LeafName)&quot; ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }</font></p>
 </blockquote>
  <p>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:</p>
  <blockquote>   <p><font face="Courier New">($bin[20001..30000]) | foreach  -begin { $a = 0} -Process  {Write-Host &quot;$a - $($_.LeafName)&quot; ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }</font></p>
 </blockquote>
  <p>The <font face="Courier New">$bin[20001..30000]</font> only sends items 20001 to 30000 of the collection down the pipeline. I changed that on each client.<font face="Courier New"> $bin[0..10000], $bin[10001..20000]</font>, 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:</p>
  <blockquote>   <p><font face="Courier New"># Make sure necessary modules are installed       <br /># PnP PowerShell to get access to Office 365        <br />Install-Module SharePointPnPPowerShellOnline</font></p>
    <p><font face="Courier New"># Module to securely store passwords       <br />Install-Module CredentialManager</font></p>
    <p><font face="Courier New"># Saved credentials       <br />New-StoredCredential -Target &quot;ImportantSite&quot; -UserName </font><a href="mailto:madowner@tkdemo.com"><font face="Courier New">madowner@tkdemo.com</font></a><font face="Courier New"> -Password 'Password goes here' -Persist LocalMachine</font></p>
    <p><font face="Courier New"># Now the actual meat       <br /># Connect to the site collection where the files were deleted        <br />Connect-PnPOnline -Url </font><a href="https://tkdemo.sharepoint.com/"><font face="Courier New">https://tkdemo.sharepoint.com/</font></a><font face="Courier New"> -Credentials ImportantSite</font></p>
    <p><font face="Courier New"># Filter the recycle bin for only the files we want to restore, JPGs, from the Shared document library, deleted by Shane       <br />$bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value &quot;*.jpg&quot;  | Where-Object -Property Dirname -Like -Value &quot;Shared Documents/*&quot;  | Where-Object -Property DeletedByEmail -EQ -Value </font><a><font face="Courier New">shane@tkdemo.com</font></a><font face="Courier New"> </font></p>
    <p><font face="Courier New"># See how many pictures Shane deleted.       <br />$bin.count</font></p>
    <p><font face="Courier New"># 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       <br />$bin | foreach  -begin { $a = 0} -Process  {Write-Host &quot;$a - $($_.LeafName)&quot; ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }</font></p>
    <p><font face="Courier New"># 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       <br />($bin[20001..30000]) | foreach  -begin { $a = 0} -Process  {Write-Host &quot;$a - $($_.LeafName)&quot; ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }</font></p>
 </blockquote>
  <p>I hope you never need to use this. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/blog/Lists/Posts/Attachments/806/wlEmoticon-smile_2_45848724.png" /></p>
  <p>tk</p>
  <p>ShortURL: <a href="/PoshRestoreSPOFiles">https://www.toddklindt.com/PoshRestoreSPOFiles</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=24\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=24&amp;RootFolder=*">Office 365</a>; <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=8\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=8&amp;RootFolder=*">PowerShell</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=11\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=11&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/806/wlEmoticon-smile_2_45848724.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/806/wlEmoticon-smile_2_45848724.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Office 365; PowerShell</category>
      <pubDate>Tue, 11 Dec 2018 23:39:23 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=806</guid>
    </item>
    <item>
      <title>Podcast 412 - Preconditioned Fail</title>
      <link>https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=805</link>
      <description><![CDATA[<div><b>Body:</b> <div class="ExternalClass307B74A79C394727BBFC276271829E00"><p>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. </p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast412-PreconditionedFail.mp3">Audio File</a> <a href="/netcast/MP3/feed-mp3.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="http://media.toddklindt.com/Netcast/Podcast412-PreconditionedFail.mp4">Video File</a> <a href="/netcast/WMVSmall/feed-wmv.rss"><img border="0" alt="" src="/blog/Blog%20pictures/rss.jpg" width="10" height="10" /></a></p>  <p><a href="https://youtu.be/2KJeQcurcZg"><img title="Podcast 412 - Preconditioned Fail (Time 0_11_50;25)" style="display:inline;background-image:none" border="0" alt="Podcast 412 - Preconditioned Fail (Time 0_11_50;25)" src="/blog/Lists/Posts/Attachments/805/Podcast-412---Preconditioned-Fail-Time-0_11_5025_3_75054740.png" width="244" height="139" /></a></p>  <p><a href="https://youtu.be/2KJeQcurcZg">YouTube</a> (<a href="http://www.youtube.com/subscription_center?add_user=toddklindtnetcast">Subscribe</a>)</p>  <p><a href="/iTunes">Subscribe in iTunes</a></p>  <p>Running Time: 39:56</p>  <p><u>Links:</u></p>  <p><a href="https://www.syskit.com/products/security-manager/">SysKit Security Manager</a>    <br /><a href="https://regarding365.com/information-architecture-in-a-flat-sharepoint-world-934885869e8a">Information architecture in a flat SharePoint world</a>    <br /><a href="https://www.youtube.com/watch?v=bfXV_GXc_JM">Creating PDFs from SharePoint Data</a>    <br /><a href="https://register.gotowebinar.com/register/950186248480713474">Online Free Flow Conference</a>    <br /><a href="https://www.thriveconf.com/en/Pages/First.aspx">Thrive Conference 2018</a>    <br /><a href="https://www.sharepointfest.com/Chicago/">SP Fest Chicago     <br /></a><a href="https://www.sptechcon.com/">SPTechCon Austin 2019</a>    <br /><a href="http://www.collabsummit.org/">North American Collab Summit</a>    <br /><a href="https://www.sharepointna.com/#%21/">SharePoint Conference NA</a></p>  <p>ShortURL: <a href="/Podcast412">https://www.toddklindt.com/Podcast412</a></p></div></div>
<div><b>Category:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}\u0026ID=6\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={8221A7C5-26F5-4CA7-BCD5-8B626A7C6AB8}&amp;ID=6&amp;RootFolder=*">Podcast</a></div>
<div><b># Comments:</b> <a onclick="OpenPopUpPage('https:\u002f\u002fwww.toddklindt.com\u002fblog\u002f_layouts\u002flistform.aspx?PageType=4\u0026ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}\u0026ID=0\u0026RootFolder=*', RefreshPage); return false;" href="https://www.toddklindt.com/blog/_layouts/listform.aspx?PageType=4&amp;ListId={9632BBFE-1432-4B68-A96B-E6B96499F2DA}&amp;ID=0&amp;RootFolder=*"></a></div>
<div><b>Attachments:</b> <a href="https://www.toddklindt.com/blog/Lists/Posts/Attachments/805/Podcast-412---Preconditioned-Fail-Time-0_11_5025_3_75054740.png">https://www.toddklindt.com/blog/Lists/Posts/Attachments/805/Podcast-412---Preconditioned-Fail-Time-0_11_5025_3_75054740.png</a><br /><a href=""></a></div>
]]></description>
      <author>Todd O. Klindt</author>
      <category>Podcast</category>
      <pubDate>Mon, 10 Dec 2018 16:43:06 GMT</pubDate>
      <guid isPermaLink="true">https://www.toddklindt.com/blog/Lists/Posts/ViewPost.aspx?ID=805</guid>
    </item>
  </channel>
</rss>