Posted on:
Categories: Business;SharePoint
Description: What's new in SharePoint 2016 based on details published at Ignite 2015
​After Microsoft has announced that they started to work on the next SharePoint version, some of you have asked us on new features and the upgrade process. Due to the fact that Microsoft has not released this information to even their partners, we weren't able to answer you. But now that Microsoft has released initial information on some of the new features, boundary limits, general improvements, and updated hardware requirements, we're glad to provide this valuable information to our readers."With SharePoint Server 2016, in addition to delivering durable and exciting on-premises capabilities, we're focused on bringing the value we ship in Office 365 to our on-premises customers, ensuring that we make it seamless to bring the cloud to your datacenter through new hybrid innovation." - Julia White, General Manager Microsoft Office 365 Product MarketingThe most enthralling new features and changes are presented in this post. SharePoint 2016 is still steps apart from being feature-complete, so some of the new functionalities may be subject to change.Good news for all those who are thinking about migrating their SharePoint 2013 farm to SharePoint 2016 SharePoint 2016 will still be available as an on premise version and the hardware requirements haven't changed much. Most noticeable is that SharePoint 2016 requires Windows Server 2012 R2 or Windows Server 10. I'm expecting a release candidate to be available Q2/2016 - a public beta might become available at the beginning of Q4/2015. Although the final release of SharePoint 2016 is still a year ahead, we are starting to offer migration assistance now. New Boundaries and Limits There have been some changes to limits, which have been demanded by users for a long time. The size of a database has been increased from 200GB to 1TB, which will allow larger site collections and a better structured information architecture. The list threshold has been increased to more than 5000 items. Although this will have a serious impact on the back-end SQL-Servers, I don't expect performance drawbacks.The increased file size of 10GB now allows you to save large video files or CAD drawings to SharePoint as well. SharePoint MigrationAccording to the latest information from the SharePoint product group, there will be the same database migration process to upgrade to SharePoint 2016 as with SharePoint 2010. I don't expect inline upgrades to be available.I strongly recommend to upgrade from SharePoint 2010 to SharePoint 2013 before taking any actions regarding an upgrade to SharePoint 2016.I'm also expecting additional scripts to help in migrating office documents from SharePoint 2013 to SharePoint 2016 Patching The process of updating an existing SharePoint farm has been changed dramatically. The manual process of installing cumulative updates will be replaced by a process called Zero Downtime patching. The monthly CUs will become smaller and the users won't even notice that an update is currently happening.This new method of applying updates should increase reliability of the service, reduce the number of patches and impact with a goal of zero downtime. Durable Links One of the key features that have been a challenge for many versions is the management of URLs, as persistent instead of changing, as documents are moved around. In previous versions of SharePoint, you needed to turn "on" the Document ID service to generate unique IDs for your documents to ensure permanent accessibility. Durable links and the Redirect Manager are based on a new service that also handles the context switching of URLs as documents are shared on premise through guest access or through external sharing.Although this will not remove the need for Document IDs, this new feature is a tremendous increase to User Experience in SharePoint. How Delve works with SharePoint The way we find content and people is evolving. The recently introduced Delve does an excellent job at presenting related content and the people around you. The People Profile in Delve is going to be replacing the MySite profiles and provide a context-sensitive way of finding the individuals that you interact with the most and their related documents/content that they are working on.Delve will be able to pull content from SharePoint on premise and online to provide a single location of all the documents that are relevant to you. In addition to discovering documents through Delve on your PC, you can now download a dedicated Delve app providing enhanced mobile browsing abilities. The New Office 365 Video Portal Also being introduced is the new Office 365 Video portal. This Office 365 Portal has been created to allow organizations to effectively share videos such as presentations, sales materials, training videos and executive communications. By using channels, you can group videos and assign permissions to who can view, update, and comment on them. Going further, you can now download the Office 365 Video app and be able to view videos on your phone.As a Senior SharePoint Consultant with Softlanding I'm sure that SharePoint 2016 will change the way we are collaborating and it will also change the way we are accessing all kinds of information. "Cloud first. Mobile first" is the strategy that Microsoft is currently following and I expect SharePoint 2016 to have a strong focus on cloud and mobility. I'm excited to watch the progress of the SharePoint 2016 development and will post updates here as soon as there are any further news. ​

Posted on:
Categories: SharePoint;PowerShell
Description: A PowerShell script to analyze all JPEG images in a SharePoint landscape and establish which of them contain embedded GPS information.
We're finding that an increasing number of JPEG photos uploaded to SharePoint contain GPS information, due to built-in GPS devices. In some industries, such information has real value. Rather than force people to manually tag mountains of photos, we could automatically extract the information and unlock a range of geo-oriented value-adds.​Here is a PowerShell script we wrote to take just the first step. It analyzes the images across a SharePoint landscape and so establishes what proportion of them contain GPS information.The output is a CSV listing of all JPEGs including, when found, latitude, longitude and altitude.Some warnings This reads the content of every JPEG and could affect your farm performance. It would be wise to run it outside of peak hours. The finding of the images is done via search and so is security trimmed. Run it under a suitably-privileged account. The script can be run remotely but you probably want to do that only for small tests (and scope the query down). For the full run you'll get better performance and spare the network by running it from one of the SharePoint servers.Scriptparam( [Parameter(mandatory = $false)][switch]$promptForCreds ) [System.Reflection.Assembly]LoadWithPartialName("Microsoft.SharePoint.Client") [System.Reflection.Assembly]LoadWithPartialName("Microsoft.SharePoint.Client.Search") [System.Reflection.Assembly]LoadWithPartialName("System.Drawing") $url = "http//yoursite.whereva" # Any site - just to get at the search service $queryText = "(fileextension.jpg OR fileextension.jpeg) -size>5000000" # get all non-huge JPEGs $outputCsvPath = "results.csv" # EXIF standard property identifiers $exifLatitudeId = 2 $exifLongitudeId = 4 $exifAltitudeId = 6 #------------------------------------------------------------------------------------ # Functions #------------------------------------------------------------------------------------ function GetDecimalGPSValue($src) # Convert raw lat/long bytes into a useful decimal # Code acknowledgement https// [double] $deg = [System.BitConverter]ToUInt32($src, 0) [uint32] $deg_div = [System.BitConverter]ToUInt32($src, 4) [double] $min = [System.BitConverter]ToUInt32($src, 8) [uint32] $min_div = [System.BitConverter]ToUInt32($src, 12) [double] $mmm = [System.BitConverter]ToUInt32($src, 16) [uint32] $mmm_div = [System.BitConverter]ToUInt32($src, 20) [double] $m = 0 if ($deg_div -ne 0 -or $deg -ne 0) $m = ($deg / $deg_div) if ($min_div -ne 0 -or $min -ne 0) $m = $m + ($min / $min_div) / 60 if ($mmm_div -ne 0 -or $mmm -ne 0) $m = $m + ($mmm / $mmm_div / 3600) return $m.ToString() function GetDecimalGPSAltitudeValue($src) # Convert altitude bytes into a useful decimal [double] $alt = [System.BitConverter]ToUInt32($src, 0) [uint32] $alt_div = [System.BitConverter]ToUInt32($src, 4) [double] $m = 0 if ($alt_div -ne 0 -or $alt -ne 0) $m = ($alt / $alt_div) return $m.ToString() #------------------------------------------------------------------------------------ # Main Script #------------------------------------------------------------------------------------ $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url) $creds = $null if ($promptForCreds) $creds = Get-Credential $ctx.Credentials = $creds # Start new CSV if (Test-Path -Path $outputCsvPath) Remove-Item $outputCsvPath # Execute CSOM search query a page-at-a-time in order to avoid hitting limits $findingResults = $true $startRow = 0 $pageSize = 500 $happyCount = 0 $totalCount = 0 while ($findingResults) $keywordQuery = New-Object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($ctx) $keywordQuery.RowLimit = $pageSize $keywordQuery.StartRow = $startRow $keywordQuery.RowsPerPage = $pageSize $keywordQuery.QueryText = $queryText $keywordQuery.EnableSorting = $true $keywordQuery.SortList.Add("LastModifiedTime", [Microsoft.SharePoint.Client.Search.Query.SortDirection]Descending) $keywordQuery.SourceId = [guid]"8413cd39-2156-4e00-b54d-11efd9abdb89" # Local SP Results $searchExecutor = New-Object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($ctx) $resultTables = $searchExecutor.ExecuteQuery($keywordQuery); $ctx.ExecuteQuery() if ($resultTables.Value.ResultRows.Count -eq 0) $findingResults = $false break foreach($resultRow in $resultTables.Value.ResultRows) $status = $("Files with GPS info 0 of 1" -f $happyCount, $totalCount) Write-Progress -Activity "Analyzing" -Status $status # Retrieve the image file $request = $null if ($creds -eq $null) $request = Invoke-WebRequest -Uri $resultRow.Path -UseDefaultCredentials else $request = Invoke-WebRequest -Uri $resultRow.Path -Credential $creds try # Read image data and attempt to extract GPS values $img = [System.Drawing.Image]FromStream($request.RawContentStream) $exifLatitude = $img.GetPropertyItem($exifLatitudeId) $latitude = GetDecimalGPSValue -src $exifLatitude.Value $exifLongitude = $img.GetPropertyItem($exifLongitudeId) $longitude = GetDecimalGPSValue -src $exifLongitude.Value $altitude = $null try $exifAltitude = $img.GetPropertyItem($exifAltitudeId) $altitude = GetDecimalGPSAltitudeValue -src $exifAltitude.Value catch # Ignore error - no altitude found $fileInfo = @ Url=$resultRow.Path; FileSize=$resultRow.Size; Modified=$resultRow.LastModifiedTime.ToString("yyyy-MM-dd"); InfoFound=$true; Lat=$latitude; Long=$longitude; Alt=$altitude $happyCount++ catch $fileInfo = @ Url=$resultRow.Path; FileSize=$resultRow.Size; Modified=$resultRow.LastModifiedTime.ToString("yyyy-MM-dd"); InfoFound=$false; Lat=$null; Long=$null; Alt=$null [PSCustomObject]$fileInfo | SELECT Url, Modified, FileSize, InfoFound, Lat, Long, Alt | Export-Csv -Path $outputCsvPath -Append -Force -NoTypeInformation $totalCount++ $startRow += $pageSize You might want to tailor the search query to operate on a different set. If you provide the switch -promptForCreds when you run the script, you will be prompted for credentials. This is helpful when the account you're running PowerShell under is not the one that has best access to the content.

Posted on:
Categories: SharePoint
Description: Usually, new children of pinned terms show up in their pinned instances. Under some circumstances, however, they don't.
​If you're relying on the pinning of terms into other term sets you should know that it doesn't always work as expected. The idea with pinning is that you maintain the term's children in one term set but surface it and its children in a read-only fashion in other term sets. It's an elegant way to present multiple arrangements of the same terms whilst maintaining single identity.Usually it works When a new term is created beneath the source term, it is immediately propagated to all pinned instances as expected.Sometimes it doesn't workWhen an existing term is moved from another termset to beneath the source term the propagation fails to happen. You may think all is well when you look at the "master" instance, but check the pinned instances and you'll find the new term does not appear there. ​Initial State​After Move of Pluto​​ Both SharePoint 2013 on-premise and Office 365 are equally afflicted. The only way to deal with this state seems to be to delete all the pinned instances and re-pin them. We've logged this with Microsoft and will update this post if we hear about plans for a fix.