| | Todd O. Klindt | 2/18/2019 2:54 PM | Podcast | 0 | | | | | Todd O. Klindt | 2/5/2019 4:33 PM | Podcast | 0 | | | | | Todd O. Klindt | 1/28/2019 2:06 PM | Podcast | 0 | | | | | Todd O. Klindt | 1/28/2019 8:28 AM | Podcast | 0 | | | | | Todd O. Klindt | 1/22/2019 8:30 AM | | 0 | | Here in the US there is currently a government shutdown and a lot of workers are furloughed. One of them recently reached out to me with resume, looking for some work to tide him over until he can go back to work. This got me thinking about what I could do to help. Sadly, not a lot. I can, though, offer some training or consulting to IT workers that have suddenly found themselves with some time on their hands. If you’re a furloughed US Government worker, and would like one hour of free SharePoint, Office 365, or PowerShell training, or just want to hang for an hour, email me at furlough@toddklindt.com. We’ll work out a time and some topics. Now, hopefully this will all be resolved soon and no one will be able to take me up on my offer.  tk ShortURL: https://www.toddklindt.com/Furlough | | | Todd O. Klindt | 1/9/2019 4:42 PM | Podcast | 0 | | | | | Todd O. Klindt | 1/8/2019 2:48 PM | | 0 | | | | | Todd O. Klindt | 1/4/2019 11:37 AM | PowerShell | 0 | | I recently had to do some testing for a customer on a Windows 10 machine whose primary language was not English. I, having lived in the midwest United States my entire life, do not speak any other languages fluently. The customer anticipated this and sent along a very thorough set of directions, complete with pictures, of how to switch the language to English for me. Very kind of them indeed. As I looked through the directions the thought occurred to me, “I’ll probably need to do this a few times. I wonder if I can automate it. I bet I can! PowerShell to the rescue!” Here’s the TL;DR of what I ran: Set-Culture en-US Set-WinSystemLocale en-US Set-WinHomeLocation 0xF4 Set-WinUILanguageOverride en-US logoff None of it takes place until you log back in, so I added the logoff at the end. With PowerShell, knowing the answer is good, but knowing how to get the answer is even better. One of my friends, Jeff Hicks, always does a good job explaining the process of find things in PowerShell, so I thought I’d do that here. I had the steps, in UI form, so I didn’t need to figure that out. There were 4 things that needed to be changed. I just needed to figure out how to make those changes with PowerShell. I went to a PowerShell prompt and typed: Get-Help language hoping PowerShell could nudge m in the right direction. I got this back:  It wasn’t exactly what I needed, but it did show me there was a module, International, that was probably a good place to start. And knowing that I needed to change things, I was mostly interested in the Set cmdlets. There were also a couple of good help topics, about_Language_Keywords and about_Language_Modes that I could reference if I got stuck. My next step was to see what other cmdlets were in the International module. I did that with Get-Command -Module International. That filled in the blanks for me.  For the pieces that didn’t obviously connect to the pictures I had from the customer’s instruction I had some Get cmdlets above to poke around and try to match values. My next hour or so consisted of running the different Get cmdlets and figuring out where the current setting was so I could use the appropriate Set cmdlet to change it. I made liberal use of the help cmdletname –examples paradigm to figure out what the parameter values should be. After I was finished and was searching to see if I was right I found this Technet article, How to change display language in Windows 10, that confirmed what I was doing was correct. My script is laser focused on what I was doing, that one is more useful and generic. If you want to understand this more, read through that script. That’s all there was to it. I can’t reboot the client machine but all of these changes have persisted multiple logouts. I did also have to use the CHCP command to change the code page of the PowerShell window. That did not persist across logins. I think there’s a way to set the default code page in the Registry, but I haven’t chased that down yet. tk ShortURL: https://www.toddklindt.com/PoshChangeLanguage | | | Todd O. Klindt | 1/2/2019 9:23 AM | | 0 | | OneDrive and PowerShell. They remind me of that song, My Favorite Things. Though I’m not sure which I like more, PowerShell or whiskers on kittens. It’s a close call. I write a lot of little PowerShell scripts to help me get through the day, and often those scripts fiddle with files that are being synced with OneDrive. In a few cases, if the file is large enough, my PowerShell script will fail because OneDrive will lock the file while it’s syncing it. Both responses are totally understandable. I want PowerShell to stop if it can’t sync a file, and I want OneDrive to sync files when I expect it to. I could, and I have in some cases, written a bunch of PowerShell to check the lock status of a file, to deal with the locking issues that OneDrive creates, and so on. It’s tedious though, and honestly I’m not very good at it. That’s where you all come in… What I really want, nay, need, is a way to pause OneDrive sync while I’m messing with files I know it will lock when syncing. I need two things, Stop-OneDriveSync and Start-OneDriveSync. That’s it. I asked Santa for them for Christmas, but all I got was socks. So I took the next step, I whined on Twitter. Someone, suggested I create a UserVoice for it. I thought that was pretty solid advice, so I did. Pause Syncing with PowerShell What I’m asking from you, is if you too would like to be able to start and stop OneDrive syncing from PowerShell, please vote up the UserVoice. Here it is again in case you missed it.  Pause Syncing with PowerShell I’ll be keeping an eye on it, and I’ll know if you voted! Thanks in advance. tk ShortURL: https://www.toddklindt.com/PoshPauseOneDrive | | | Todd O. Klindt | 12/27/2018 3:23 PM | Podcast | 0 | | | | | Todd O. Klindt | 12/27/2018 3:16 PM | Podcast | 0 | | | | | Todd O. Klindt | 12/18/2018 3:46 PM | PowerShell; Office 365 | 0 | | Office 365 Groups, or “Unified Groups” to their friends, have been a confusing Office 365 feature from an administrative perspective for as long as they’ve been around. Users can create them all willy-nilly (unless you disable that), the SharePoint sites they create don’t show up in the SharePoint Admin Center (until you use the new one), the list goes on and on. Another frustrating part of Groups is that you can’t do any nesting, of any kind. You can’t put a Unified Group in an Azure AD Security Group, or vice versa. You can’t put a SharePoint Group in a Unified Group either. Because of these limitations it’s very tough to reuse group membership. You can’t create an HR Azure AD Security Group and drop it into the HR Benefits Unified Group or the HR Hiring Unified Group. Now, the obvious question is, “If these two Unified Groups have the same membership why are they two groups instead of one?” Good question, fair reader. Sometimes it just works out that way. Sometimes the AD Security Group would only be a subset of the users in the Unified Group in question. Regardless, this question came up on a customer call and I was challenged to find a way to ease the administrative burden of manually adding the same users to multiple Unified Groups. What was my answer, “Of course I can do it, with PowerShell!” Sometimes I answer without thinking first. I had used the PnP PowerShell in the past to get a list of all of the Unified Groups in a tenant, so I was pretty sure it could be done. I whipped out Get-Command and listed all the cmdlets that contained the noun “UnifiedGroup.” Get-Command -Noun *unifiedgroup* That exposed two cmdlets I’d need: Get-PnPUnifiedGroupOwners and Get-PnPUnifiedGroupMembers. That’s good. But there were no corresponding “Set” cmdlets. That’s bad. Normally this is where I’d panic. Instead, I took a deep breath and instead of panicking, I typed Get-Command -ParameterName members. Low and behold, Get-Command blessed me with New-PnPUnifiedGroup and Set-PnPUnifiedGroup. We retrieve the list of Members with Get-PnPUnifiedGroupMembers but we set them with Set-PnPUnifiedGroup –Members. Not totally consistent, but I can work with that. From past experience I knew I had to be connected to the Microsoft Graph to use the Unified Group cmdlets, so I authenticated against the Graph so I could start poking around. Connect-PnPOnline –Graph If you haven’t connected to the Graph before, hold onto your hats. It’s different than what you’re used to. You’ll be given a code to register with the Graph that allows the PnP to query it. It feels weird, but everything is working correctly. Once I was connected to the Graph I ran Get-PnPUnifiedGroupMembers to see what the output looked like. It gave me back a collection of objects that corresponded to the users that were members of that Unified Group. Fair enough.  We can store them in a variable for use later. Now, how do we assign membership? help Set-PnPUnifiedGroup –Examples didn’t provide a lot of help. It only showed adding a single Owner. But it did show me that the cmdlet was expecting the parameter to be a string, and that string needed to be the UPN of the user I wanted to add. I can work with that too. The mechanics of saving out the list of users and owners and assigning them to another group was a little tricky, but not bad. I walked through the output of Get- and wrote the UPNs of each object to a new collection that I would then pass on to Set-. It looks like this: $members = Get-PnPUnifiedGroupMembers -Identity $source $members | ForEach-Object -begin {$memberlist = @() } -process {$memberlist += $($_.UserPrincipalName) } Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist The only sticking point was that doing it that way would overwrite whatever Members or Owners the Destination Group already had. To handle that I created a boolean variable, $mergeusers, that I could set to $true or $false depending on whether I wanted to clobber the existing users or not. If I did not want to clobber them I used the following code to merge the current Members of Destination with the Members of Source: $membersDest = Get-PnPUnifiedGroupMembers -Identity $destination $members = $members + $membersDest Then later when I write the users in $members to the Destination Group it has both sets of Members. I added some very, very simple error handling so that another human has a chance of running it. This is what I ended up with: # Set some values # use Get-PnPUnifiedGroup to get Unified Group names # Name of Unified Group whose owners and membership we want to copy $source = "Regulations" # Name of Unified Group whose owners and membership we want to populate $destination = "Empty" # Whether to overwrite Destination membership or merge them $mergeusers = $false # Check to see if PnP Module is loaded $pnploaded = Get-Module SharePointPnPPowerShellOnline if ($pnploaded -eq $false) { Write-Host "Please load the PnP PowerShell and run again" Write-Host "install-module SharePointPnPPowerShellOnline" break } # PnP Module is loaded # Check to see if user is connected to Microsoft Graph try { $owners = Get-PnPUnifiedGroupOwners -Identity $source } catch [System.InvalidOperationException] { Write-Host "No connection to Microsoft Graph found" -BackgroundColor Black -ForegroundColor Red Write-Host "No Azure AD connection, please connect first with Connect-PnPOnline -Graph" -BackgroundColor Black -ForegroundColor Red break } catch [System.ArgumentNullException] { Write-Host "Group not found" -BackgroundColor Black -ForegroundColor Red Write-Host "Verify connection to Azure AD with Connect-PnPOnline -Graph" -BackgroundColor Black -ForegroundColor Red Write-Host "Use Get-PnPUnifiedGroup to get Unified Group names" -BackgroundColor Black -ForegroundColor Red break } catch { Write-Host "Some other error" -BackgroundColor Black -ForegroundColor Red break } $members = Get-PnPUnifiedGroupMembers -Identity $source if ($mergeusers -eq $true) { # Get existing owners and members of Destination so that we can combine them $ownersDest = Get-PnPUnifiedGroupOwners -Identity $destination $membersDest = Get-PnPUnifiedGroupMembers -Identity $destination # Add the two lists together so we don't overwrite any existing owners or members in Destination $owners = $owners + $ownersDest $members = $members + $membersDest } # Set the owners and members of Destination $owners | ForEach-Object -begin {$ownerlist = @() } -process {$ownerlist += $($_.UserPrincipalName) } $members | ForEach-Object -begin {$memberlist = @() } -process {$memberlist += $($_.UserPrincipalName) } Set-PnPUnifiedGroup -Identity $destination -Members $memberlist -Owners $ownerlist Feel free to pick through that for any nuggets that might help you. Happy copying. tk ShortURL: https://www.toddklindt.com/PoshCopyO365GroupMembers | | | Todd O. Klindt | 12/18/2018 2:21 PM | Podcast | 0 | | | | | Todd O. Klindt | 12/11/2018 5:39 PM | Office 365; PowerShell | 6 | | Quite often as a consultant, you get to work on truly fun and funny situations. The customer email that prompted this blog post is one of them.
My contact at the customer site emailed with a problem. A few weeks earlier one of their users deleted some pictures from one of their document libraries. Okay, not a few pictures, nearly 100,000 of them. And not only had that user deleted nearly 100,000 items, they hadn’t told anyone for 3 weeks, while they tried to upload the pictures they still had locally. I know what you’re saying, this is a job for the Recycle Bin! And you’re right, it is, but the other factors made it complicated. They couldn’t just restore all of the files in the Recycle Bin as there were also 3 weeks’ worth of legitimately deleted documents in there, including documents from that user. Also, since the user had re-uploaded a bunch of the deleted documents there would be “overwrite” prompts all over that would slow down the process. And let’s not forget that even if it all went smoothly, someone would have to manually restore nearly 100,000 files. No easy feat.
The customer talked to me because they wanted to share the story (it was a big funny after the fact) but also because they knew I always said that PowerShell could do anything. They were hoping PowerShell could bale them out of this mess too. I don’t mean to spoil the end of this story, but they were right, it could.
My tool of choice when it comes to making magic in Office 365 is the PnP PowerShell. I had never done this before, so I had to do a bit of spelunking. I ran Get-Command *recycle* -Module SharePointPnPPowerShellOnline to see what PowerShell cmdlets availed themselves to me. Looky, looky, there it is, Restore-PnPRecycleBinItem. Did you just hear angels sing? I know I did.
Now we needed to weave a little PowerShell magic. We couldn’t restore all of the deleted files, since other folks had legitimately deleted files in the meantime. We also only wanted to restore .JPG files that this user had deleted. Here’s command that got the files we needed:
Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg" | Where-Object -Property Dirname -Like -Value "Shared Documents/*" | Where-Object -Property DeletedByEmail -EQ –Value shane@tkdemo.com
That returned all the files, now what to do with them? Restore them, of course. This bit of code grabs all the files, counts them as it restores them, then spits out the time and date when it’s done.
$bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg" | Where-Object -Property Dirname -Like -Value "Shared Documents/*" | Where-Object -Property DeletedByEmail -EQ –Value shane@tkdemo.com
$bin | foreach -begin { $a = 0} -Process {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }
Normally, that would have worked, but it was going to take some time to restore the files. A loooong time. Several days in fact. With some testing I surmised that the client PowerShell was the bottleneck. I used a little PowerShell trick to break the entire 100,000 item collection into chunks of 10,000 and run it multiple PowerShell windows and on multiple machines. I changed the second line to look something like this:
($bin[20001..30000]) | foreach -begin { $a = 0} -Process {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }
The $bin[20001..30000] only sends items 20001 to 30000 of the collection down the pipeline. I changed that on each client. $bin[0..10000], $bin[10001..20000], and so on. After they finished I ran through it all one more time to make sure I didn’t miss any. The entire script looked like this:
# Make sure necessary modules are installed # PnP PowerShell to get access to Office 365 Install-Module SharePointPnPPowerShellOnline
# Module to securely store passwords Install-Module CredentialManager
# Saved credentials New-StoredCredential -Target "ImportantSite" -UserName madowner@tkdemo.com -Password 'Password goes here' -Persist LocalMachine
# Now the actual meat # Connect to the site collection where the files were deleted Connect-PnPOnline -Url https://tkdemo.sharepoint.com/ -Credentials ImportantSite
# Filter the recycle bin for only the files we want to restore, JPGs, from the Shared document library, deleted by Shane $bin = Get-PnPRecycleBinItem | Where-Object -Property Leafname -Like -Value "*.jpg" | Where-Object -Property Dirname -Like -Value "Shared Documents/*" | Where-Object -Property DeletedByEmail -EQ -Value shane@tkdemo.com
# See how many pictures Shane deleted. $bin.count
# Walk through the collection and restore each document. Spit out the time at the end so you know how long it took. Also keep a counter to see how it’s going as it churns through the collection $bin | foreach -begin { $a = 0} -Process {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }
# Since the OM is the bottleneck you can run this on multiple machines to speed things up. Here’s how to only restore a subset of the collection ($bin[20001..30000]) | foreach -begin { $a = 0} -Process {Write-Host "$a - $($_.LeafName)" ; $_ | Restore-PnPRecycleBinItem -Force ; $a++ } -End { Get-Date }
I hope you never need to use this. 
tk
ShortURL: https://www.toddklindt.com/PoshRestoreSPOFiles | | | Todd O. Klindt | 12/10/2018 10:43 AM | Podcast | 0 | | | | | Todd O. Klindt | 12/5/2018 2:59 AM | Podcast | 0 | | | | | Todd O. Klindt | 11/16/2018 8:41 AM | Podcast | 0 | | | | | Todd O. Klindt | 11/13/2018 3:22 PM | PowerShell; Office 365; Sharepoint | 0 | | This question has come up a few times so I thought I’d blog it so I had an easy place to point people. You can also go to the PnP PowerShell GitHub Comments for the same information. If you’ve watched any of my podcasts, or seen me speak at any technical events you know I’m a big fan of the Patterns and Practices (PnP) PowerShell cmdlets. They make working with Office 365 tolerable, even enjoyable. The PnP PowerShell is a community led, Microsoft supervised, project on GitHub. If you’re not already using it, you should check it out. Along with scads of other software running on our machines, it gets updated once a month or so. In the last couple of months a couple of clashing updates have caused PnP users some stress. Specifically when they use the Connect-PnPOnline cmdlet to connect to SharePoint Online they get a “Method not found” error message. The PnP team was on it. They published this fix: - Delete all the SharePoint Components from the Control Panel (Add/Remove)
- Open the GAC location (C:\windows\Microsoft.NET\assembly\GAC_MSIL), search for the term SharePoint and delete all the folders. (This is required since the reference is still old which is used by the PnP commands)
- Re-Start the machine
- Install the latest version of the SharePoint PnP
That should do it. From the comments I’ve seen, and my own experience, this has a 100% success rate. Again, you can read all about it on GitHub. Thanks to the PnP Team for all you do, and for getting this fix out so quickly. tk ShortURL: https://www.toddklindt.com/PoshPnPMethodNotFound | | | Todd O. Klindt | 11/13/2018 3:04 PM | Podcast | 0 | | | | | Todd O. Klindt | 11/6/2018 10:47 AM | Office 365; PowerShell | 3 | | The last (and first) installment in my ever popular “Without Losing Your Damned Mind” blog series, How to Connect to with Multiple Office 365 Accounts in your Browser without Losing Your Damned Mind, was a mild success, and the series was picked up. We decided it was time for a sequel, and here it is. As an IT Pro/Administrator in the Microsoft space you have to love PowerShell. You don’t have to be an expert in it (though that really helps, I envy those guys) but you have to be confident enough with PowerShell that you can see some PowerShell on the web and be able to understand what it’s doing before you run it yourself. The way you do that is slowly, after months and years, forcing yourself to do tasks in PowerShell no matter how much it sucks. In the context of Office 365 that can get cumbersome because you have to authenticate against cloud services all the time, with many different accounts, and that requires that cursed act of typing your password. Over and over and over again. I hate typing passwords so very much. It gets worse when sometimes I’m connecting as me, sometimes as my own tenant global admin, sometimes as a customer’s tenant admin, sometimes as a different customer’s admin, it never ends. A while back I started using Windows’ Credential Manager to manage my PowerShell logins, and that’s what this blog post is going to be about. I will assume you already know how to connect to Office 365 and Azure with PowerShell and that you have all of the necessary modules, executables, and the like installed. The secret sauce that makes this all bearable is a PowerShell module called PowerShell Credential Manager. This little beauty uses native PowerShell to access the Credential Manager in Windows. There are other modules that do similar things, and you can actually do all of this yourself in PowerShell without a module. I’ve found this module to be the best that works for me, but this process is the same regardless of what you use. You can install it with this line: Install-Module -Name CredentialManager It installs the following cmdlets: Get-StoredCredential Get-StrongPassword New-StoredCredential Remove-StoredCredential You can use New-StoredCredential to put a new entry in the Windows Credential Manager. You can also use the Credential Manager UI to do it. It’s all the same. To create a credential with New-StoredCredential use something like this: New-StoredCredential –Target O365Admin –username admin@tenant1.onmicrosoft.com -password pass@word1 –Persist LocalMachine New-StoredCredential –Target Jimmy –username Jimmy@tenant1.onmicrosoft.com -password pass@word1 –Persist LocalMachine New-StoredCredential –Target OtherAdmin –username admin@tenant2.onmicrosoft.com -password pass@word1 –Persist LocalMachine And so on. A couple of things of note. First, all of the passwords are in plain text. If you’re running a transcript make sure you clear those out. Also, the –Persist switch is important. If you don’t add that, the Stored Credential will vanish into the ether when you close this PowerShell window. You won’t know why it doesn’t work the next and you’ll be very confused. Maybe that’s just me. You can also add a comment for the credential with the –Comment parameter. Running the command looks like this:  The entries look like this in Windows:  You can get to this screen in Control Panel, or by typing “cred” in the Start Menu. The credentials you create in PowerShell will show up under “Generic Credentials” and you can use anything that’s already there. You can also create credentials with the cleverly named, “Add a generic credential” link at the top. It doesn’t matter how they get there, it just matters that they’re there. You can create as many credentials as you want. There’s no charge.  Now that we’ve loaded the Credential Store up with some yummy Office 365 Credentials, how do we use? The magic word is Get-StoredCredential. We can use Get-StoredCredential to securely pull credentials from the Credential Manager and pass them to a PowerShell cmdlet. You can save them in a variable, or just call it directly when you connect. Here is how you connect to Azure AD: Connect-MsolService -Credential (Get-StoredCredential -Target O365Admin) It looks like this:  No passwords were typed (Hooray!) and that means you can securely automate it. The process is the same for other Connect style cmdlets. Here are a couple of examples: Connect-AzureAD -Credential (Get-StoredCredential -Target O365Admin) Connect-SPOService -Url https://blogpost-admin.sharepoint.com -Credential (Get-StoredCredential -Target O365Admin) If I wanted to sign in as the Jimmy account, I would pass that to the –Target parameter: Connect-SPOService -Url https://blogpost-admin.sharepoint.com -Credential (Get-StoredCredential -Target Jimmy ) I’m a frequent user of the PnP PowerShell. I’d give up sliced bread before I gave them up. While you can use this same approach with them, you have another option that’s even less typing: Connect-PnPOnline -Url https://blogpost-admin.sharepoint.com -Credential O365Admin The Connect-PnPOnline cmdlet (and maybe others) natively know to check the Credential Manager if it’s passed a string. That’s all there is to it. Once you create a credential it’s yours to use however you’d like, as often as you’d like. This isn’t restricted to Office 365, either. Any PowerShell cmdlets that take credentials can take advantage of this. Enjoy. tk ShortURL: https://www.toddklindt.com/PoshMultipleAccounts | | | Todd O. Klindt | 11/5/2018 10:45 AM | Podcast | 0 | | | | | Todd O. Klindt | 11/2/2018 1:13 PM | | 0 | | Over the few months I’ve been doing a lot of consulting projects, and some of my favorites have been with my long time friends Marc Anderson (blog|twitter) and Julie Turner (blog|twitter). I’ve known Marc since roughly the beginning of time, and met Julie a few years ago when she joined him at Sympraxis. We’ve all been old friends ever since. They’re both developery types and over the last few months they’ve brought me in to help with some projects that needed an admin’s touch. At SPTechCon a couple of months ago we were sitting around catching up and Marc suggested that we put a ring on it and make it official. What a magnificent idea! Yesterday I officially started at Sympraxis. I’ll be doing all the same things I’ve been doing. Blogging, podcasting, teaching, and loving on SharePoint and Office 365 every day. Now though, Julie and Marc are legally required to chat with me on Teams during the day when I’m bored. I will also continue to be the chief Evangelist for Syskit. I’m going to be staying very busy. If you’d like to bring Sympraxis into a project, drop us a note on our Contact Page and we’ll get a hold of you. Thanks to Marc and Julie for bringing me onboard. tk ShortURL: https://www.toddklindt.com/JoinSympraxis | | | Todd O. Klindt | 10/31/2018 9:07 AM | Podcast | 0 | | | | | Todd O. Klindt | 10/23/2018 4:14 PM | SPDocKit | 1 | | I’m not sure my heart can take much more of this. First SharePoint Server 2019 RTMs and the folks at SysKit put out another amazing version of SPDocKit, 8.0! Is today my birthday or something?! If you haven’t used SPDocKit before, you’re missing out. Luckily the folks at SysKit have you covered, before you do anything, including finishing this blog post, go out and download their free 30 day trial. Okay, now that we’ve got that out of the way, what is SPDocKit and what’s in it for you? I am so glad you asked! SPDocKit is a SharePoint Documentation tool. Quite possibly the best SharePoint Documentation tool to grace the earth with its footfall. Over the years I’ve watched the product evolve into nearly a work of art. The folks at SysKit love SharePoint, almost as much as I do, and they have their finger on the pulse of what SharePoint admins want. With each successive version of SPDocKit they add new reports and functionality that scratch the collective itches we SharePoint admins have. As a SharePoint Consultant I help all kinds of organizations implement and manage SharePoint servers. In the last year or two I’ve noticed a very pronounced shift towards wanting more reporting. Companies want a better idea of how their users are using SharePoint. SPDocKit gives that to them in spades, all in an easy to use interface. What kind of reports does it give you? There’s almost too many to name. I’ll rattle off some of my favorites though to get you started: - Full Farm Documentation – Servers, services, databases, sites, everything you can think of. Best of all it keeps a copy of every report you run, so you can compare them over time and see how your environment grows.
- Best Practices – SPDocKit looks into every crack and crevice of your SharePoint farm and let you know, nicely, what things you could be doing better. This could be SharePoint Configuration, SQL Server settings, anything. SPDocKit has your back.
- Security – Great reports on what has been changed, who has changed what. Security is a hot topic these days and SPDocKit has you covered.
- User Permissions – You can get Permissions reports, compare users’ permissions, copy user permissions, everything you can think of.
That’s just off the top of my head. There’s so much more. Here’s a list of just what they’ve added to version 8.0. Go out and take SPDocKit for a spin. You won’t regret it. While you’re out there check out SysKit’s other great tools like SysKit Insights, Security Manager, the free SysKit Point. tk ShortURL: https://www.toddklindt.com/SPDocKit8 | | | Todd O. Klindt | 10/22/2018 5:03 PM | SharePoint 2019; Sharepoint | 0 | | What a day, what a day. SharePoint Server 2019 is ready for us to download and deploy into our production farms. What’s new in SharePoint 2019 you ask? A bunch. Here’s a short list: - Modern Sites
- Modern Lists and Libraries
- Modern Pages
- Communication Sites
- OneDrive for Business sync client support
- Large file, large filename, fewer character restrictions
The list goes on and on. Here are a bunch of links to get you started: SharePoint Team Blog Post Download SharePoint Server 2019 Quick Start Guide Here at the Klindt Labs we’ll be installing SharePoint Server 2019 as quickly as we can and letting you know what our experience is. tk ShortURL: https://www.toddklindt.com/SP2019ishere | | | Todd O. Klindt | 10/18/2018 4:54 PM | Podcast | 0 | | | | | Todd O. Klindt | 10/17/2018 5:01 PM | Podcast | 0 | | | | | Todd O. Klindt | 10/8/2018 3:17 PM | Podcast | 0 | | | | | Todd O. Klindt | 10/7/2018 11:15 PM | Office 365 | 6 | | Every day I’m knee deep, well, waist deep in Office 365. My personal email and all of that is in Office 365. I’m also the Global Admin for that same tenant. I jump into customer tenants all the time and I have 2 or 3 demo and trial tenants that I’m routinely noodling around in. Since all of those environments are in the same DNS domain, office.com, it’s tough to handle being signed into them all at the same time. You can use in-private or incognito mode, but that only gets you one additional user, as all in-private mode windows share the same memory space. You could use multiple browsers, but that gets unwieldy remembering which browser is for which account, and at some point you end up using Microsoft Edge, and that’s just not worth it. It would seem this summit is insurmountable. I am here to tell you fellow Office 365 lover, that it is not. I have cracked the code, and I’m going to show you how. First, let me say this is not something I figured out on my own. I’m not blazing any new trails here. There are dozens of blog posts on this already, some by friends of mine. I’m writing this blog post because I’ve told a few people about it recently and they hadn’t heard about. I thought I’d blog this and make it official. The secret to making this all work is to use Google Chrome. Chrome has support for multiple people, and we’re going to use that to set up a Person for each Office 365 persona we have. Each Chrome Person has its own separate password store, bookmarks, and plugins. Perfect for what we’re doing. Of course you’ll need to have Google Chrome installed before this will work. You can download it from this link. Or, you can show off your geek prowess and download it with PowerShell using this: Invoke-WebRequest "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" -OutFile chrome_installer.exe –UseBasicParsing Chrome auto-updates, so even if you get an older version, it should update itself after it installs. After it’s installed look in the upper right corner for the Person icon. This screenshot shows my current Person and icon, but yours might look different:  It pulled my name “Todd” and my picture from my Google profile. After I created this person I logged into my Google account and it got it from there. We’ll cover that later. If you click on the Person icon you’ll get a dropdown like this. To add another user, click “Manage people.”  Right now I have a single, lonely person in Chrome. Fortunately we can add some friends with the Add Person button.  When you click the Add Person you get the dialog box to, well, add another user. I log in as my Office 365 Global Admin, so I’m going to make a Person for that user. I’m calling it “Office Admin” and I’m choosing the Ninja as its icon, it seems appropriate. If I log into Google as this Person it will download my Google profile including bookmarks and my Google avatar will replace the Ninja, sadly. In the lower left you have the option of creating a desktop icon for this Person. If you don’t, you simply pick it from the list in an existing Chrome instance. You can also add the desktop icon later if you regret not making it when you created the Person.  Now when we go into the “Manage people” screen my user has friends.  You can add as many users as you want. Each will have its own environment and its own set of stored passwords, bookmarks, and so on. You know what they say, “Pics or it didn’t happen.”  You can see I have two browsers both logged into Office as different users, and best of all it will all persist, so the next time I use the “Office Admin” Person in Chrome it will remember my username and password. And also unlike using Incognito Mode, I can have more than two different users logged in at a time. While I’ve talked about this all in the context of Office 365, it works for anything. If you have multiple Twitter accounts, YouTube accounts, whatever, this works. It’s a miracle of modern science, that’s what it is. tk ShortURL: https://www.toddklindt.com/ManyUsersBrowser | | | Todd O. Klindt | 10/1/2018 3:47 PM | Office 365; SharePoint 2016; Speaking; Sharepoint | 1 | | Want to join me for an all day SharePoint and Office 365 Admin Workshop? You are so in luck! On October 26th 2018 I will be teaching a one day workshop in beautiful, sunny Omaha Nebraska, Peyton Manning’s favorite!
Here’s the official event information:
Are you a SharePoint or Office 365 administrator looking for a fun way to spend a chilly Midwestern Friday? If so, then join Todd Klindt on Friday, October 26th for an all-day workshop on SharePoint and Office 365 Administration. He’ll pack as much administrative goodness into one day as humanly possible. He’s going to cover on-prem topics architecture and administration. Then he’ll switch gears and talk about cloud and Office 365 topics like authentication with Azure AD, OneDrive, SharePoint Online, Groups, and other administrative topics. After that foundation is laid down he’ll bring it all together by covering some of the hybrid opportunities there are with on-prem and online SharePoint and help you figure out which ones make the most sense for you. If there’s any time or brain cells left he’ll talk about migration and PowerShell.
The Omaha SharePoint User Group has created this low-cost training opportunity for our community. While we normally meet a couple hours each month, this day will provide an exceptional training opportunity at a very low cost.
What a great way to start your weekend, please join Todd on Friday for all things SharePoint.
Technologies Covered
SharePoint, Office 365, Azure AD, OneDrive, Groups
Details
Breakfast and snacks will be provided. Lunch is on your own.
All of this for only $50. What a good deal! Register now before all the seats are taken and you’re forced to press your face to the window from the outside and watch the rest of us have the times of our lives.
I've had a couple of questions about this. This class is in-person only. I don't think there are options for remote viewing. Sorry to anyone that has the misfortune of not being in Omaha that day.
tk
ShortURL: https://www.toddklindt.com/OmahaWorkshop2018 | | | Todd O. Klindt | 9/28/2018 5:40 PM | Podcast | 0 | | | | | Todd O. Klindt | 9/25/2018 5:15 PM | Podcast | 0 | | | | | Todd O. Klindt | 9/21/2018 8:19 AM | Podcast | 0 | | | | | Todd O. Klindt | 9/19/2018 5:09 PM | PowerShell; Office 365; Sharepoint | 0 | | Now, now, I know what you’re thinking, “This is a terrible idea! Why would any want to disable Flow?? What’s Flow ever done to them anyway?” I’m right there with you, honest I am, but a customer asked me how to do this and I can’t imagine they’re the only ones trying to do it. So while I’m a big fan of Flow and think everyone should enjoy it, in the unlikely event your organization doesn’t want to, here’s how to disable it. When things are in their default state, the Ribbon, or Toolbar in a Modern List or Document Library in Office 365 shows an easy to use link to wire up a Flow to the library. It looks like this:  Very cute, very innocent, but regardless, some folks don’t want it there. Even if the user hitting the list or library isn’t licensed to use Flow, it’s there. This is a per site collection setting, and nowhere in the site or site collection settings is there a place to shut it off. I turned on the Bat Signal, and PowerShell answered my call. Sort of… The official Microsoft SharePoint Online cmdlets have a cmdlets, Set-SPOSite and it has a parameter, –DisableFlows. Are you thinking what I’m thinking? Of course you are. And it does what we want, kind of. Here’s how the whole solution looks: Connect-SPOService -Url https://flowhater-admin.sharepoint.com $val = [Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy]::Disabled Set-SPOSite -Identity https://flowhater.sharepoint.com/sites/Me2Hub -DisableFlows $val You have to do the funny business with $val because the –DisableFlows parameter doesn’t accept a boolean, like a civilized parameter does, it requires its value to be in the form of a Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy object, whatever that is. So that’s what it gets. Now when we go to our Document Library it looks like this:  Sad, I know. When you come to your senses and want to reenable Flow, here’s how you do it: $val = [Microsoft.Online.SharePoint.TenantAdministration.FlowsPolicy]::NotDisabled Set-SPOSite -Identity https://flowhater.sharepoint.com/sites/Me2Hub -DisableFlows $val And now is all right in the world. Unless you have the fancy Site Collections that are using Groups in the background. Then you get the “womp womp” sound from Set-SPOSite. Okay, it really says, “Set-SPOSite : https://flowhater.sharepoint.com/sites/SPODemo2-Test2 is a Groups site collection.” but we all know what it really means. A less motivated man would have given up at this point. He would have taken this as a sign from the universe that one should not be disabling Flows, it’s just unnatural. Not this man. (In reality, not this man’s customer). So I went to Plan B, the PnP PowerShell, and it did not disappoint. The PnP’s version of the Set-Site cmdlet works with Group Site Collections and doesn’t require any weird casting voodoo. Here’s how it looks: Connect-PnPOnline -Url https://flowhater.sharepoint.com/sites/SPODemo2-Test2 -Credentials 'SteffenAdmin' Set-PnPSite -DisableFlows:$true Here’s how you right that wrong: Set-PnPSite -DisableFlows:$false That’s much easier, and works on all site collections. There you have it. I hope you never have to use it.  tk ShortURL: https://www.toddklindt.com/PoshDisableFlowButton | | | Todd O. Klindt | 9/18/2018 9:40 AM | SharePoint 2016; SharePoint 2019; SharePoint 2013; SharePoint 2010; Speaking | 0 | | | | | Todd O. Klindt | 9/15/2018 11:42 AM | SharePoint 2010; SharePoint 2013; SharePoint 2016 | 10 | | This isn’t specifically a SharePoint patching issue, but it’s close enough I thought I’d add it. A recent .NET security patch, KB 4457916, while doing a bang-up job fixing a remote exploitation in .NET, broke Workflows in SharePoint. Of course you could uninstall the patch, but everyone except the bad guys think that’s a horrible idea. Fortunately there’s a fix that allows you all the protection of the patch as well as continue to enjoy SharePoint workflows. This blog post on MSDN provides the solution;
After that, you should be good to go.
This issue punctuates why it’s important to keep an eye on the Windows patches on your SharePoint servers. If you’re using some sort of patch distribution service, like WSUS, your SharePoint servers should be in their own group.
If you’ve had any experience with this patch or the fix, leave a comment below.
tk
ShortURL: https://www.toddklindt.com/PatchBreaksWorkflow | | | Todd O. Klindt | 9/12/2018 4:02 PM | Podcast | 0 | | | | | Todd O. Klindt | 9/7/2018 4:45 PM | Podcast | 0 | | | | | Todd O. Klindt | 8/8/2018 8:37 AM | Podcast | 0 | | | | | Todd O. Klindt | 7/24/2018 4:13 PM | | 0 | | | | | Todd O. Klindt | 7/22/2018 10:28 AM | Podcast | 0 | | | | | Todd O. Klindt | 7/19/2018 9:23 AM | Sharepoint; Petri | 0 | | | | | Todd O. Klindt | 7/18/2018 9:33 AM | SPDocKit | 0 | | Back in May I started doing marketing work for SysKit, the folks that bring you fine products like SPDocKit. One of the things they asked me to do was to write a review of SPDocKit from the view of someone that uses it. They know I’ve been a big fan of SPDocKit for years, so I was happy to do it. This blog post is my review of SPDocKit, or at least the first part of it. I had so many things to say SysKit had to finally cut me off and tell me to publish the thing. I may follow this up with some more thoughts later. Here it is, my review of SPDocKit. I've been a SharePoint Administrator for a lot of years, the majority of my professional career. Over that time I've seen a lot of SharePoint utilities come and go. A few have grabbed me as being must haves, and SPDocKit is one of them. Since the first time I used it I knew how much value it provided the SharePoint admin, and with each update it's gotten even better. Today I want to walk you through a quick review of a few of my favorite pieces of SPDocKit and how you can put it to use for you. One of SharePoint's biggest strengths, and why I think it has been so popular is how easy it makes things for the users. IT is no longer the bottleneck to adding functionality or getting things done. If a user wants to add someone to their site, they can. If a user wants to create a new list, library, or even subsite, they can. No waiting on hold with the helpdesk. No filling out a web form that they didn’t know existed. No bribing IT with a bag of candy. All without IT lifting a finger. A win for IT, a win for the user, and ultimately a win for the business. But it does have a cost… SharePoint's greatest strength, putting power in the hands of the people, is also one of its greatest problems. Users don't care about governance, security, storage resources, any of that. They just worry about getting their job done. Unfortunately, sometimes that runs afoul of IT, and without IT knowing about it. Over the years IT departments have either been blindsided by this, when data leaked out, or drives filled up, or they’ve cobbled together solutions to keep an eye on it. I learned a long time ago what my favorite solution to the problem was, frequent doses of SPDocKit applied liberally to my SharePoint farms. SPDocKit is a tool, conceived and inspired by SharePoint experts, that documents your SharePoint farm in stunning detail. That sounds pretty boring on its surface, no one likes documentation. But the folks at SysKit have taken SharePoint documentation to a whole new level. They’ve made documentation fun, and very powerful. Not only does it do an impressively thorough of documenting a SharePoint farm, it produces completely customizable professional looking reports that are useful to admins, and their bosses. Personally, I don’t think any SharePoint farm is complete without SPDocKit. It gives the SharePoint Admin a fighting chance of keeping up with the growth and proliferation of their farms. The SPDocKit installation is a breeze. Don’t take my word for it, download a trial for free and walk through the install yourself. It’s right up my alley as a SharePoint admin that enjoys clicking “next” and “finish” a lot. You have the option to have SPDocKit store its results in SQL, and I recommend that. Since you’re documenting SharePoint you have a SQL instance at your disposal. Letting SPDocKit use SQL allows it to take advantage of SQL’s database engine to run queries and give you better information faster. Another nice touch is that while SPDocKit caters to SharePoint admins, it also has an install mode for SharePoint consultants, such as myself. This allows me to run it on a customer’s farm without leaving it there afterwards. Features like this showcase how in tune the SPDocKit developers are with the people that use their tools. Once you get SPDocKit installed you’re greeted with a very friendly page that shows you what tools are at your disposal.  There are a ton of great tools in SPDocKit, but the ones I use the most are in the top heading, Documentation and Configuration. This is where SPDocKit got its start and where it really shines, in my opinion. My trips into SPDocKit on a new farm usually start with “Take Snapshot.” If SPDocKit had a weakness (and I’m not sure it does) it would be that it does too good of a job collecting data. It finds useful information in many dark corners of SharePoint, and in that can be overwhelming depending on how big your farm is, or what information you’re looking for. To help combat the potential information overload, SPDocKit has a couple of options for what is collected during a snapshot. The “Default” mode is a good place to start. That report runs pretty quickly and gives you a good overview of what snapshots collect.  As you get more familiar with SPDocKit you can fine tune what does and does not get included in the Snapshot. Choosing the “Custom” mode lights up the “Options” step, which gives you more fine tuning on what is and isn’t included in the Snapshot.  You can run Snapshots as often as you’d like. SPDocKit keeps track of them all. At any point you can look at any previous Snapshot. You can create a report from the Snapshot, or even more. The obvious power of snapshots is to give you an easily consumable look at your farm at that moment. See how things are going, so you can address something if it needs it, or be proactive and get ahead of any problems coming down the road. SPDocKit does that with ease, but it takes it one step further. It allows you to compare snapshots over time, so you can also see trends in your farm.  The Compare Wizard can also compare two different farms, for instance, if you want to compare your Test farm with Production.  If you choose to compare two snapshots from the same farm you get a dialog box that lets you choose which two Snapshots to compare.  Once you choose the Snapshots, SPDocKit gets to work comparing them. After that’s finished, you got a dialog like the one below.  There are several results possible for each compared node. In the screenshot above, SPDocKit pointed out that the build number was different between the two Snapshots. The Snapshot taken before was running the April 2018 patch, 16.0.4678.1001. Some time after that, the farm was patched to the June 2018 patch, 16.0.4705.1000. If we drill down farther, we can also see there are differences in the site collections and content databases in the farm. Reports The place where SPDocKit really shines is with its reporting. As a nerd, it’s often tough for me communicate correctly with non-nerdy audiences. I get all excited about the technical aspects of something, and completely forget that not everyone else does. Sometimes I need help presenting in a way that can be easily consumed by my audience. SPDocKit lets me do this. It lets me see all the deep technical details of my farm, all the bytes of this, the users in that, but also lets me take that information, and distill it down to something that any CIO or other higher level person can look at and makes heads or tails of, without being overwhelmed by all the technical minutia. Not only does SPDocKit create easy to read, professional looking reports, it allows you nearly infinite customization options. This can be what information is reported, how deeply that information is reported, and even the style and colors used to report it. If your company has a particular color palette it uses, SPDocKit can make your reports match that. Want to put your corporate logo on the reports, too? Easy enough. And once you get the formatting exactly how you want it, you just save the template and SPDocKit lets you use that any time you create a report. I fill pages with all the customization options you have, but I won’t do that. I’ll show you a couple and let you take SPDocKit for a trial run and explore on your own. When you want to create a report, choose the Snapshot you want to report on and open it up. In the ribbon at the top you’ll see “Generate” in the Documentation area.  Notice “Customization” right next to that. Choose the format you want your documentation in. I usually choose PDF, as that is easy to forward on to whoever I am reporting to. After you choose the documentation type I’m presented with a dialog box asking which Template I want to use. These templates let you pick what information is included in the report.  Like the default Snapshot, choosing the “Simple Documentation” template is a good place to start. If you change any of the objects reported, SPDocKit will ask you at the end if you want to save it. That’s how I created the cleverly named “Temp 1” template at the end of that list. Once you’re satisfied that the information you want is in there, and the information you don’t want isn’t, click “Generate.” You’ll get the familiar Save dialog box where you can specify the name and location of your report. SPDocKit will open the report for you after it’s been saved. It will probably be a lot of pages, so don’t be surprised if you don’t have to run the Report Generation wizard a few times to get exactly the right information. Here are a couple of screenshots of the report I ran on one of my test servers:    Here’s the Microsoft Word version of the same report, with a little color splashed on for good measure.  As you can see, for good or bad, you have a lot of flexibility. I’ve run out of time for this blog post and I’ve only scratched the surface of what SPDocKit can do. There’s so much more to talk about. In an upcoming blog post I’ll gush over the other features that make SPDocKit such a great and indispensable tool. tk ShortURL: https://www.toddklindt.com/SPDocKitReview | | | Todd O. Klindt | 7/17/2018 8:26 AM | Podcast | 2 | | | | | Todd O. Klindt | 7/11/2018 2:58 PM | SharePoint 2019; Sharepoint | 0 | | | | | Todd O. Klindt | 7/11/2018 2:39 PM | Podcast | 0 | | | | | Todd O. Klindt | 7/6/2018 8:35 AM | SharePoint 2016; SharePoint 2019; Sharepoint | 2 | | The Internet is a pretty big place. There’s my blog, YouTube, some funny cat videos, lots of stuff in lots of places. I think it’s safe to say I’m the uncontested best poster here at toddklindt.com. It was a an uphill fight, but I prevailed. I’ve set my sights a bit higher. I’m going to start writing articles for Petri.com as well. I’ve written a few things for them in the past, but hopefully I’ll do a better job sticking with it this time. I’ll still be posting here at toddklindt.com, so don’t remove it from your Favorites bar just yet. I’ll just be augmenting it with some articles over at Petri. That’s a decent site too, so you’re probably already going there. If you’re not, shame on you, you should be. My first article, 5 Things You Can Do to Prepare for your SharePoint 2019 Migration, went up this week. Check it out. You can leave comments there or here. I’m checking both places. If you have ideas for articles, for here or there, let me know. I’m always happy to take requests. Even “stop writing” requests.  tk ShortURL: https://www.toddklindt.com/SP20195Things | | | Todd O. Klindt | 7/2/2018 2:44 PM | Sharepoint | 2 | | July 1st is one of my favorite days of the year. It’s the beginning of the second half of the calendar year, the days are long, the sun is bright, and of course, it’s Canada Day! And our own Independence Day is right around the corner. It’s about this time I start getting out my shorts with the elastic waistband in preparation for all the good eats. July 1st has also been, for the last decade, MVP renewal date. The MVP Program is a program at Microsoft were they recognize people in the community that support and evangelize Microsoft products. I have gotten the award every year since 2006, and without too much hyperbole, it has changed my life. It has opened doors for me that otherwise would have been very difficult to open, and it has allowed me to surround myself with many like-minded folks, most of which are much smarter than me, and most of which I am lucky enough to call friends. It’s been wonderful, to say the least. So every year, when July 1st starts getting close, I get nervous. I get nervous that my contributions in the previous year weren’t enough to earn the award for another year. That would be very sad indeed. Fortunately yesterday I got the happy email,  I’d like to thank Microsoft for the opportunity and for renewing me each year. I’d also like to thank everyone that reads my blog, responds to my tweets, and comes to my sessions. I do all of this for you all, and knowing it helps you is what keeps me going. And congratulations to all of my fellow MVPs out there that either got renewed, or were awarded for the first time. tk ShortURL: https://www.toddklindt.com/2018MVPAward | | | Todd O. Klindt | 6/21/2018 10:46 AM | Podcast | 1 | | | | | Todd O. Klindt | 6/20/2018 2:27 PM | Podcast | 0 | | | | | Todd O. Klindt | 6/13/2018 9:17 AM | Podcast | 0 | | | | | Todd O. Klindt | 6/10/2018 5:11 PM | Podcast | 0 | | | | | Todd O. Klindt | 6/8/2018 4:16 PM | SharePoint 2016; SharePoint 2019 | 2 | | | | | Todd O. Klindt | 5/30/2018 11:13 AM | Podcast | 0 | | | | | Todd O. Klindt | 5/29/2018 3:13 PM | Podcast | 0 | | | | | Todd O. Klindt | 5/19/2018 11:26 PM | PowerShell | 0 | | The Internet wouldn’t work if it weren’t for Short URLs. How else would we efficiently share our funny cat videos? I’ve written a couple of blog posts on them myself. Handy little devils, aren’t they? One downside of them is you don’t know where they’re going to lead you. That innocent looking bit.ly link could take you to some amazing bit of wisdom on the internet, sure. But short URLs can have a dark side, too. The payload waiting for you on the other side of that t.co link could also be a Rick Astley video, you just never know. Being a generally untrusting person, I always hesitate to click URLs if I don’t know exactly where they are going. But then I started feeling like I was missing out on stuff. That’s when I put my thinking cap on and wrote this little PowerShell gem: $url = “https://www.toddklindt.com/sp2016builds” ((Invoke-WebRequest -UseBasicParsing –Uri $url).baseresponse).ResponseUri This little beauty will take a short URL for any of the common shorteners and tell you what it resolves to. Here it is in action.  The URL at the top is the short URL we want to check, and the circled URL below is the secret URL it’s forwarding you to. If you decide it is safe, you can type start $url in PowerShell and it will open up in your default browser. Once again, PowerShell comes to the rescue. I hope this helps a few of you explore short URLs without fear, and without having to listen to Rick Astley, unless you want to of course. tk ShortURL: https://www.toddklindt.com/PoshResolveShortURLS | | | Todd O. Klindt | 5/14/2018 11:07 AM | Podcast | 2 | | This week's podcast starts off with Todd talking about a couple of new things he's doing. First his new role, the Chief Evangelist for SysKit. Also, some help he's giving the OneDrive Product Team to update their documentation. After that Shane and Todd talk a bit about MS Build and the upcoming SharePoint Conference. They also touch on GDPR and Cord cutting, and calendars in SharePoint Online. And no self respecting podcast would be complete without Shane going gaga over PowerApps. Audio File  Video File   YouTube (Subscribe) Subscribe in iTunes Running Time: 47:07 Links: ShortURL: http://www.toddklindt.com/Podcast388 | | | Todd O. Klindt | 5/9/2018 3:28 PM | | 2 | | For the last few months, the folks at SysKit and I have been keeping a secret. I’ve been a fan of their products for years, and they’re the only company I’ve ever let advertise on my blog because of that. A few months ago we realized that we both wanted to work together more and this crazy idea was hatched. Starting May 1st I am officially the Chief Evangelist at Syskit. I will be working with them to deliver the message about their products, and connect them more to their customers. It lets me do two things I love, playing with SysKit products, and hanging out with SharePoint Admins, some of my favorite, hardest working, best looking people on the planet. You can read the big announcement on the SysKit Blog. What does this all mean? Well, you’ll start seeing some posts about SysKit products and events here on my blog, and you’ll see me showing up at events with them and probably on their blog from time to time. My role with SysKit is a part-time role, so I will still spend plenty of time getting my hands dirty in SharePoint and Office 365 environments of all shapes and sizes. This will help me keep in touch with the products and how people are using them. I’m really excited about working with SysKit and I’m grateful that they’ve given me this opportunity. If you have any feedback on any SysKit products, please let me know. tk ShortURL: https://www.toddklindt.com/SysKitChiefEvangelist | | | Todd O. Klindt | 5/3/2018 4:41 PM | Podcast | 0 | | | | | Todd O. Klindt | 5/2/2018 9:18 AM | OneDrive | 10 | | In the past few weeks I've had a couple of conversations with customers that have wanted to use some old school solutions for modern day problems, with Office 365. One was trying to get Explorer View to work, the other was trying to map a network drive to a document library. Neither were having much luck. That's when I stepped in with what was probably an unappreciated answer, "Use the OneDrive Sync client instead." OneDrive has taken its share of knocks over the years, and much of that was well earned. In the last two or three years, the OneDrive team has put on both their thinking caps, and their heavy leather working gloves and they've really made things happen. While I struggle to find a single area of improvement that I like the most, the sync client has got to be right up there. Most, if not all of the frustrating, infuriating, sync issues have been cleared up. And it can sync OneDrive Consumer, on-prem SharePoint MySites, and multiple Office 365 tenants. Most importantly, late last year, it added on-demand sync functionality to the Next Generation Sync Client (NGSC). This allows the sync client to see all of the files in the team site, document library, or whatever, without actually downloading the files and taking up local space. Here is how multiple libraries looks in Explorer:  All of those locations are under the purview of OneDrive’s Next Gen Sync Client. Back to my customers. In the first situation, the customer wanted to get Explorer View to work because that was the way they were most comfortable uploading a bunch of files to SharePoint. They wanted to lasso a bunch of files in Windows Explorer, Ctrl-C copy them, open up a SharePoint Document Library in Explorer View, and Ctrl-V paste them in. I can't blame them. That method has worked for the last decade, and if it ain't broke, don't fix it. Except it is broken, sort of. Explorer View uses two technologies, WebDAV and FPRPC. Neither of which has aged well. And they behave differently depending on which version of Windows you have installed, and which version of Office you have installed. It's unreliable at its best, and downright infuriating at its worst. And if you're using Edge, it flat out won't work at all. Instead of having their business balance on that decade old cobbled together technology, I recommended they use the OneDrive NGSC to accomplish this. I told them to sync it with the library where they want to upload the files. That will expose the document library to Windows, in Explorer, PowerShell, and anything else they want to run. Now they can use their lasso technique in Explorer to upload files, and do it with a current, maintained, and mostly reliable client, the OneDrive NGSC. Once the files are copied into the local OneDrive location, the NGSC will sync them up to Office 365. After that's finished the user can choose to no longer sync that folder, or keep syncing it, but free up space by making those files "Cloud Only" with OneDrive. The other scenario was mapping a network drive to SharePoint. This customer didn't want to do a one time operation like the Explorer View customer above. They wanted a quick, easy link to their frequently used SharePoint documents, and in the familiar Explorer interface. Again, I can't blame them for that. It's familiar, and it works well. Except it doesn't sometimes. Once again, if you're using Edge, mapping as a network drive is not supported. Fortunately, if you have the OneDrive NGSC installed, you can use the same technic we used above, to mimic this behavior. Use OneDrive's "Sync" to sync with all of the locations you would have mapped as network drives. When you do they'll show up in Explorer and your file system. You'll be able to use them however you'd like. Since the OneDrive NGSC supports on-demand sync this won't take up extra space on your local machine, just like mapping as a network drive didn't. I hope that helps a little. tk ShortURL: https://www.toddklindt.com/UseOneDriveSyncClient | | | Todd O. Klindt | 4/30/2018 11:09 AM | Office 365 | 2 | | The cloud has come a long way in the last few years. One of the ways it has improved, though not fast enough in my opinion, is storage allocation or quotas. Cloud storage providers have struggled with how to offer increasing amounts of storage in a way that is financially viable for them. The 1 TB package I could buy from Dropbox, OneDrive, or Google Drive 3 years ago is the same today, despite the fact that physical storage itself is cheaper, and storage needs and cloud storage reliance have increased. I am happy to report that in one area, Microsoft is getting it right. Very right. Before Friday your Office 365 tenant got 1 TB of storage, plus .5 GB for each user license. This was storage you could assign to any of your SharePoint Online site collections outside of OneDrive for Business. If you had 25 user licenses you had 1012.5 GB of storage in your tenant, 12.5 GB from your licenses (25 x 0.5 GB) and the 1 TB each tenant gets. Each user also gets 1 TB in their personal OneDrive, but that’s a different pool of storage. On April 27th, 2018, in the blog post Increase in SharePoint Online storage allocation, Aaron Rimmer the Product Marketing Group Manager for OneDrive at Microsoft, outlined the changes to SharePoint Online’s storage allocation. Starting on July 1st, 2018, every Office 365 tenant (except kiosk and F1 tenants) will still get their initial 1 TB, but they will also get a staggering 10 GB of storage for each licensed user. That’s a 20x increase! Now, that 25 user tenant would have 1500 GB of storage, up from the current 1012.5 GB. As someone that is a happy Office 365 Administrator what do you need to do to take advantage of this storage windfall? Two things, first send me $5 via PayPal. Okay, maybe not that. The second step, well, you’re already doing the second step. Do nothing. Microsoft will start rolling this out July 1st, 2018, and they plan to have the roll out completed by August 1st, 2018. Your only job now is to sit back, relax, and start planning on how you’re going to take advantage of all of that storage you’re going to be getting. May I suggest more funny cat videos? tk ShortURL: https://www.toddklindt.com/O365StorageIncrease | | | Todd O. Klindt | 4/27/2018 1:30 PM | Podcast | 0 | | | | | Todd O. Klindt | 4/19/2018 4:23 PM | Podcast | 0 | | | | | Todd O. Klindt | 4/16/2018 10:50 PM | PowerShell | 0 | | | | | Todd O. Klindt | 4/13/2018 9:56 AM | Speaking | 0 | | I’ve had a busy month or so of travel, going to the MVP Summit and being honored to speak at SPS Omaha. All of those things are in the rear-view mirror. The next big event for me, really for all of us, is the SharePoint Conference North America.
I could go on and on about how great it’s going to be. Microsoft will be there in full force. Answering our questions, showing us cool stuff, giving away annoying screeching monkeys, and just generally making things fun. There’s also going to be a bunch of the best non-Microsoft folks there. Presenters, sponsors, you name it. It would be a shame if you missed it all.
Speaking of missing it all, here is my schedule during the event. I’ll update it as I add new things:
Monday, May 21st - 11:00 - 11:30 Keynote Wrapup (Expo Hall Podcasting Booth)
Monday, May 21st - 3:00 – 4:00 SharePoint Migration, What Did I Get Myself Into? (Room 123)
Monday, May 21st - 5:15 – 6:30 SharePint, Reception in the Expo Hall
Tuesday, May 22nd – 8:30 – 9:30 Life as a SharePoint Administrator in the Year 2018 (Room 123)
Tuesday, May 22nd - 10:45 - 11:30 Hangout with me at the SysKit Booth in the Expo Hall (Booth 423)
Tuesday May 22nd - 5:00 – 6:30 Record Podcast in the Expo Hall
Tuesday, May 22nd – 8:00 – ???? Attendee Pool-side Party
Wednesday, May 23rd – 9:45 – 10:45
Cloud Authentication Options for Hybrid Environments (Room 121)
Thursday, May 24th - 9:00 – 4:00 SharePoint Administration Day Camp workshop (Room 112)
You can download the full conference schedule from here.
Shane and I are also planning on having a Podcast get together at some point. I’ll let you all know when that will be.
Does this sound like too much fun to pass up? Of course it is! If you haven’t already registered (tsk, tsk) don’t fret, there’s still time. Point your favorite browser to the SharePoint Conference NA web site and get Registered. If you use the Discount Code KLINDT you’ll get $50 off, my eternal gratitude, and it’ll make Shane mad. Everybody wins!
If have the unfortunate situation of not being able to join us at SPC NA in person, but still want to join in, here's a link to a live stream of the Keynote.
See you in Vegas,
tk
Download Slides
ShortURL: https://www.toddklindt.com/SPCNA2018
Edited 4/18 to fix Podcast time
Edited 4/20 to add Authentication session
Edited 5/15 to add Keynote podcast and time at the SysKit booth
Edited 5/20 to add link to Keynote live stream
Edited 5/25 to add download link
| | | Todd O. Klindt | 4/12/2018 1:47 PM | Podcast | 0 | | Shane's got a new job, and that's how they start out this week's podcast, talking about Shane's new endeavor. After that they talk about Todd's trip to SPS Omaha, and how much fun he had. After all of that they talk about new OneDrive functionality that will help you combat ransomware, new patches for SharePoint, Office 365 endpoints, Windows 3.1 File Manager on Windows 10, and of course, a word or two from Shane's newest love, PowerApps. All that and more this week on Todd and Shane's Cloudy Podcast. Audio File  Video File   YouTube (Subscribe) Subscribe in iTunes Running Time: 50:41 Links: 05:00 I got a new Job, PowerApps911 18:00 Restore your OneDrive 22:00 Announcing: Office 365 endpoint categories and Office 365 IP Address and URL web service 24:00 Windows File Manager (WinFile) is Open Source 26:00 File Manager Primer 27:00 New version of Microsoft's SharePoint Migration Tool 29:00 Download Microsoft SharePoint Migration Assessment Tool 00:34 PowerApps Password Screen 35:00 PowerApps SharePoint Columns 36:00 PowerApps Patch Function 40:00 Pocket Casts Desktop for Windows 10 is a fantastic podcast app 46:00 SPS Vancouver 47:00 Cloud Friday Nashville 47:00 SPS Nashville 47:00 SPS Montreal Call for Speakers 47:00 SPS Charlotte 48:00 SharePoint North America Conference 48:10 SharePoint Administration Day Camp 48:20 SPTechCon Boston ShortURL: http://www.toddklindt.com/Podcast384 | | | Todd O. Klindt | 4/10/2018 2:37 PM | Podcast | 0 | | | | | Todd O. Klindt | 4/9/2018 3:01 PM | Podcast | 0 | | | | | Todd O. Klindt | 3/28/2018 9:02 AM | Podcast | 0 | | | | | Todd O. Klindt | 3/22/2018 9:38 AM | Podcast | 0 | | | | | Todd O. Klindt | 3/20/2018 11:15 AM | Podcast | 0 | | | | | Todd O. Klindt | 3/9/2018 9:21 AM | Podcast | 0 | | | | | Todd O. Klindt | 3/4/2018 4:24 PM | PowerShell | 1 | | In my quest to become a minor YouTube celebrity, I recently graced Shane’s YouTube channel with a video. This video covers how to use PowerShell to create Active Directory users. It’s a live action video version of this blog post. I start out by showing how to add AD support to PowerShell, and my big finish is working through a CSV file and creating a bunch of users. I hope I didn’t spoil the ending for you.  Here’s a link to the video. I reference some files in the video, here they are: Enjoy. Watch the video. Watch it twice. Leave a comment and let me know what you thought of it. tk ShortURL: https://www.toddklindt.com/PoshIntroAD | | | Todd O. Klindt | 2/27/2018 3:27 PM | | 2 | | | | | Todd O. Klindt | 2/20/2018 10:27 AM | Podcast; Netcast | 0 | | | | | Todd O. Klindt | 2/12/2018 10:45 AM | | 0 | | | | | Todd Klindt | 2/5/2018 4:49 PM | Podcast | 0 | | | | | Todd Klindt | 2/2/2018 8:25 AM | SharePoint 2016; Speaking | 2 | | The new year is upon us. This means the conference season is in full swing. There are a ton of great SharePoint and Office 365 conferences this year, and some of them are even letting me participate, restraining orders be damned! The first one, and maybe the biggest one, is the SharePoint Conference North America. It has been four, very long, years since the SharePoint Community has descended on Las Vegas and showed it what a tech community is really like. If you haven’t already seen all the gooey details about the 2018 SPC, let me explain. There’s too much, let me sum up. The festivities are taking place May 21 – 23, 2018 at the MGM Grand in Las Vegas. There are also optional workshops the weekend before and a couple of days after.  And speaking of workshops, my sidekick and I, Shane Young, will be doing an all day workshop on Thursday May 24th. It will cover SharePoint Administration in the year 2018. We’ll cover SharePoint Server, Hybrid Scenarios, Office 365, the works. We’ve even written a few new jokes, so you know we’re serious about this thing. We’ll also be doing a couple of sessions, so once you get registered, make sure to add them to your schedule. We haven’t finalized it yet, but we’ll also be having some sort of a get together. Probably one of the mornings. The idea is that if you’ve seen us on YouTube, or read our blogs this is your chance to come up and say Hi and see if Shane really is as annoying in person as he appears on the Internet. (He is) While SPC will be great, it won’t be the same without YOU there. If you haven’t already, go to https://www.sharepointna.com and get yourself registered. If you use the Promo code KLINDT, then I get $50, you get $50, and you also get a big bear hug, or a firm handshake from me. Your choice. Join me at SPC. I’ll be there. Will you? tk ShortURL: http://www.toddklindt.com/BeThere | | | Todd Klindt | 1/29/2018 8:34 AM | Podcast | 0 | | | | | Todd Klindt | 1/22/2018 9:43 AM | Podcast | 0 | | | | | Todd Klindt | 1/12/2018 11:05 AM | Podcast | 0 | | | | | Todd Klindt | 1/2/2018 9:59 AM | Podcast | 1 | | | | | Todd Klindt | 12/19/2017 10:21 AM | Podcast | 0 | | | | | Todd Klindt | 12/15/2017 4:51 PM | Podcast | 0 | | | | | Todd Klindt | 12/8/2017 11:21 AM | PowerShell; SharePoint 2013; SharePoint 2010; SharePoint 2016 | 0 | | I’ve been known to patch a SharePoint server here and there. Once in a while, when I’m on a customer server its Internet Explorer security settings will prevent me from being able to download a patch. I’ll go to my favorite patch list, toddklindt.com/sp2016builds or toddklindt.com/sp2013builds, and pick the patch I want. But when it comes down to getting the patch the IE security settings will prevent me from actually downloading said patch. Sadness ensues. I’ve had to do various dances to get the patches and recently I’ve started leveraging PowerShell more and more to do so. After a conversation with Jason Himmelstein I agreed to publish the PowerShell I use. Jason promised me you wouldn’t laugh. So you can’t laugh. I also made a video of how to use it.  The Usage I packaged this as a function, Get-TKMSKBDownload, and while it’s in a module, you can easily paste it into any existing module file you might already be using. To use this function download TKDownloadFile.psm1.txt. Remove the “.txt” at the end to rename it to TKDownloadFile.psm1, Rename-Item .\TKDownloadfile.psm1.txt .\TKDownloadFile.psm1. Then Import it into your PowerShell session with Import-Module TKDownloadFile to let it know it’s there.  I have lovingly provided some Help and Examples to help you use it. In trying to address all of the situations where I’ve done this, I made sure the function worked with either details.aspx and confirmation.aspx URLs for the download link.  To use it, go to my patches page and click the Download link for the patch you want. Then copy that URL out of your browser and paste it after the function, like in the example: Get-TKMSKBDownload -url https://www.microsoft.com/en-us/download/confirmation.aspx?id=56230 It will download the patch into your current directory. It should look like this when it runs:  After the file is downloaded you can run it and patch your SharePoint server. I won’t paste all the code in this blog post, (download it here) but I do want to highlight a couple of pieces of it. First, this is the line I use to get the direct link to the patch download, where $url is the link from the patches page: $downloadurl = ((Invoke-WebRequest -UseBasicParsing -Uri $url).links | Where-Object -Property data-bi-cN -Like -Value "click here to download manually" | select -First 1).href Before I wrote this PowerShell I had a couple of instances where I needed the direct link to the patch. I had had to use the Developer Tools in Chrome to find the URL in the Microsoft Download web page. I was able to use that information to craft the line above. If you’re curious, you can start with the part inside of the parenthesis (Invoke-WebRequest -UseBasicParsing -Uri $url) and see how the page is loaded as an object by PowerShell. There is some interesting stuff in there. The other part I needed was the name of the file to save. That’s part of the $downloadurl object, so I used this PowerShell to put off the file name, which is everything after the final / character, plus 1 so we don’t get the / itself: $file = $downloadurl.Substring($downloadurl.LastIndexOf("/") + 1) With those two pieces of information I’m able to pull the patch down and save it. Invoke-WebRequest -UseBasicParsing -Uri $downloadurl -OutFile $file As always, I had a couple of people look this code. Thanks to Shane Young and Jeff Hicks for all of that. Jeff had some great ideas for a v2 of this, like being able to specify a download directory, or backgrounding the download job. All good ideas, but I didn’t want to delay the publication of this blog post to implement them. If I keep using this module I may add them later. If I do, I’ll update this blog post. Once again, if you’d like to see all of this magic in action, you can watch my HowTo video on YouTube. tk ShortURL: http://toddklindt.com/PSDownloadMSPatch | | | Todd Klindt | 12/7/2017 9:49 AM | Podcast | 0 | | | | | Todd Klindt | 12/4/2017 9:40 AM | Podcast | 0 | | | | | Todd Klindt | 11/28/2017 9:31 AM | Podcast | 0 | | | | | Todd Klindt | 11/20/2017 10:42 AM | Podcast | 0 | | | | | Todd Klindt | 11/20/2017 9:20 AM | Podcast | 0 | | | | | Todd Klindt | 11/20/2017 8:56 AM | Podcast | 0 | | | | | Todd Klindt | 10/30/2017 9:09 AM | Podcast | 0 | | | | | Todd Klindt | 10/23/2017 9:20 AM | Podcast | 0 | | | | | Todd Klindt | 10/12/2017 9:57 AM | Podcast | 0 | | | | | Todd Klindt | 10/5/2017 2:08 PM | Podcast | 0 | | | | | Todd Klindt | 10/5/2017 9:14 AM | Podcast | 0 | | | | | Todd Klindt | 9/21/2017 1:23 PM | Podcast | 0 | | Feature Pack 2 is upon us, and in this podcast Todd and Shane tell you what's to love, and what's not to love about it. They also revisit the Equifax breach discussion from last week, and add some additional context to what happened. As if that weren't bad enough, they also discuss the popular cleanup app, CCleaner, and how it has been quietly compromising customer machines for months. They finish up with good news when they talk about Microsoft's On-Prem data gateway, and how it's so easy to use, even Shane can do it. Audio File  Video File   YouTube (Subscribe) Subscribe in iTunes Running Time: 29:06 Links: 05:08 Feature Pack 2 for SharePoint Server 2016 14:22 Ccleaner used to spread malware 17:19 Pirate Bay hijacking your browser to mine Bitcoin 20:22 On-Prem Data gateway for Power BI, PowerApps, Microsoft Flow, and Azure Logic Apps 26:01 Microsoft Ignite 26:45 Thrive Conference 27:08 Shane speaking at SoCal User Group ShortURL: http://www.toddklindt.com/Podcast356 | | | Todd Klindt | 9/14/2017 11:05 AM | Podcast | 0 | | | | | Todd Klindt | 9/12/2017 5:17 PM | Podcast | 0 | | | | | Todd Klindt | 9/11/2017 11:55 AM | Podcast | 0 | | |
|
Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); 0x0 0x1 ContentType 0x01 898 View in Browser /blog/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /blog/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /blog/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /blog/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType ods 255 |
|