Author Archives: Tori Pazda

Keep Your Clay Soft

I was driving to the office recently thinking about some challenges we face at work (and in life in general) around adaptability, experience, and wisdom in our employment.  I was trying to visualize my theory and this block of clay popped in my head.  You and your experiences in life are a block of impressionable clay.  I will try to keep this work and business-focused, but the concepts apply across the board.

When you first start working your clay is essentially the same as everyone else, a smooth-edged block.  It is soft and malleable, but has basically the same square shape as anyone else.  Your experience level is zero along with everyone else starting a job for the first time. 

In your first job, everything makes an impression in your clay.  Each person has a different level of “softness”, people learn at different rates and in different ways.  Generally speaking, everything is new and sinks into your clay quickly.  Fast forward 6 months or a year, and imagine someone has pressed a coffee mug halfway into the clay.  This impression is what you’ve learned at your first job.  These are standard activities like getting up in the morning, getting to work on time, figuring out how to attend meetings, keep notes, use Word, Excel, Outlook, etc.  It’s a standard impression that most people learn and your clays is soft enough to allow this to “sink in” relatively quickly.  It’s new and you’re eager.

As you move through your career to different jobs, projects, and people, they all have the effect of making different shaped impressions into your clay.  As the impressions go deeper and wider you are learning more and gaining knowledge and hopefully wisdom.  However, for most people, there comes a point where the clay begins to dry and harden, and each new impression takes longer due to the vastness of your current shape and the dryness of the clay.  This can be subtle and difficult to detect, but generally speaking it happens to all of us, albeit at different rates.

As time goes by the clay continues to dry, and then even small impressions become more difficult.  Our vast experiences tell us and sometimes trick us into thinking we know how to do things because we have done it that way successfully for years.  Now picture that same coffee mug with one small stick coming out the side and you try to put that into your clay.  It’s hard and the mug won’t go down into the clay at all, even though there’s a lot of room in there (wisdom and capabilities).  That one small stick can cause the whole mug to sit on top of the clay. 

That mug is your job.  That stick is something new or different that you need to use to get your job done.  You don’t even see it or realize it, but because you are pushing back on adapting to changes in your environment, you are putting your whole value proposition at risk within your organization.  These can be very small and based on preconceived methods from previous experiences.  New software your company wants to adopt, going mobile for phones, methods of managing your business, meeting styles, etc..  All these things CHANGE over time, especially within technology-focused organizations.  It is inevitable.  Do not bee seen as “stuck in your ways” or difficult to deal with because you can’t keep up with change.

If you find yourself resisting change, you must ask yourself the following question:  Is this my experience and wisdom telling to me to challenge these changes with legitimate risks and issues, or is my clay too hard to accept trying a new method, device, or tool?  I’ve heard people make the standard excuse “You know, old dog, new tricks”.  This comes from the people who won’t adapt, excusing their own behavior.  That’s an old saying that’s been around a long time for a good reason.  Resist the urge to fall into the trap, it absolutely will hold you back.  It causes friction with people that need you to be with them on their journey through changes.

Keep yourself fresh, relevant, open-minded and ensure that your value is that your experience can be brought to your job to create better systems and decision-making.  Avoid letting those same experiences prevent you from hearing and embracing new methods.  Adults can learn to program a VCR.  You don’t need to stop learning.  Keep your clay soft.

-Ryan

SharePoint CSOM Scripting in PowerShell

I was recently faced with a migration issue that left the documents in a document library mapped improperly to a lookup field in a SharePoint list.

The problem?

The migration tool did not preserve the original document ID’s when it migrated them to a new document library.  Since the migration tool had no easy way to preserve the ID’s, I was left with the task of remapping the ID’s and fixing the lookup values post-migration.

I had my migration completely scripted with PowerShell and wanted to use PowerShell for the remapping as well.

I needed a way to access internal servers easily and wasn’t too concerned about performance – it’s a one-time script.  Enter CSOM.  I decided to write two PowerShell scripts – one that mapped the original ID of the item in the list with the document name, and one that read the list of documents, finds the new document ID of the document and associates it with the lookup column.

This works because the Migration tool is able to maintain list item id’s, i.e. source list item ID 10 will still be item ID 10 in the destination list – it just can’t do it for document libraries!

Let’s walk through creating the first script, “MapItemIdToDocumentTitle.ps1”

Step 1: Add command line parameters to the script

Fortunately, PowerShell makes this so easy:

param (

  [string]$url = “https://sourcesiteurl”,

  [string]$listName = “Source List Name”,

  [string]$associatedListName = “Associated Document Library Name”,

  [string]$associatedDocsFieldName = “Associated_x0020_Docs”,

  [string]$outfile = “out.csv”

)

 Just make sure these are the first lines in your PowerShell script.

 Step 2: Add the CSOM references to your script

 # the path here may need to change if you used e.g. C:\Lib..

Add-Type -Path “c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll”

Add-Type -Path “c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll”

# note that you might need some other references (depending on what your script does) for example:

Add-Type -Path “c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll”

Step 3: Create the client context and load the web

 # connect/authenticate to SharePoint Online and get ClientContext object..

$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)

 if (!$clientContext.ServerObjectIsNull.Value)

{

    Write-Host “Connected to SharePoint site: ‘$Url'” -ForegroundColor Green

}

$rootweb = $clientContext.Web

$childWebs = $rootweb.Webs

$clientContext.Load($rootweb)

$clientContext.Load($childWebs)

$clientContext.ExecuteQuery()

Note: Nothing is actually executed on the server until the “ExecuteQuery” method is called.  This is the key to working with the CSOM – do stuff locally, then execute on the server.  You will see this pattern throughout the code.

Step 4: Process the web (create the CSV file)

processWeb($clientContext.Web)

Where processWeb is the method that does all of the work:

 function processWeb($web)

{

Grab the lists – remember, nothing happens on the server until ExecuteQuery is called:

    $lists = $web.Lists

    $clientContext.Load($web)

    $clientContext.Load($lists)

    $clientContext.ExecuteQuery()

In order to output CSV easily, all output is stored in an array

    Write-Host “Processing web: ” $web.Title

    $output = @()

Get all items from the source list (note: this works because the source list has less than 10k items).  Again, notice the ExecuteQuery line – data is not retrieved from the server until this line executes.

    $theList = $lists.GetByTitle($listName)

    $docList = $lists.GetByTitle($associatedListName)

    $query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(9999)

    $items = $theList.GetItems($query)

    $clientContext.Load($items)

    $clientContext.ExecuteQuery()

Now we just loop through each item finding items that have associated docs. I needed to go back to the server to load the actual document item and then again to get the actual file (so I could grab the file name).

    foreach($item in $items)

    {

        $associatedDocs = $item[$associatedDocsFieldName]

        if ($associatedDocs)

        {

            foreach($associatedDoc in $associatedDocs)

            {

                # get the actual file name from the associated list

                $docItem = $docList.GetItemById($associatedDoc.LookupId)

                $clientContext.Load($docItem)

                $clientContext.ExecuteQuery()

                $docFile = $docItem.file

                $clientContext.Load($docFile)

                $clientContext.ExecuteQuery()

                $docName = $docFile.Name

Writing to CSV is picky!

You can output as many columns as you want, just use the “add-member” call with the NoteProperty membertype and name it appropriately.  Append each row to the output.

                $row = new-object PSObject

                $row | add-member -membertype NoteProperty -name “ID” -value $item.ID

                $row | add-member -membertype NoteProperty -name “FileID” -value $associatedDoc.LookupId

                $row | add-member -membertype NoteProperty -name “FileName” -value $docName

                $output += $row

            }

        }

    }

Once we’ve completed the process, simply use the “export-csv” call and PowerShell does all the magic of writing the header and comma separated values.  It’s really that easy!

    $output | export-csv -NoTypeInformation -Path $outfile

    Write-Host “Output saved to $outfile”

}

That’s it.

The second script I wrote is very similar, but reads the CSV file as input and remaps the documents.  While writing these scripts, simply refer to MSDN for the CSOM reference: https://msdn.microsoft.com/en-us/library/office/dn268594.aspx

Hopefully, this post will help you get started with your CSOM PowerShell scripting.  I love using PowerShell for this type of stuff – it’s super easy to write, easy to run and all it requires is a text editor.


 

A Word about SharePoint Governance

SharePoint is an incredibly powerful business tool that can be leveraged to improve collaboration and operational efficiency across your organization. With proper planning, it can be transformational for your business.

As a SharePoint Architect & Consultant, I’ve seen and remediated many failed SharePoint initiatives in the last decade.   I’ve met a lot of people who “hate SharePoint” and have had to turn those folks around and convert them into believers.   I’ve seen what SharePoint can do with proper planning, and I’m a huge believer in the platform.

More often than not, when SharePoint “fails”, it’s due to lack of planning and understanding of your business requirements. When you build a house, you understand the basic requirements of the house before you start building. During the design process, before a single piece of timber is purchased, you identify every room that will be in the house and the requirements of each of those rooms. You know there will be cooking in the kitchen, sleeping in the bedroom, you know where there should be outlets and wall switches and doors where people can pass between rooms. You know what will be stored in each room and what you need for closet space.   You organize your floor plan in such a way that you will know where to look for things, based on what they are and their usage.

Creating a successful SharePoint portal is similar to building a house. Understanding the requirements of the portal, how they are componentized into separate “rooms” or sub-sites; what the necessary applications are in each of those sub-sites (stove, refrigerator, outlets); what types of things will be stored, how much storage you need (contact information, pictures, files, videos), and the level of security called for.

This is what we call your “Information Architecture” and it is the blueprint for your SharePoint portal. It is also an important piece of your SharePoint Governance Plan.

If you’ve been part of SharePoint conversations, you have heard the mystical term “SharePoint Governance”.   There is a lot of confusion on what a SharePoint Governance Plan is and why it is important. More, there is a lack of understanding that a proper Governance Plan is the key to a successful adoption.

In this four part series, I will debunk the mystery of the SharePoint Governance Plan. I will break down what it should include and how it can be combined with training for your users in such a way that guarantees your SharePoint portal will be successfully adopted across your organization.   Let’s get started!

Part 1 of the Governance Series Link

HubSpot Call-to-Action Code end HubSpot Call-to-Action Code

Part 1: What the heck is a “SharePoint Governance Plan”?

This is Part 1 in a multi-part series on governance.  See the first post “A Word on SharePoint Governance“.

Microsoft provides a sample governance plan and overview on their website, and in this sample plan, they indicate:

Governance is the set of policies, roles, responsibilities, and processes that control how an organization’s business divisions and IT teams work together to achieve its goals. Every organization has unique needs and goals that influence its approach to governance. Larger organizations will probably require more, and more detailed governance than smaller organizations.

Clear as mud, right? Let’s break it down. In less general terms, there are 3 basic pillars of governance in a SharePoint governance plan.

1. IT Governance

IT governance is the set of policies that allow for support and management of the basic infrastructure and planning, as well as supporting predicted growth of your environment. What does that mean? This section of the plan will address your security, infrastructure and web application policies around things like quotas, permissions, site ownership and backup and recovery.

In an on-premises installation, you will also establish governance around SharePoint installations in your environment.  Is your IT governance centralized with your IT department, or do you allow a more decentralized approach that lets others install SharePoint, create web applications or site collections, and grant permissions? You will include details of how you will track installations of SharePoint 2013 in your environment; block installations if your governance plan does not allow for them, keep servers current with software updates, and manage site collection upgrades.

Office 365 and the ability to host your SharePoint infrastructure with other cloud providers like Rackspace call for different details in this section of the plan. For example, the management of your servers, backup and recovery, and SharePoint installations and patches or updates are handled by your hosting provider based upon the service level agreement (SLA) you have established with them.

2. Information Management

Information management is achieved through a well thought out and planned information architecture that specifies how business content in SharePoint is organized, presented, secured, managed and the content owners who are responsible for it.

In simpler terms, this means – understand your business collateral, who uses it, how it can be classified and who owns it.   You don’t need to boil the ocean here, and your information architecture will evolve over time, but a basic understanding of how the users in your organization collaborate around content and work together is the key to identifying the organization, tagging and ownership of that content in your SharePoint portal in such a way that it can be properly secured and easily found.

Companies that have content that is regulated by compliance will have those details in this section of the plan.  Information rights management decisions will be made including plans for content expiration and retention.

3. Application Management

Application management governance defines the corporate policies for customization, life cycle management and branding.  SharePoint is a deep and wide technology that allows for unlimited customization, whether that’s in look and feel (branding) or additional applications that can be custom built by your team, or downloaded from the App Store; things like news sliders, accordion controls, and custom workflows.

Depending on the level of customization your organization will allow, processes must be put into place that establish:

  • Change Management Policies: The types of changes that are supported, who is authorized to make these changes, and how they are rolled out.
  • Life Cycle Planning: Versioning, updates, aging of older code, and rollback strategies; what to do when things go wrong.
  • Production update schedule and sign off committee, code reviews, maintenance windows and such.

In summary, a successful governance plan is one that allows the platform to be leveraged in an organized and thoughtful way, based on an understanding of the business information and requirements, environments and processes that work best with the team members in your organization.

Next, we will walk through the steps of creating a SharePoint governance plan tailored to your organization, in Part 2 : One size does not fit all – Building a Governance Plan that works for YOU.

Need help with your governance plan? 

HubSpot Call-to-Action Code end HubSpot Call-to-Action Code

 

SharePoint 2010 Mainstream Support Ending

SharePoint 2010 Maintstream support ends on 10/13/2015.

Click Here to Contact Us For a Free Consultantation and options for your organization

Here’s what you will lose:

  • Hotfixes that are not specific to security issues
  • No Charge / Complimentarty Incident Support
  • Requests for product features
  • Warranty Claims

Meaning

Microsoft is ending its tier one support for this platform as it moves closer to launching SharePoint 2016 and continued efforts within Office 365 and SharePoint Online.  This date represents your first major warning flag to start planning your technology refresh.  

If SharePoint is a first class service offering in your organization, you should start considering your strategy for next steps on the platform.

Options

You can do nothing and continue to use SharePoint 2010 with the limitations above until there is no more support at all in 2020.  I would evaluate the limitations of extended support to ensure that will work for your organization before choosing this option.  It’s always better to have a plan and think ahead instead of being forced to react if a bug or incident occurs that will not supported and fixed.  

SharePoint 2013

SharePoint 2013 is mature at this point and has SP1 in production.  There is solid experience and knowledge with this platform in the marketplace to reduce risk in a migration or upgrade. 

SharePoint 2106

You can hold off upgrading to SharePoint 2013 and go right to SharePoint 2016 via a migration.  If you start the planning now you will be ready when 2016 rolls off the assembly line.  See our blog post on what’s new in SharePoint 2016 for more details.

SharePoint Online / Office 365

You could migrate away from on-premises installations altogether via a cloud migration or hybrid cloud scenario.  This requires a discussion about configuration, authentication, security / compliance, and need/desire for cloud.  There a benefits and costs to cloud or hybrid cloud scenarios that must be understood before moving forward.

Conclusion

The main concept is that you have options.  The product is not withering away, in fact the investment in both on-premise and cloud versions continues to increase.  If you need some help determining a strategy and roadmap for your upgrade please reach out to us with any questions or to set up a meeting.

-Ryan

Click Here to Contact Us For a Free Consultantation and options for your organization

SharePoint 2016: New Features and Thoughts


 

 

Editorial

With the embracing cloud market, just about anything as a service is a hot commodity these days, and for good reason.  Our clients and our own organization face the challenges of trying to understand which applications to manage internally versus those that benefit from the pay as you go model.  We also worry about choosing the right solution to invest in, the control of the solution, access to our data, and the uncertainty about the features, support, and alignment with our organization 3-5 years down the road.  We also need to understand a potential remediation plan for solutions where we lack control.  One way to achieve some stability and management is with hybrid cloud solutions.  Maintaining one foot inside and one foot outside solves many of the problems of either 100% on or off premises.  That is clearly the focus of SharePoint in its latest release.

SharePoint Messaging from Microsoft & my Interpretation

Microsoft has made it clear it is still committed to on premises SharePoint for as long as the market demands it.  The on premises installations have continued to increase in volume globally.  Microsoft has changed the marketing around SharePoint to make it clear that Office 365 is not a replacement for an on-premises version.  The features will diverge slightly, overlap and provide improved and connected functionality via Cloud Accelerators where a hybrid implementation really shines.  The hybrid connection to the cloud will be required to take advantage of many new features being introduced.  This represents a reasonable evolution of the capabilities and accessibility of the platform.  More details on the specific features are listed below.

With Microsoft making it known that Windows 10 will be the last release of Windows, it is possible that SharePoint follows the same paradigm.  I would not be surprised if future versions of SharePoint become functional service packs, add-ons, or patch releases.  It makes sense considering the alignment with Office 365 and the difficulties in redesigning the architecture with massive cloud adoption. 

On a final note, I would like to see Microsoft get the licensing aligned and straightened out to make hybrid adoption easier to.  My preference would be to see licensing (CALs) be valid across all iterations of the platform.  You buy/own SharePoint in any flavor you wish to implement it.

HubSpot Call-to-Action Code end HubSpot Call-to-Action Code

The New Stuff

My apologies for not diving into details, the goal is to give a high-level overview of most of the new features that have been discussed with SharePoint 2016.

Hybrid Integration Gets Better

  • Easier to push OneDrive / MySites to the cloud from your on premise installation
  • Sites you are following all in one place across on premise and cloud
  • Hybrid setup assistant
  • Hybrid Unified Search experience surfaced in the cloud by pushing the on premise index up to Office 365
  • User Experience alignment between cloud and on premise via navigation bar
  • Office Graph / Delve functionality to work with on premise data due to the integration of hybrid search functionality 

    Functionality / Features

  • Durable Links: Resource-based URLs now retain links when documents are renamed or moved in SharePoint
  • OneDrive Site Folders give you links and access to more pinned content right from OneDrive
  • New Access Services:  Greater Office Apps support, download access tables to Excel, a new Cascading Combo Box, and additional Related Item Control features.
  • Document Library Accessibilities:   Keyboard shortcuts, Page Landmarks, Focus Trapping, Upload Progress indicators, and more.
  • Image and Video Previews via mouse hover within a document library
  • Open Document Format (ODF) support in Document Libraries
  • Improved Sharing Interface
  • Site Pinning on the Sites page for better user management of content

    Document Deletion Policies

  • Allow site owners to choose from policies that you centrally create and manage. You can also allow site owners to opt out altogether if they decide a policy does not apply to their content
  • Enforce a single mandatory policy on all sites in a site collection, such as all OneDrive for Business sites, or even enforce a policy on all site collections created from a specific site collection template, such as the Team Site template
  • Provide a default policy with a default rule that will be automatically applied without any action required by site owners
  • Create a policy that includes several deletion rules that a site owner can choose from


    Sensitive Content Search

  • Search for sensitive content across SharePoint Server 2016 IT Preview, SharePoint Online, and OneDrive for Business
  • Leverage 51 built-in sensitive information types (credit cards, passport numbers, Social Security numbers, and more)
  • Identify offending documents, export a report, and adjust accordingly
     

    Information Rights Management

    Although not specifically released for SharePoint 2016, it’s worth mentioning that IRM has been introduced into Office 365.  It relies on Microsoft Azure Active Directory Rights Management and can be enabled at the list and library level.  It has some pretty interesting features, the following is a snippet taken from Microsoft regarding the functionality:  “When people download files in an IRM-enabled list or library, the files are encrypted so that only authorized people can view them. Each rights-managed file also contains an issuance license that imposes restrictions on the people who view the file. Typical restrictions include making a file read-only, disabling the copying of text, preventing people from saving a local copy, and preventing people from printing the file.”

     
    Infrastructure

  • System Requirements seem mostly unchanged, but I did not complete a full comparison
  • Installations allow for role-based configurations: (WFE, App, Search, etc.)
  • Compliance checker to ensure the services running match the intended role
  • Zero downtime during patching
  • Automatic list column indexes to work around the 5000 item view threshold (good for Office 365)
  • 10GB file upload limits now supported (up from 2GB)
  • One Second Site Collection creation time
  • Improved compile time for customized XSLT files used for Content Query, Summary Links, and Table of Contents Web Parts
  • Encrypted Connections
  • Expanded support for special characters in file names
  • 500 Million items per Search Service Application

All in all it’s another mid-range move in the direction of a hybrid and integrated experience for collaboration.

HubSpot Call-to-Action Code end HubSpot Call-to-Action Code