Growth Hacking with Internet based Channels

I compiled this information long time ago for a friend. I found it in one of the folder eating dust. So here you go, hope it helps someone somewhere. You will find lot more information about recent advancements in this field but this could be a good start to understand Growth Hacking.


Growth Hacking is a marketing technique which aims to attract users at a relatively low cost and primarily by means of technological integration.

Objectives of Growth Hacking:

  1. Increase traffic to website
  2. To increase awareness about the Brand and their products
  3. Generate revenue through online sales.
  4. Build and Manage Online Reputation of the brand

 Phased Approach:

Assumption: SEO is in place for the website. If not execute SEO project of all your marketing assets.

Phase 1: Infrastructure Development (5-10 days) Objectives:

  • Get ready to roll.


  • Social Media Accounts Setup, Design and Optimization
  • Advertising Accounts Creation and Setup
  • Content Strategy Planning

Phase 2: Brand Communication and Awareness (3-4 Months) Objectives

  • Communicating the brand – content strategy
  • Reaching out to masses – advertising
  • Generating Email Database – contests
  • Reviews by Bloggers/News/Third Party Content creators- Outreach


  • Social Media Buzz: A launch campaign
  • Promotions by – Facebook Ads
  • Organic Efforts – Twitter outreach
  • Newsletter Campaigns: Once a week All subscribers who have subscribed/using the app. To ensure that they use the app on regular note.
  • Email BroadCasts via Affiliates: Based on target geography, mass mailers can be planned.
  • Advertising for app promotions
    • YouTube ads
    • Adwords for Apps promotions
    • iAds
    • Other mobile ads via portals like InMobi, StartApp etc.

Phase 3: Roadmap for Remaining 6-8 Months

A detailed analysis of Phase 2 to understand the response rates from various channels. The successful and not-so-successful campaigns will be evaluated. The budgets and roadmap will then be planned for remaining months.

Budget : Estimate budget per phase depending upon response to previous phase.

Channels for outreach

Social Media Channels:

  • Facebook
  • Twitter
  • LinkedIn
  • Youtube
  • Quora
  • Reddit
  • Or any industry specific community/Search Engines

Other Channels

  • Newsletters
  • Bloggers Outreach

Advertisement Channel

  • Facebook Ads
  • Twitter Promoted Tweets

Infrastructure Setup:

  1. Accounts Creation: We set-up client accounts, select the best available Vanity urls.
  2. Design: We do the complete Social Media branding by designing the Facebook Time Line Cover Image, Facebook Profiles, Twitter background, Twitter Cover Image, LinkedIn Cover Image and banners. All designs remain in line with current branding of clients.
  3. Optimization: Optimize the profiles with keywords and meta-description

Daily Activities as part of Growth Hacking Project:

  • Promotional posts about the new products or solutions on Facebook, Twitter.
  • How TO’ photo posts to make Fans understand the amazing products.
  • Humor and Comics
  • Infographics
  • News and Updates in the App development
  • Stories about solutions built using Electrohms products. This should go to the blog as well.
  • Discounts and offers and benefits of using your services etc will be posted.
  • Answering Queries: Projection of the brand as the expert in this field. All the online queries of fans/followers or potential customers will be answered via same social media platform. Even questions are not related to the products, providing answer and linking it back to Electrohms website will help create outlinks for site, reputation and projection as solution provider.
  • Start various open ended discussions. Discussions on different social media  platforms will be initiated to engage users, make them participate, and provide useful solutions to other fellow users.
  • Campaigns: We will run various campaigns. E.g. Solve the challenge where solutions will require to use Client’s products and submit entries online. These can just be the brain teasers for the current/potential customers to engage with the brand.
  • Paid Promotions Management: Profiling and behavior of customers online will help yield more results out of paid online promotions. Facebook Ads are essential for buzz creation and lead generation. A well-targeted Ad to ‘Zebra’ customers can definitely yield the desired result. We will create, manage and optimize your Facebook adverts to increase your reach. Content and the nature of the ads will be focused to yield maximum ROI. Similarly Forums asking questions about buying suitable products of type produced by client will help get more leads. Creating the online community around client’s products through proactively helping potential customers make decisions or solve their problems will be a huge return from this activity.
  • Tracking Leads: We will create database of all leads, potential customers and track the keywords related to Client & their products by using social media tools like Raven Tool and HootSuite. The potential users will be redirected to your website, Facebook and twitter page
  • Twitter:
    • Answering Users: Followers will appreciate your services, seek help etc. Answer to retweets, @mention, messages and replies on twitter to build a personal connect and provide solutions to the users.
    • Trends mapping: Based on your industry, we will map the trends on twitter, to keep your followers updated regarding the services and help you provide. This can be done by searching with the help of keywords related to the subject.
    • User redirect to your site: Closely monitor the users online who are in search of similar App services. They will be answered or re-directed to your website/facebook page. This can be done using HootSuite, Raven tools.
  • Best Timings: On the basis of opening rates, we will choose the best time to schedule tweets. We use to check the best timings depending upon the target demographic segment.
  • Bloggers Outreach: Tech Bloggers, Innovation and Creativity bloggers and other popular bloggers will be contacted to write reviews and spread the word. By providing them a trial version of the app for one month, we can ask them to write reviews about it.
  • SEO We will have to do Search Engine Optimization for the website. SEO helps in improving the visibility of a website on search engines. It includes process of highly ranking a website in search results which will drive more traffic, leads and purchases. It includes the following steps – · Finding the right keywords · Ranking highly for those keywords · Converting visitors into buyers
  • Email Marketing: The database created from various technics explained above will be used for Email Marketing. Email Marketing helps in lead nurturing. We can send bi-monthly newsletter informing them about the products, applications of products, any case studies, offers etc.

Design VM deployments by leveraging availability sets, fault domains, and update domains in Azure

Termininologies to know

  • Availability Set
  • Fault Domains
  • Update Domains
  • Availability Zones
  • Scale Sets

Things to read about

  • defaults and limits for FD & UD
  • How to create global highly available application?
  • How to create application which will not be impacted by Azure induced  unplanned/planned downtimes?

Relevant Blogs:



Creating Sharepoint 2013/2016 Farm infrastructure in Azure from scratch using mix of Manual and Infrastructure-as-Code approach

I wanted to very briefly list down the steps to create the SP farm from scratch (without using existing ARM template for farm from GitHub) which will include manual steps using portal and also ARM template built during the process.

Following Diagram helps visualize HA SP farm. But one that I have created is just a subset of this for the purposes of developement farm. You can follow HA SP farm topology for production farm.


I have kept it crisp assuming you are aware about the Azure and Sharepoint concepts:

  1. Login to Azure portal
  2. Go to Resources, search for virtual network
  3. Create New Virtual network
  4. Create Three Subnets
    1. BackendSubnet
    2. AppSubnet
    3. FrontEndSubnet
  5. Create Three NSG
    1. BackendNSG
    2. AppNSG
    3. FrontEndNSG
  6. Create 1 SQL server Virtual machine and add to BackendSubnet & apply BackendNSG to it
    1. Use SQL server image for this
  7. Generate ARM template from above virtual machine
  8. Create one more DB server using ARM template generated above. Should be added to same subnet.
  9. Create a Virtual Load Balancer and add above created DB servers to the LB.
  10. Create a DB cluster of above two DB servers by configuring SQL servers on each server. Remember the name given to cluster.
  11. Create 1 App server Virtual machine and add to AppSubnet & apply AppNSG to it
    1. Use Windows server 2016 data center image
  12. Generate ARM template from above app server virtual machine
  13. Create One more VM using same template as app server and add it to AppSubnet and apply AppNSG
  14. Create two more VM using same template as app server and add it to FrontEndSubnet and apply FrontEndNSG
  15. Create Load Balancer in AppSubnet and configure both app servers as resource pool
  16. Create PIP in FrontEndSubnet
  17. Create NIC in FrontEndSubnet
  18. Apply PIP to NIC in FrontEndSubnet
  19. Create LoadBalancer in FrontEndSubnet
  20. Apply NIC to Loadbalancer in FrontEndSubnet
  21. Not install SP in One of the VM in FrontEndSubnet and create a farm “mgd-sp2016”. Use DB cluster name as Database for SP Farm.
  22. Keep installing SP in each remaining VM except DB VMs and add them to the farm “mgd-sp2016” farm created in previous step. Configure WFE and App servers with respective roles
  23. Review and Verify SP farm by creating web applications, site collections, user access, service applications hosted in SP app servers.
  24. Create Availability sets for VMs in each subnet.
  25. Refactor NSG rules, monitoring settings, access settings etc. in SP farm.
  26. Setup dashboard for infrastructure monitoring for the farm resources for availability, health, billing, performance etc.

Comparison of Serverless Capabilities of Azure, AWS and Google Cloud

Serverless architecture is catching up. All three Azure, AWS and Google Cloud provide serverless offerings. Since each of these Companies keep changing these Offerings, I will try to keep up. But as of 8/21/2018, following are the offerings.
azure AWS GC
Sr.No. Service Azure AWS Google Cloud
1 Database CosmosDB Amazon Simple Storage Services Cloud Storage
Cloud Firestore
2 Execution Functions AWS Lambda Cloud functions
Azure Container Instances App Engine
Virtual Kubelets
App Service
Azure Service Fabric Mesh
3 Messaging Event Grid Amazon SNS Cloud Pub/Sub
Service Bus Amazon SQS
4 Workflow Orchestration Logic Apps AWS State Functions
5 Analytics Stream Analytics Amazon Kinesis Cloud Dataflow
6 Intelligence BotService Cloud ML Engine
Cognitive Services
7 Development Visual Studio
Visual Code
8 DevOps VSTS AWS Code Pipeline
AWS Code Build

Azure Architect Certification (70-735) – Preparation Series

Here is official link for latest information on this exam.

Following is my take on this exam.

Which skills are evaluated:

“It takes considerable knowledge just to realize the extent of your own ignorance.”

Simply put, this certification will evaluate your knowledge about in-depth understanding of all Azure features and capability to analyze, decide and prove the choices you will have to make while implementing infrastructure and applications in cloud.

Do not worry about development aspect of applications.

Opinions about passing rate:

According to one of the MVP who spoke at SPSNYC2018, passing rate is around 50% so be prepared to work hard.

How this Certification Helps:

Once you study all the syllabus, you should be able to make architectural decisions about accurate selection of cloud service or configurations for any type of application. Basically, you will be calling shots about which Azure feature to use and how to use it, to meet your requirements.

Plus, possibly improved paycheck.

What is this series about?

I am studying for Azure Architect certification myself. So, everything I am studying I am documenting it in this blog series.

So, Let’s Start:

As of 7/31/2018, following is the approved syllabus for the exam. Each link will take you to the specific blog on that topic.

It is very important to understand the composition of this syllabus for effective preparation. So spend some time just understanding the syllabus.


Design Compute Infrastructure (20-25%)

Design solutions using virtual machines (VMs)

  • Design VM deployments by leveraging availability sets, fault domains, and update domains in Azure;
  • use web app for containers;
  • design VM Scale Sets;
  • design for compute-intensive tasks using Azure Batch and Azure Batch AI;
  • define a migration strategy from cloud services;
  • determine when to use reserved instances;
  • design for VMs in a DevTest Lab environment (including formulas, images, artifacts, claiming and un-claiming VMs);
  • determine when to use Accelerated Networking;
  • recommend use of Azure Backup and Azure Site Recovery including support for Linux in Azure Backup and integrating Azure Backup in the VM creation process;
  • recommend when to use availability zones

Design solutions for serverless computing

  • Use Azure Functions to implement event-driven actions;
  • design data storage solutions for serverless computing;
  • design for serverless computing using Azure Container Instances;
  • design application solutions by using Azure Logic Apps, Azure Functions, or both;
  • determine when to use API management service;
  • design event routing solutions using Azure Event Grid;
  • design solutions that integrate stream processing and bot messaging

Design microservices-based solutions

  • Determine when a container-based solution is appropriate;
  • determine when container-orchestration is appropriate;
  • determine when Azure Service Fabric (ASF) is appropriate;
  • determine when Azure Functions is appropriate;
  • determine when to use API management service;
  • determine when Web API is appropriate;
  • determine which platform is appropriate for container orchestration;
  • consider migrating existing assets versus cloud native deployment;
  • design lifecycle management strategies

Design web applications

  • Design Azure App Service Web Apps;
  • design custom web API;
  • secure Web API;
  • design Web Apps for scalability and performance;
  • design for high availability using Azure Web Apps in multiple regions;
  • determine which App service plan to use;
  • design Web Apps for business continuity;
  • determine when to use Azure App Service Isolated;
  • design for API apps;
  • determine when to use API management service;
  • determine when to use Web Apps on Linux;
  • determine when to use a CDN;
  • determine when to use a cache, including Azure Redis cache

Create compute-intensive applications

  • Design high-performance computing (HPC) and other compute-intensive applications using Azure Services;
  • determine when to use Azure Batch;
  • design stateless components to accommodate scale;
  • design lifecycle strategy for Azure Batch;
  • design solution that implement low priority batching and job task counting

Design Data Implementation (15-20%)

Design for Azure Storage solutions

  • Determine when to use Azure Blob Storage, blob tiers (hot, cool, archive), Azure Files, disks, Azure Data Box, Azure Storage Service Encryption, and Azure StorSimple

Design for Azure Data Services

  • Determine when to use Azure Data Catalog, Azure Data Factory, Azure SQL Data Warehouse, Azure Data Lake Analytics, Azure Analysis Services, and Azure HDInsight

Design for relational database storage

  • Determine when to use Azure SQL Database and SQL Server Stretch Database;
  • design for scalability and features;
  • determine when to use Azure Database for MySQL and Azure Database for PostgreSQL;
  • design for HA/DR, geo-replication;
  • design a backup and recovery strategy;
  • design optimization strategies for Azure SQL Data Warehouse columnar storage

Design for NoSQL storage

  • Determine when to use Azure Redis Cache, Azure Table Storage, Azure Data Lake, Azure Search, Time Series Insights;
  • design pipelines for managing recurring jobs

Design for CosmosDB storage

  • Determine when to use MongoDB API, Azure Cosmos DB SQL API, Graph API, Azure Tables API;
  • design for cost, performance, data consistency, availability, and business continuity

Design Networking Implementation (15-20%)

Design Azure virtual networks

  • Design solutions that use Azure networking services: design for load balancing using Azure Load Balancer and Azure Traffic Manager;
  • define DNS, DHCP, and IP strategies;
  • determine when to use Azure Application Gateway;
  • determine when to use virtual network (VNet) service endpoints;
  • determine when to use multi-node application gateways, Traffic Manager and load balancers

Design external connectivity for Azure Virtual Networks

  • Determine when to use Azure VPN, Azure ExpressRoute and Virtual Network Peering architecture and design;
  • determine when to use User Defined Routes (UDRs);
  • determine when to use VPN gateway site-to-site failover for ExpressRoute;
  • determine when to use the Container Networking Interface (CNI) plugin;
  • design solutions that use Global VNet Peering

Design security strategies

  • Determine when to use network virtual appliances;
  • design a perimeter network (DMZ);
  • determine when to use a Web Application Firewall (WAF), Network Security Group (NSG), and virtual network service tunneling;
  • organize resources by designing solutions that use service tags

Design connectivity for hybrid applications

  • Design connectivity to on-premises data from Azure applications using Azure Relay Service, Azure Data Management Gateway for Data Factory, Azure On-Premises Data Gateway, Hybrid Connections, or Azure Web App’s virtual private network (VPN) capability;
  • identify constraints for connectivity with VPN;
  • identify options for joining VMs to domains

Design Security and Identity Solutions (20-25%)

Design an identity solution

  • Design AD Connect synchronization;
  • design federated identities using Active Directory Federation Services (AD FS);
  • design solutions for Multi-Factor Authentication (MFA);
  • design an architecture using Active Directory on-premises and Azure Active Directory (AAD);
  • determine when to use Azure AD Domain Services; design security for Mobile Apps using AAD

Secure resources by using identity providers

  • Design solutions that use external or consumer identity providers such as Microsoft account, Facebook, Google, and Yahoo;
  • determine when to use Azure AD B2C and Azure AD B2B;
  • design mobile apps using AAD B2C or AAD B2B

Design a data security solution

  • Design data security solutions for Azure services;
  • determine when to use Azure Storage encryption, Azure Disk Encryption, Azure SQL Database security capabilities, and Azure Key Vault;
  • design for protecting secrets in ARM templates using Azure Key Vault;
  • design for protecting application secrets using Azure Key Vault;
  • design a solution for managing certificates using Azure Key Vault;
  • design solutions that use Azure AD Managed Service Identity

Design a mechanism of governance and policies for administering Azure resources

  • Determine when to use Azure RBAC standard roles and custom roles;
  • define an Azure RBAC strategy;
  • determine when to use Azure resource policies;
  • determine when to use Azure AD Privileged Identity Management;
  • design solutions that use Azure AD Managed Service Identity;
  • determine when to use HSM-backed keys

Manage security risks by using an appropriate security solution

  • Identify, assess, and mitigate security risks by using Azure Security Center, Operations Management Suite Security and Audit solutions, and other services;
  • determine when to use Azure AD Identity Protection;
  • determine when to use Advanced Threat Detection;
  • determine an appropriate endpoint protection strategy

Design Solutions by using Platform Services (10-15%)

Design for Artificial Intelligence Services

  • Determine when to use the appropriate Cognitive Services, Azure Bot Service, Azure Machine Learning, and other categories that fall under cognitive AI

Design for IoT

  • Determine when to use Azure Stream Analytics, Azure IoT Hubs, Azure Event Hubs, real-time analytics, Azure Time Series Insights, Azure IoT Edge, Azure Notification Hubs, Event Grid, and other services that fall under IoT

Design messaging solution architectures

  • Design a messaging architecture;
  • determine when to use Azure Storage Queues, Azure Service Bus, Azure Event Hubs, Azure Event Grid, Azure Relay, Azure Functions, and Azure Logic Apps;
  • design a push notification strategy for Mobile Apps;
  • design for performance and scale

Design for media service solutions

  • Define solutions using Azure Media Services, video indexer, video API, computer vision API, preview, and other media related services;
  • design solutions that use file-based encoding or Azure Media Analytics

Design for Operations (10-15%)

Design an application monitoring and alerting strategy

  • Determine the appropriate Microsoft products and services for monitoring applications on Azure;
  • define solutions for analyzing logs and enabling alerts using Azure Log Analytics;
  • define solutions for analyzing performance metrics and enabling alerts using Azure Monitor;
  • define a solution for monitoring applications and enabling alerts using Application Insights

Design a platform monitoring and alerting strategy

  • Determine the appropriate Microsoft products and services for monitoring Azure platform solutions;
  • define a monitoring solution using Azure Health, Azure Advisor, and Activity Log;
  • define a monitoring solution for Azure Networks using Log Analytics and Network Watcher service;
  • monitor security with Azure Security Center;
  • design TCP connections

Design an operations automation strategy

  • Determine when to use Azure Automation, Chef, Puppet, PowerShell, Azure Automation (DSC), Event Grid, and Azure Logic Apps;
  • define a strategy for auto-scaling;
  • define a strategy for enabling periodic processes and tasks;
  • define an update management strategy


SharePoint Online Workflows – Options, Migration and Limitations

Available Workflow Options

  1. Out-of-Box Workflows

SharePoint Online offers number of workflows that are ready for usage. Availability of these workflows will depend on plan.

  • Approval – route documents or items for approval/rejection
  • Three-State Approval – track issues, tasks, or projects through three states/phases
  • Feedback – route a document or item to receive feedback on it
  • Disposition – manage expiration/retention of documents (related to records management)
  1. SharePoint Designer Workflows

SharePoint Designer provides you with a rich feature set that addresses many of the requirement categories listed above. SP Designer Workflows will provide you the basic loop, branching and actions and other lookups and http service call tasks to achieve more complex workflows than Out-of-box workflows. You can migrate (save as template and then upload to SPO solutions) the SPD workflows in SP online.

  1. Flow

Flow is a new workflow app that lets you interact with data within SharePoint and numerous other apps from within the Office 365 apps family and outside. There are plenty of templates available. Also, MS Flow can be extended with custom service endpoints, webhooks/azure functions (i.e. serverless computing services. etc) and queuing systems for more complex logic blocks and data processing which can invoked using connectors/http triggers from flow.

  1. Nintex
  • Nintex workflows are available in SharePoint Online using third party Office 365 app, Nintex. Nintex provides in-browser rich user interface to build and use workflows. It offers intelligent, conditional workflow logic and actions that let you model processes same as real world.

Workflow Migration from SP2010/2013

You can migrate a workflow definition by deploying/developing the workflow to your SharePoint Online site. Individual instances of workflows cannot be migrated, either to the cloud or from one on-premise system to another. However, some third party tools claim to be able to migrate the workflow instances to online (This will be explored in future).

SharePoint On-Premise Workflow Type Can be migrated to/redeveloped into these SPO Workflow Options
Out-of-Box Designer Workflow MS Flow Nintex for Office 365
Out-of-Box As Is Redevelop Redevelop Redevelop
Designer Workflow   As Is Redevelop Redevelop
Nintex     Redevelop* Redevelop (Confirm with Vendor). Some third-party tools (ShareGate) provide capability to migrate Nintex workflows.
Custom Code Workflow     Redevelop* Redevelop*

*Migration is not simple/straightforward due to limitations of SPO/MS Flow/Nintex.


  1. Select Workflow option based on support by each option for scenarios:
 Requirement SharePoint OOTB Workflows SharePoint Designer Microsoft Flow Nintex
Multi-Stage Approvals Yes Yes Yes Yes
CRUD SharePoint Data Yes Yes Yes Yes
CRUD External Data No Yes Yes Yes
Provisioning No Yes Yes Yes
Document Generation No No Yes* Yes
Batch Processing No Yes Yes* Yes
Text Manipulation No Yes Yes Yes

*These need custom Flow components.


Recreate Any SharePoint Search Components in existing topology

In this example, we will be recreating the Query Processing component on search because it had some issues preventing it from starting.
Review following script before proceeding with execution

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
 # Clone the active search topology

$spssa = Get-SPEnterpriseSearchServiceApplication
 $current = Get-SPEnterpriseSearchTopology -SearchApplication $spssa -Active
 $clone = New-SPEnterpriseSearchTopology -SearchApplication $spssa -Clone –SearchTopology $current
 Get-SPEnterpriseSearchComponent -SearchTopology $clone 

Locate the search component QueryProcessingComponent entry and copy the ComponentId:

Remove the component by using the ComponentId above as the -Identity value in the following:

# Remove Orphaned Component
 Remove-SPEnterpriseSearchComponent -Identity 61c1a336-40dd-407f-aa96-fc9909bfd992 -SearchTopology $clone -confirm:$false 

# Add New Search Component
 $server = Get-SPEnterpriseSearchServiceInstance -Identity "server hosting this component"
 New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $server

#Depending on which component is failed you can use appropriate command
#New-SPEnterpriseSearchAdminComponent -SearchTopology $clone -SearchServiceInstance $server
#New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $clone -SearchServiceInstance $server
#New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $clone -SearchServiceInstance $server
#New-SPEnterpriseSearchCrawlComponent -SearchTopology $clone -SearchServiceInstance $server
#New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $server
 #New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $server

# Activate  Search Topology
 Set-SPEnterpriseSearchTopology -Identity $clone

After Successful execution, your topology should be restored. Same script can be used to move your entire topology for part of topology to another server.


List of errors you might see during this execution and solutions:


Set-SPEnterpriseSearchTopology : Rollback prending due to the last activation
failure. Cannot start Activation of another topology now.
At line:1 char:1
+ Set-SPEnterpriseSearchTopology -Identity $clone
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Offic...tSearchTopology:
   SetSearchTopology) [Set-SPEnterpriseSearchTopology], SearchTopologyActivat
    + FullyQualifiedErrorId : Microsoft.Office.Server.Search.Cmdlet.SetSearchT
Resolution Go to timer jobs and Run “Application Server Administration Service Timer Job” once.
Sr.No. 2
New-SPEnterpriseSearchQueryProcessingComponent : The search service instance
on this server is not online
At line:1 char:1
+ New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone
-SearchSer ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Offic...essingComponent:
   NewSearchQueryProcessingComponent) [New-SPEnterpris...essingComponent], In
    + FullyQualifiedErrorId : Microsoft.Office.Server.Search.Cmdlet.NewSearchQ
Resolution Start the search windows service  or consider using different server to host this search component.

SharePoint online Provisioning using PNP Provisioning Engine

Do you remember Onet.XML? Well, you would use onet.xml to create site definitions to provision sites with set of components already created in site. You could also use feature stapling to execute code on created site. Well, this is old now.

In Office 365, provisioning is different. Currently there are following options available as provisioning techniques

  1. Site Scripts
    1. Site Design
    2. Theme
  2. PNP Provisioning Engine

Well, I have written about site scripts earlier here. In this post, we will discuss PnP provisioning Engine.

PnP Provisioning engine is available with PnP library which you will need to install locally. Provisioning Engine has multiple components that you will need to be aware about to use it.

  1. Existing site

For PnP Provisioning to work you will need a site. Usually you would create a site with template which is closer to your needs. This is like a base template. Once site is created, provisioning schema and script will be used to update the site as per need.

  1. PnP Provisioning Schema

PnP Provisioning schema is like Onet.xml (if you remember what it is). It defines what components need to be provisioned.

Here is the actual schema:

   <pnp:Properties />
   <pnp:SitePolicy />
   <pnp:RegionalSettings />
   <pnp:SupportedUILanguages />
   <pnp:AuditSettings />
   <pnp:PropertyBagEntries />
   <pnp:Security />
   <pnp:SiteFields />
   <pnp:ContentTypes />
   <pnp:Lists />
   <pnp:Features />
   <pnp:CustomActions />
   <pnp:Files />
   <pnp:Pages />
   <pnp:TermGroups />
   <pnp:ComposedLook />
   <pnp:Workflows />
   <pnp:SearchSettings />
   <pnp:Publishing />
   <pnp:AddIns />
   <pnp:Providers />

Here are some samples:

and deep dive into schema with this video:

  1. PnP Provisioning PowerShell commands

You can use below script, which you can download from here.

    [Parameter(Mandatory = $true, HelpMessage="Enter the URL of the target site collection:")]

Write-Host -ForegroundColor White "--------------------------------------------------------"
Write-Host -ForegroundColor White "|               Provisioing Started                 |"
Write-Host -ForegroundColor White "--------------------------------------------------------"

    Write-Host -ForegroundColor Yellow "Connecting to target site URL: $TargetSiteUrl"
    Connect-PnPOnline $TargetSiteUrl    
    Write-Host -ForegroundColor Yellow "Enabling responsive UI on target site. This will add responsive UI files to Style Library."  
      Write-Host -ForegroundColor Yellow "Provisioning site components defined in xml."
    Apply-PnPProvisioningTemplate -Path .\Provisioin.xml -Handlers Files

        Write-Host -ForegroundColor White "--------------------------------------------------------"
        Write-Host -ForegroundColor White "|               Provisioning Completed                 |"
        Write-Host -ForegroundColor White "--------------------------------------------------------"
    Write-Host -ForegroundColor Red "Exception occurred!"
    Write-Host -ForegroundColor Red "Exception Type: $($_.Exception.GetType().FullName)"
    Write-Host -ForegroundColor Red "Exception Message: $($_.Exception.Message)"


Provisioning Engine also lets to create the template using existing site and then use it for provisioning on new sites. Following command can help you with that.

Get-PnPProvisioningTemplate -Out .\MyTemplate.pnp -IncludeAllTermGroups -IncludeSiteGroups -PersistBrandingFiles -IncludeSiteCollectionTermGroup

For more details about provisioning engine check github or msdn.

SharePoint Online – Access Control. Manage unmanaged devices, non standard apps and network location based access.

SharePoint online provides control over managing how SharePoint site is being accessed. This feature lets you control the access based on following criteria:

  1. Devices
  2. Apps
  3. Network location/IP address based control

In this post, we will test SharePoint online Access Control feature.

  1. Login to SharePoint online -> Admin -> SharePoint
  2. Go to “Access Control”.
  3. With default setting “Allow full access from desktop apps, mobile apps, and the web”, you can access portal from any device and can download the documents.accesscontrol1accesscontrol2
  4. Now, Under Unmanaged devices, select Block Access. This will show the note how this policy would work and click Save. [Note: if you are already accessing this portal from unmanaged device, once this policy takes effect, you will not be able to access the portal and revert this setting. So, make sure, you have access to to remove this policy after testing.]accesscontrol3
  5. To understand this better, go to -> Azure Active Directory -> Conditional Access. You will see a new policy as below is created and is enabled. This policy can be further modified from this portal for more granularity.accesscontrol4accesscontrol5
  6. Now if you try to login to the portal you would get the message saying, “you can’t get there from here”. You would have to sign out from your previous login, close the browser to make sure this policy is tested properly.accesscontrol6
  7. Now Delete this policy from -> Azure Active Directory -> Conditional Access -> List of policies.
  8. After policy is deleted again you can access your sharepoint online portal again from any device.
  9. Now, we will test “limited access”. This adds two Azure AD access conditions and prevents from download.accesscontrol7accesscontrol8
  10. If you open the site after sign-out and closing browser and waiting for 5-10 minutes. Message is added at top of the page about limited access and download option is disabled on libraries.accesscontrol9accesscontrol10
  11. Allowing only specific IP addresses/range to access sharepoint online. But couldn’t get this working. Something wrong with IP address range given.accesscontrol11
  12. You can create similar policy for Network location based access using Azure AD Conditional Policy as well. This way you can allow sharepoint accessible only from your company network.accesscontrol12
  13. App based access will prevent users with unauthorized/non-standard apps being used to access the content of your site if they don’t use enterprise approved authentication mechanism. You would love testing this one. So, go ahead and test it out.

SharePoint On-Premise: Download entire sharepoint site content from libraries to your local folder on your drive

There will be incidents when you would want to download entire sharepoint site content from libraries to your local folder on your drive. You can use following script to download entire web application to your local folder.

I prepared this script in very less time, so I could not make it very generic but you would have to provide the values in the script under “< …. >”. I will update script generic once I get more time. But for now, I hope this helps. You can download script from here.

[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
 [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Portal, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
 [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
 [System.Reflection.Assembly]::Load("System.Web, Version=, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")function Get-DocInventory([string]$webAppUrlUrl) {$Sites = Get-SPWebApplication $WebAppUrl | Get-SPSite -Limit All#$site = New-Object Microsoft.SharePoint.SPSite $siteUrl
 foreach($site in $Sites){Write-Host $site.Urlif($site.Url -like "**")
foreach ($web in $site.AllWebs) {
 foreach ($list in $web.Lists) {
 if ($list.BaseType -ne “DocumentLibrary”) {
if($list.Hidden -ne $true)
if($list.Title -notlike "Style Library")
if($Site.Url -eq "")
 $path = "C:\Dump\" + $Site.Url.Replace("http://" ,"").Replace("/","\") + "\ROOT\" + $web.Title + "\\" + $list.Title
 $path = "C:\Dump\" + $Site.Url.Replace("http://" ,"").Replace("/","\") + "\\" + $web.Title + "\\" + $list.Title
Write-Host $path
$loc = New-Item -ItemType Directory -Force -Path $path
foreach ($item in $list.Items) {
 $data = @{
 "Site" = $site.Url
 "Web" = $web.Url
 "list" = $list.Title
 "Item ID" = $item.ID
 "Item URL" = $item.Url
 "Item Title" = $item.Title
 "Item Created" = $item["Created"]
 "Item Modified" = $item["Modified"]
 "Created By" = $item["Author"]
 "Modified By" = $item["Editor"]
 "File Size" = $item.File.Length/1KB
 "File Size (MB)" = $item.File.Length/1MB
#$fromfile = $item.Url
 $tofile = $path + "\" + $item.Url
$file = $web.GetFile($item.Url)
$binary = $file.OpenBinary()
 $stream = New-Object System.IO.FileStream($path + "/" + $file.Name), Create
 $writer = New-Object System.IO.BinaryWriter($stream)
New-Object PSObject -Property $data
#this script takes web application because with some modifications you can take dump of entire web application on file system.
 Get-DocInventory "" | Out-GridView

After dump is completed you will see same structure as your sharepoint site created on your local folder with structure as below i.e. (site collection\sites\sitename\webname\libraryname\).


SharePoint Online Customization – SharePoint Framework (SPFx) Extension: Application Customizer

First of all, here is the source code that is created in this post.

Microsoft has provided multiple ways to customize SharePoint Online pages:

  1. Provider Hosted Apps/Add-ins
  2. SP Framework (SPFx)
    1. WebParts
    2. Extensions
  3. Declarative customizations
  4. PnP Extensions/Engines
  5. Office 365 UI Fabric
  6. etcetera (for later)

In this blog we will create a SPFx extension of  Application Customizer type to add the HTML block to top navigation which will serve as a Quick News Ticker at top section of the page.

  1. Make sure following components/softwares are installed on your development machine
    1. Nodejs 6.12/6.11
    2. Npm 3 (nodejs 6.12 will install higher version. You can downgrade version by using npm install -g npm@3)
    3. Visual Studio Code
  2. Start Command Prompt
    1. md c:\NewsTicker
    2. cd c:\NewsTicker
    3. yo @microsoft/sharepoint
    4. Provide Extension information
      1. app-extension solution name (NewsTicker), and select Enter
      2. Select SharePoint Online only (latest), and select Enter.
      3. Select Use the current folder, and select Enter.
      4. Select N to require the extension to be installed on each site explicitly when it’s being used.
      5. Select Extension as the client-side component type to be created.
      6. Select Application Customizer as the extension type to be created.
      7. Provide “NewsTicker” extension name, and select Enter.
      8. Provide extension description, and select Enter.SPFxExtension1SPFxExtension2
    5. npm shrinkwrap
    6. SPFxExtension3
    7. code .        SPFxExtension4This will open your current source code folderin Visual Studio Code
    8. Create a new file named AppCustomizer.module.scss under the src\extensions\newsTicker folder.
.app {
            .top {
                display: flex;
                align-items: center;
                justify-content: center;

            .bottom {
                display: flex;
                align-items: center;
                justify-content: center;

3. Modify client side javascript file defined in TypeScript: NewsTickerApplicationCustomier.ts as follows

import { override } from '@microsoft/decorators';
import { Log } from '@microsoft/sp-core-library';
import {
} from '@microsoft/sp-application-base';

import { Dialog } from '@microsoft/sp-dialog';
import * as strings from 'NewsTickerApplicationCustomizerStrings';
import styles from './AppCustomizer.module.scss';
import { escape } from '@microsoft/sp-lodash-subset';
const LOG_SOURCE: string = 'NewsTickerApplicationCustomizer';
 * If your command set uses the ClientSideComponentProperties JSON input,
 * it will be deserialized into the object.
 * You can define an interface to describe it.
export interface INewsTickerApplicationCustomizerProperties {
  // This is an example; replace with your own property
  Top: string;

/** A Custom Action which can be run during execution of a Client Side Application */
export default class NewsTickerApplicationCustomizer
  extends BaseApplicationCustomizer {
     // These have been added
     private _topPlaceholder: PlaceholderContent | undefined;
     public onInit(): Promise {, `Initialized ${strings.Title}`);
         // Added to handle possible changes on the existence of placeholders.
            this.context.placeholderProvider.changedEvent.add(this, this._renderPlaceHolders);
         // Call render method for generating the HTML elements.
            return Promise.resolve();

     private _renderPlaceHolders(): void {
      console.log('Available placeholders: ', => PlaceholderName[name]).join(', '));
      // Handling the top placeholder
      if (!this._topPlaceholder) {
    this._topPlaceholder =
        { onDispose: this._onDispose });

    // The extension should not assume that the expected placeholder is available.
    if (!this._topPlaceholder) {
      console.error('The expected placeholder (Top) was not found.');

    if ( {
      let topString: string =;
      if (!topString) {
        topString = '(Top property was not defined.)';
      if (this._topPlaceholder.domElement) {
        this._topPlaceholder.domElement.innerHTML = '${escape(topString)}';
      }    }      }    }
    private _onDispose(): void {
      console.log('[NewsTickerApplicationCustomizer._onDispose] Disposed custom top and bottom placeholders.');
    } }


4. To test Your Code run:

gulp serve –nobrowser

This will take some time to complete building the solution and make nodejs application available for debugging.SPFxExtension5

5. To test your extension, append the following query string parameters to the URL:

?loadSPFX=true&debugManifestsFile=https://localhost:4321/temp/manifests.js&customActions={"":{"location":"ClientSideExtension.ApplicationCustomizer","properties":{"Top":"Top area of the page"}}}


6. Select Load Debug Script.

This will load the page with News Ticker on the top of the page. This will be available on all the modern page with this extension enabled.


You can further use TypeScript/OfficeUI framework to customize behavior in these dynamically added HTML blocks.

SharePoint Online Solution deployments using SharePoint PnP PowerShell

PnP PowerShell can be used to automate the deployment, publishing, installing, upgrading and retracting apps in sharepoint online.

 Adding and publishing app to the app catalog

Adding app (.sppkg file, .app file) to the tenant app catalog is a prerequisite to later on make app available for use in SharePoint sites. Doing so can be done using below simple cmdlet:

Add-PnPApp -Path ./myapp.sppkg

Once added, need to continue with publishing app, effectively making the app available to be used by the users of tenant. Below PnP PowerShell cmdlets is used to publish app:

Publish-PnPApp -Identity <app id> -SkipFeatureDeployment

 Removing the app from the app catalog

Remove-PnPApp -Identity <app id>

Using apps on your site

Once the app was added to the app catalog and published you can continue with installing the app to specific site using this command

Install-PnPApp -Identity <app id>

An added app can be upgraded using following command.

Update-PnPApp -Identity <app id>

To uninstall the app from specific site following command can be used:

Uninstall-PnPApp -Identity <app id>

 Knowing which apps are there for adding to site

Getting a list of apps that can be added to the site is possible using:


SharePoint Online – Understanding Classic & Modern sites and pages

Classic site and modern sites are just different pages in your sharepoint site which use different page rendering models. Teams and communication sites have all the components custom built as modern site components. So, if you have created/planning to create classic template, you can still use modern site pages in it.

When you create the classic sites using old templates you get site with classic page as home page, just like below:


You will get the site same as SharePoint 2013 site as below.


To convert ( or to add modern sites page support) it into modern site you need to have “Site Pages” feature enabled at site level. This feature in SPO is enabled by default.


Then you can add the modern site page by using “Add a Page” action under top right gear button.


This will let you add the modern page to the site which you can customize as per your needs. On this page, all the modern parts and components can be used.


After page is created you can go to the “site pages” library from “all site content” page and then select the new page details actions and select “Make homepage”. This will make this new page a home page of the site.


Now if you create any new site page it will be a modern page however site will still have access to the classic apps/lists on classic pages. Since modern is just the way pages render, components like Task (as below), Discussion board are not modern ready so can be used only in classic pages. Classic components cannot be added to the modern pages, but modern components can be added to classic pages.



If you select to add classic lists/libraries on modern pages, they will not able available to add. However you can create the custom lists from modern page “New” button and then add them to the modern pages.


Microsoft so far has made very few lists/apps available in modern and I presume that will change in future. We will see lot of modern apps which will work on both classic and modern pages. For example, following Custom List Task1 is created from the modern page and hence available to add in both classic and modern page. However, if you create calendar list from calendar app it is available to add in classic page but not in modern page (may be because Office 365 now has Planner and Outlook Calendar) and I hope Microsoft resolved this asap.

If a modern custom list is added to both classic and modern pages they get rendered differently like below:

Modern custom list in modern page:


Modern custom list in classic page:



In next blog, I will be writing about modern sites/page customization methods.

SharePoint Online – Declarative Customizations – Creating Themes

Sharepoint online provides support for declarative customization to create themes which will be applied to all modern sites. Once created can be used used in “Site Design

  1. Set json schema. Create this schema using MS ThemeGenerator.
$themepallette  = @{
"themePrimary" = "#e5f0f9";
"themeLighterAlt" = "#bad8f1";
"themeLighter" = "#8ec0e8";
"themeLight" = "#62a7df";
"themeTertiary" = "#368ed6";
"themeSecondary" = "#2473b3";
"themeDarkAlt" = "#1c5788";
"themeDark" = "#133b5c";
"themeDarker" = "#0a1f30";
"neutralLighterAlt" = "#f8f8f8";
"neutralLighter" = "#f4f4f4";
"neutralLight" = "#eaeaea";
"neutralQuaternaryAlt" = "#dadada";
"neutralQuaternary" = "#d0d0d0";
"neutralTertiaryAlt" = "#c8c8c8";
"neutralTertiary" = "#d6d6d6";
"neutralSecondary" = "#474747";
"neutralPrimaryAlt" = "#2e2e2e";
"neutralPrimary" = "#333333";
"neutralDark" = "#242424";
"black" = "#1c1c1c";
"white" = "#ffffff";
"primaryBackground" = "#ffffff";
"primaryText" = "#333333";
"bodyBackground" = "#ffffff";
"bodyText" = "#333333";
"disabledBackground" = "#f4f4f4";
"disabledText" = "#c8c8c8";
  1. Connect to SPO from powershell and Run
Add-SPOTheme -Name "Snowy" -Palette $themepallette -IsInverted $false
  1. Run from powershell : Get-SPOThemethemes1
  2. Go to modern site and apply the new themethemes2

SharePoint Online – Declarative customizations using SiteScript & Site Designs


SharePoint Online, by default has four modern site templates.

  • Communication site (3)
    • Topic – used for news, events, announcements
    • Showcase – product, team, event
    • Blank – blank template
  • Team Site – to enable collaboration for teams (1)

To create additional modern site templates, developers will have to customize the blank communication site template after creating site manually to achieve desired template.

MS has introduced a solution to this manual activity: Site Designs.

Site designs are like template. They can be used each time a new site is created to apply a consistent set of actions.

Site Designs can be used to perform following actions on newly created site. Hope to see this list growing in future.:

  • //add SPFields
  • //Delete SPFields
  • //add content type
  • //remove content type
  • //set SPFieldcustomformatter
  • //Add Navigation Link
  • //apply theme
  • //set site logo
  • //join hub site
  • //trigger a flow

In this post, we will understand & create a custom site design for a team site which will perform the actions on modern team sites to be used as Personalized Contacts site.

Use Case:

Personalized Training site to have following items:

  1. Lists
    1. Contact
  2. Custom Themes
    1. Simple custom theme (this needs to be already created and uploaded to sharepoint online tenant)
  3. Site Logo
    1. Site Logo – contact book Image (use absolute url of the image hosted already on web/cdn)
  4. Navigation
    1. Add How to use
    2. Contact Information
  5. MS Flow

Pre-requisites for deployment:

  1. Site Designs Standard Release: Site designs is still in targeted releases and not available for production yet
  2. SPO Powershell OR PnPSharePointOnlinePowershell: PnP Powershell makes it easy to configure site designs.


Step 1: Create JSON based site script. Here is the link to all the supported actions so far in JSON schema.

$site_script = @'
 "$schema": "schema.json",
     "actions": [
            "verb": "createSPList",
            "listName": "PersonalContacts",
            "templateType": 100,
            "subactions": [
                    "verb": "setDescription",
                    "description": "List of contacts",
                    "title": " PersonalContacts "
                    "verb": "addNavLink",
                    "url": "/SitePages/how to use this site.aspx",
                    "displayName": "How to use this site?",
                    "isWebRelative": true
                    "verb": "applyTheme",
                    "themeName": "Blue Yonder"
                    "verb": "setSiteLogo",
                    "url": ""
         "bindata": { },
 "version": 1

Note: Custom themes can be separately created and uploaded to tenant using JSON scripts to be used in site script.

Step 2: Add Script:

C:\> Add-SPOSiteScript -Title "Contact SD2" -Content $site_script -Description "Contact Site Design"

 Step 3: create the site design using site script uploaded in step 2

C:\> Add-SPOSiteDesign -Title "Contact SD2" -WebTemplate "64" -SiteScripts “38743f41-e0c8-4698-a4b6-8a41492b75a6" -Description "Contact Site Design"


 Step 4: User site design

  1. Go to the home page of the SharePoint site you are using for development.
  2. Choose Create site, Team site.
  3. In the Choose a designdrop down, select your site design Contact SD.sitedesign2
  4. In Site name enter a name for the new site Contacts SD.
  5. Choose Next.
  6. Choose Finish. If site script is created correctly, site will get created in sometime.
  7. A pane will indicate that your script is being applied. When it is done, choose View updated site. You will see the custom list on the page with custom logo and theme.sitedesign3

Changing Azure AD or Office 365 Sign-In Page Branding

Changing the branding for Office 365 applications is very easy. You can achieve this by following simple process.

  1. and open Azure AD or -> admin – > Admin Center -> Azure AD
  1. Azure AD -> Company Branding


3. Click configure


4. Fill in information for default language


  1. Save

Note: You can add multiple configurations per languages. Based on the browser language settings Office 365 will use the correct configuration.

With “Advanced Settings”, you can customize the styles i.e. colors, favicon etc.