Microsoft 365 Groups vs. Teams vs. SharePoint Comparison

Microsoft 365 cloud technology tools have emerged as one of the best platforms for organizations and enterprises to work in collaboration effectively.

Microsoft Groups, Teams, and SharePoint are some of the Microsoft 365 collaboration tools which are used by organizations worldwide while performing different group projects.

These three platforms are independent entities and are developed for different uses. These platforms can be used together to achieve the maximum results and make your group project workflow easy and speedy.

You should be familiar with the SharePoint comparison between Groups and Teams to use these platforms effectively in your group projects. If you’re considering moving to the cloud for improved collaboration, read our guide on how to migrate file shares to SharePoint Online.

Microsoft Groups is a membership platform of Microsoft 365 that can be integrated with platforms like Outlook and Planner to create an effective interface for group projects.

The 365 Groups lay down a foundation of productivity and Microsoft Teams is built on the top of this foundation to provide you with additional features for a collaborative group project interface.

What is Microsoft 365 Groups?

Microsoft Group is an object in Azure Active Dictionary that can be integrated with other platforms like OneNote, SharePoint site, planner, etc.

It is a platform provided by Microsoft 365 for creating a group project interface on other platforms.

The team leader can create a group and become a group admin. The group admin can add members to the group and allow them to use the resources of the group.

Unlike some major group platforms, it assigns permission to users automatically.

The groups can be set to private or public as per your requirements. The group can be created on major Microsoft platforms like Outlook, SharePoint, planner, and Outlook on the Web for effective communication in group projects.

On SharePoint comparison, it provides you with the facility of integration with platforms.

Pros and Cons of Groups

For an effective comparison, we need to have a glimpse at the advantages and disadvantages of the Microsoft 365 group:

Pros:

  • Efficient for working on small projects.
  • It provides a user-friendly interface.
  • It is an essential option for departments that require fast replies for day-to-day tasks.

Cons:

  • It provides inefficient data related to tracking and reporting.
  • You need to install local desktop software for a better experience.

What is Microsoft Teams?

Microsoft Teams are also known as the “teamwork hub” within Microsoft’s productivity suite.

It is a chat-based collaborative platform that can be used for the smooth workflow of group projects.

Microsoft Teams is built upon Microsoft 365 groups and inherits its various features.

Whenever you create a team using Microsoft teams, a group is created by default in the back-end. Moreover, you can also create a team from your existing group.

But the permissions will be inherited from your group to the newly created team. On SharePoint comparison, the files shared in a team are stored using the features provided by SharePoint and not on the cloud.

Pros and Cons of Teams

For an effective comparison, we need to have a glimpse at the advantages and disadvantages of the Microsoft 365 team:

Pros:

  • The team members can focus more on work rather than problems prevailing due to miscommunication.
  • The productivity of the team has increased.
  • The implementation of the Microsoft 365 team is easy.

Cons:

  • The file structures are confusing.
  • The online meeting experience is different.
  • Flexibility is limited.

What is SharePoint?

SharePoint is a web-based platform that uses pages, workflows, lists, and other web resources to provide an efficient collaboration platform for group projects.

It also empowers the companies to control their workflow and file sharing. It provides many intranet-based features for an effective group discussion.

It also consists of many security features that, on SharePoint, comparison with teams and groups is missing.

SharePoint can be used by small and large businesses to enhance their efficiency and productivity. Discover the top features and benefits of SharePoint Online for collaboration and teamwork to see how it can drive your project success.

It is a user-friendly web-based collaborative platform that provides intranet features like secure sharing, content sharing, and workflow collaboration.

The various intranet features provided by SharePoint are as follows:

  • The documents are visible only after approval (publishing) by the admin.
  • Notification can be provided to the users when files are uploaded or updated.
  • You can prevent authoring or editing of documents by applying “checkout” on the documents or, alternatively, “co-author” documents concurrently.

Are you in need of assistance? We can help!

We help companies upgrade their on-premises SharePoint environment to the very latest for features, performance, security, and scalability.

Pros and Cons of SharePoint

For SharePoint comparison against teams and groups, we need to have a glimpse of the advantages and disadvantages of SharePoint:

Pros:

  • It is a part of Microsoft Office and thus easily integrates with Microsoft PowerPoint, Excel, and Word.
  • You can utilize automation and integration features in Microsoft applications and other platforms.
  • It is highly customizable.
  • It stores the files in an organized and structured fashion which makes searching for files easy.
  • Enterprise Search allows sophisticated document and content search.
  • It provides sophisticated document management.
  • It allows you to track the version history of documents.
  • You can manage document security and permissions.
  • It is easily extensible for document metadata for filing and search and can be managed centrally across the enterprise.
  • SharePoint is suitable for both small and large organizations.

Cons:

  • SharePoint can be costly to host and license, although for many organizations, it comes free with existing licensing.
  • Best results are achieved with the support of employee training.

Additional Read:

SharePoint Group Management

Conclusion

SharePoint, Groups, and Teams are Microsoft 365 platforms that consist of various features for creating collaborative group projects efficiently and easily.

SharePoint provides you with extra features when compared to Groups and Teams alone.

These platforms have their advantages and disadvantages, and you can use any of these platforms based on your requirements and availability of resources.

SharePoint can work as a perfect group project collaboration tool for your small and large-scale projects.

How to Activate SharePoint Publishing Infrastructure

SharePoint has emerged as one of Microsoft’s most popular products after MS Word, Excel, and PowerPoint.

It is used by many leading enterprises as well as small-sized organizations to share data with their teams easily. SharePoint is mainly used by organizations to collaborate.

But SharePoint publishing provides far more features that some organizations are unaware of. The SharePoint publishing is mainly developed using the Publishing Portal Site Template and Enterprise Wiki Template.

If you want to use any of the above publishing features, you need to enable the SharePoint publishing infrastructure.

Let’s discuss the step-by-step procedure to activate the SharePoint Publishing infrastructure for your site.

What Are the Publishing Features in SharePoint?

The publishing features are by default disabled in SharePoint. It does not matter if you have created a SharePoint site for individual, team, project, or enterprise use, or using a SharePoint default site you may want to enable the publishing features to use them for your site.

SharePoint serves up sites by default in a collaborative way. It allows you to create team sites, calendars, department sites, and Wikis.

Publishing capabilities allow more refined and nuanced capabilities including in-place drafting, approval workflows, versioning, and scheduled publishing.

The publishing model is quite different from the collaborative model. The SharePoint publishing infrastructure enables you to present your site content in a more structured, scheduled and organized, and robust way.

Additionally, you can make use of custom branding, themes, and extensive navigation options.

Moreover, you need to turn on the publishing features to enjoy various advanced functions like Content Query Web Part (CQWP) and Content Search Web Part (CSWP).

Sharepoint publishing infrastructure can greatly enhance the structure of the site to make it more organized, having a reliable Sharepoint development company having expertise in Microsoft Sharepoint services is crucial for efficient collaboration and smooth publishing.

Activate the Publishing Infrastructure Feature

  1. Go to your root site (you need to only enable the setting in the root site, child sites will automatically inherit the permissions), click settings->site settings.
  2. On the site settings page, click on Site collection administration and go to site collection features.
  3. On the site collection features page, go to SharePoint publishing infrastructure and click on activate.

Publishing Features

Once you have enabled the SharePoint publishing infrastructure feature on your root site, it will be automatically applied to the whole site collection.

You will be able to enjoy various Publishing features on your site collection from the ribbon itself; note some features are only visible by clicking the links on the site settings page.

Additional Read

Best Tips for SharePoint Infrastructure Monitoring and Health Check

Navigation and Ribbon

Let’s discuss some major features that are available to use from the ribbon itself:

  • Check-in/Check-Out: You will be able to use the check-in/check-out feature if you are currently editing a page in the edit group feature of the format text tab. It will allow you to edit the content of your page with an embedded version control feature.
  • Publish, approve, and reject buttons: If you are using the approval workflow, then you will see the publish, approve, and reject buttons on the publish toolbar. They will ensure that data is not published on a site without prior reviews.
  • Publish list: The publish list consists of many options including the Submit button. The submit button will link the page to one or more approvers for approval before publishing the content. You can also unpublish or unapproved a page depending on the permissions you have been allotted.
  • Schedule button: The schedule button opens a dialog box where you can specify the schedule to publish your page.

How to De-activate Publishing features

If you want to switch back to the collaborative mode and disable the publishing features on your site, you must keep the following points in mind:

  • Make sure that any of the sites of your site collection is not using any publishing features. If you will disable the publishing features, then these features will not work on the sites anymore. For example, if you are collecting information from multiple sites using the Content Search Query Web Part it will stop working as soon as you deactivate the features.
  • Secondly, you are required to disable the publishing features for each site individually. You cannot disable the publishing features for your collective site collection. It will generate errors if any of the sites in the site collection is using any publishing feature. So, to avoid the error messages you need to follow a bottom-up approach to disable the SharePoint publishing infrastructure.
  • You need to follow the activation steps in reverse order to disable the publishing features. To disable the SharePoint publishing infrastructure at the site level visit site settings->Manage site features and click on the deactivate button.

Need SharePoint expert for your Business?

We help companies upgrade their on-premises SharePoint environment to the very latest for features, performance, security, and scalability.

Users and Permissions

You can assign different kinds of permissions to different users by using the SharePoint publishing infrastructure.

The Publishing Portal site and Wiki both provide you with various user permissions to choose from. Publishing Portal Site includes Designers, Approvers, Hierarchy Managers, and Restricted Readers.

The Wiki provides the same features with Viewer as an additional feature. Approve, Manage Hierarchy, and Restricted Read are included by default as site collection features.

The child sites will by default use the groups and permission levels from the root site.

*Note: If you have enabled the SharePoint publishing infrastructure features and started using it. You must be careful before deactivating the publishing features as some features on your site may stop working and featured applications may not respond.

Conclusion

SharePoint provides you with many SharePoint publishing infrastructure features to present your web content in an organized, enterprise-class, and structured fashion.

The publishing features are by default set as disabled for the custom as well as default sites in SharePoint. You only need to enable the publishing features for only the root site; child sites will inherit the features automatically.

But once you start using the publishing features do not disable the features (unless truly necessary) as it can disable many features for your site.

7 Critical Office 365 Disaster Recovery Plan Mistakes Businesses Make

Data is the primary asset for every organization and a data loss can become very costly for respected enterprises. The lost data may include customer, employee, or even stakeholder information. Intruder attacks, hardware failures, and system hacking have become some common issues in the current world.

If you don’t have a proper disaster recovery plan, you can be subject to huge hacker ransom demands. If you are using Office 365 in your organization on a regular basis, then the Office 365 disaster recovery plan becomes very important for your firm. You must be careful while planning the Office 365 disaster recovery plan for your organization and should not make seven common mistakes.

Office 365 Disaster Recovery Plan Mistakes

1.Forgetting to Set Up Litigation Hold/Retention Policy

You must be clear about the priority of your data. It will help you to choose the data that you need to back up on a daily or weekly basis. Microsoft already provides you with a data policy that keeps your data stored with them for some time after deletion. After the files are deleted permanently, they are completely removed from the system.

If you have not created a disaster recovery plan (DRP) and applied it consistently and thoroughly, you may face severe problems. It can result in a loss of priority data and affect your Office 365 disaster recovery plan policy compliance. A better DRP will help your business to recover your prioritized data at times of disaster.

2. Confusing Microsoft 365 Data Backup with Office 365 Data Preservation Tools

Sometimes businesses misinterpret the eDiscovery and Preservation hold library as the office 365 preservation tools. It only stores data on a temporary basis. E-discovery helps you to locate, aggregate, and report on relevant data, and leverages the robust SharePoint search system. It lets you take backup of the Office 365 data e-mails, team chats,SharePoint, and OneDrive files.   Note some user data is only retained as long as a user is active in a system such as OneDrive and Exchange, and based on Retention policies, the data is disposed of overtime.

Once the user is deleted from the system, relevant data may be automatically discarded and access and restoration may no longer be possible.

3. The Plan is Outdated

Your Office 365 disaster recovery plan and retention and disposition policies need to be updated periodically to stay in line with compliance policies and stay one step ahead of threats. Similarly, new files might need to be backed up for protection against future threats.  Similarly, the document holds need to be managed to keep in compliance.

4. There’s No Communication

The communication between the recovery team and stakeholders plays a vital role in the Office 365 disaster recovery plan. There should be clear communication between the management and the DRP team to avoid any confusion in the recovery procedure.

Alternate communication channels should be available for the teams to communicate if the primary channels are not available for communication. It should be clear whom the team members have to contact to inform about the updates in the recovery procedure. Better communication ensures the speedy recovery of lost data through DPA.

5. Relying on Single and/or Infrequent Backups

Backup is the most vital part of a successful Office 365 disaster recovery plan. You should take frequent backups as new data keeps added to the organization’s database.  There are third-party backup tools that can greatly improve backups and more importantly, the ability to restore content.  Your backup must contain the data stored consistently across all systems to avoid data loss. Infrequent backups are equivalent to no backups at all as the desired recovery will be inconsistent at best.

Need SharePoint Disaster Recovery Service?

Let’s connect with our SharePoint expert and You’ll find our solutions robust, scalable, and dependable: complete solutions, limitless possibilities.

Let’s talk!

6. Not Preparing Remote Access

If your organization faces a disaster, then the work of the whole enterprise can come to a halt. You need to be pre-planning for the organization’s work to continue at the same pace during a disaster. Remote business planning should be your priority factor in Office 365 disaster recovery plan.  Covid has accelerated organizations awareness and led to a focus and boost in their capabilities, but it is an area for planning and remote access testing.

A disaster may affect the hardware, applications, and communication channels of an organization. If the business is not pre-planning to overcome these, it can face a serious operational and even financial crisis.

If the hardware of computers is unavailable or even destroyed, then the employees need to work from the remote computers. The best option for remote access is to work from personal computers and company laptops. The task of remote access becomes easier if data of employees’ computers are considered under backup.  The best is to retain all data and documents in company-controlled systems and environments.  Alternate channels must be created for the employees to communicate as the communication channels can be deeply affected by a disaster. You should consider the use of SaaS or cloud-based applications to remotely use the applications from other computers.

7. Not learning from experience

It might happen that your DRP plan will not be perfect at the first trial. The recovery plan may not be able to recover some particular kind of data or reduce the damage of the disaster. But once the disaster is over, we need to learn from the experience and find out and correct the shortcomings in your data recovery plan. You should identify the areas of concern in your plan and find solutions to the problems so they do not recur in the future.

Additional Read

MS-Office Integration with SharePoint

Conclusion

Data recovery plans are the primary requirement for a company to avoid data loss during an intruder attack or system hacking. If your organization works primarily on Office 365 then you should include Office 365 disaster recovery plans in your periodic tasks.

You must prepare a complete data recovery plan (DRP) to secure your open office data from being lost in an unforeseen disaster. You should have a policy and systems for frequent backups from a range of sources and maintain alternate communication and remote access facilities to avoid future problems in DRP. The Reality Tech team can help plan to avoid a disaster becoming a true disaster for your enterprise.

Are you in need of assistance? We can help!

Book a live 1-on-1 call with the experts of Reality Tech to find out how we will help you to achieve your goal.

Business Intelligence Solution: What It Is and Why it Matters Nowadays

Business intelligence (BI) consolidates data to render valuable insights in a user-friendly manner through dashboards, reports, graphs, and charts. This class of tools enables entrepreneurs and professionals to access historical, new, in-house, third-party, unstructured, and semi-structured data sets to evaluate business performance and trends. Business Intelligence solutions offer valuable insights to identify problems, identify market trends, discover new business opportunities, and improve business decisions.

History of Business Intelligence

The term business intelligence was coined by author Richard Millar Devens in 1865 when he discovered a banker collecting business intelligence information on the market against his competitors.  In 1958, Hans Peter Luhn, an IBM computer scientist researched the probability of gathering business intelligence by using technology. Consequently, he established programs (protocols) for creating IBM’s analytics platforms.

By the 1990s, Business Intelligence solutions gained rapid popularity but the technical application was complex. It required significant investment, and preplanning as well as IT support, often leading to delayed reports and backlogs. Further, extensive training on business intelligence was required for the users and analysts to successfully analyze and run queries on data.

Today, Business Intelligence solutions are focused on self-service BI applications that enable users to create personalized reports and analyses based on their measuring parameters. Additionally, cloud-based platforms have assisted BI to reach globally. Consequently, with faster machines and improved programs, data can be easily processed in real-time, enabling decision-makers to make informed and profitable choices.

How Business Intelligence Works?

Business Intelligence solutions involve four steps to transform massive raw data sets into meaningful information that holds the potential to convert into wins, improving the organization’s bottom line.

Step 1: Gather and transform data from various sources

BI tools use the ETL method (extract, transform, and load) to combine unstructured and structured data from several sources. The collected data is sorted and transformed into smaller and comprehendible data sets for storing at a central location so that applications/programs can easily run a query or analyze it.

Step 2: Discover trends and variations

Data mining is an automated process that quickly analyzes data to discover patterns to render meaningful insights on the latest business performance. Additionally, BI tools feature different types of data modeling and analytics models such as predictive, descriptive, statistical, and exploratory models that explore data, predict trends, and make recommendations.

Step 3: Use data visualization to deliver results

Business Intelligence solutions use data visualization techniques to present results in an easy-to-understand format that can be shared with everybody in an organization. Further, to assist users in comprehending the data and provides the latest business performance or trends, and reporting method used that involves interactive dashboards, maps, graphs, and charts.

Step 4: Act on insights in real-time

Businesses can quickly transform their insights from historical and latest data into action with the use of Business Intelligence solutions. These BI tools allow real-time modifications and long-term strategic deviations to eliminate incompetence, adapt to dynamic market shifts, improve supply challenges, and resolve customer problems.

How Business Intelligence Supports Organizations?

The objective of the Business Intelligence solution is to assist organizations to make informed decisions. Organizations using a BI strategy will obtain accurate, organized, and meaningful data that holds the potential to improve their organizational processes and/or improve their sales and revenue.

BI tools assist teams to gauge their strategy’s performance through key performance indicators (KPIs) that can be tracked and monitored by Business Intelligence solution. Easy access to KPIs and metrics enables teams to organize, focus, and re-align their strategies to the organization’s overall objectives. Further, it allows them to free their working hours to engage in core business tasks that impact the organization’s performance.

Business Intelligence solution is used for demonstrating historic patterns to stakeholders, who can understand and evaluate the health and performance of their vertical or industry, and take corrective measures to improve it.

Benefits of using Business Intelligence software

  • Business Intelligence solutions enable organizations to transform into data-driven enterprises, which improves their performance while they gain a competitive edge.
  • Improve ROI – businesses can smartly comprehend the useful insights to allocate resources for meeting strategic objectives.
  • Discover customer behavior, trends, and preferences for targeting prospects or clients with relevant services/products.
  • Monitor, improve or streamline business operations based on the insights.
  • Improve supply chain management through monitoring activity across the funnel, and communicating outcomes with vendors and partners.

Start Your Business Intelligence Project in a Click

Our technology and wide delivery footprint have created billions of dollars in value for clients globally and are widely recognized by industry professionals and analysts.

How does Business Intelligence ease working?

Since, BI tools sort, structure and analyze historical and new data, it enables organizations to work smartly as they can make rational decisions in real-time, which gives them a competitive advantage.

Business Intelligence solution provides tools for measuring processes and strategies; hence organizations and sales and marketing teams can eliminate or improve on their tasks and performance. Further, it enables them to obtain new market trends and evolving consumer behavior, which they can tap into for successful outcomes.

Business Intelligence Solutions provide benefits in six key areas

  •           Enhanced operational efficiency.
  •           Valuable insights into customer behavior and purchase patterns.
  •           Accurate monitoring and evaluation of marketing, sales, and financial performance.
  •           Transparent benchmarks according to historical and new data.
  •           Instant alerts on customer problems and data variances.
  •           Sharing of analysis in real-time across verticals and industries.

Conclusion:

Business Intelligence solutions are the best great strategic option for enduring competitive advantage and business success. For making timely and informed decision-making to stay ahead of the competition, using BI tools and programs can be essential, as it allows the deep understanding of market trends, customer behavior, and monitors and tracks business processes in real-time for profitable business decisions. Reality Tech helps you to visualize your Enterprise data better than ever.

Challenges in the Hybrid sourcing model

Overcoming cultural challenges in the Hybrid sourcing model

The focus of this article is how team members within offshore organizations can be more effective in the USA working within a hybrid model. Without active efforts to address the cultural differences leads to eroded USA client satisfaction and general frustration.

While the cultural differences in a fully offshore model are commonly understood, the differences could be mare stark and even destructive in the hybrid model, where staff are present both on and off shore.

It is understood that avoiding cultural miscues requires at times going against instinct, and doing what feels unnatural. However success depends on closing the cultural gap, so it is a goal worthy of effort.

In this article I try to offer specific guidance for the Indian audience that can be put to immediate use to improve effectiveness when working in the USA.

Punctuality

In USA, being late for a meeting can be fatal to a relationship. People are expected to arrive not only on-time, but preferably slightly early. Not only to accommodate unanticipated delays, but also to get through security and be fresh and ready for the meeting. In USA, meetings can run over, but generally start on time.

Language

While Indian written and spoke English is generally excellent, Americans often have a hard time parsing English spoken by Indians. This seems to be a greater problem over the phone. Note the human ear adjusts to accents, so over time, this issue is reduced. For example, many American companies use Philippine-based offshore call centers, as that accent is considered easier for Americans to understand.
Lastly, some expressions are unknown in the West, and cause puzzlement, and should be avoided in conversation. These include:
• “Kindly Revert”
Try instead “Please get back to me”
In general, outside of mathematics and programming, “Revert” is rarely ever used in spoken American English.

  • “Do the needful”
    Try instead “Please do ‘x’”
  • “Discuss about”
    Try instead “Can we discuss it?”
  • “Veg”
    That acronym is unknown in the west. Instead refer to it as “Vegetarian” and “Non-Vegetarian”
  • “Holiday”
    Use the word “Vacation” instead.
  • “Rest is fine”
    Instead, use the phrase “All the rest is fine”

Suggestions for success:

  • Visit clients in person when possible
  • Use Skype over telephone, as that connection is often clearer
  • Avoid some phrases commonly used by Indians
  • Add in “Please” and “Thank you” in verbal and written correspondence

Being direct

The nature of client/service provider puts the USA in the driver’s seat. The perception in India is that the client is generally right, and it would be rude to question the client. However in the USA, the expectation is that the service provider should challenge guidance, and offer insights, alternatives, possible improvements and even critique of the guidance. The problem becomes more subtle and insidious with delivering bad news. There are two general approaches to managing the delivery of bad news in the USA:

  1. Try to deliver all the bad news at once
    Better to declare a delivery date slippage of a full week, than to slip a day each day of the week.
  2. Deliver the news as early as possible
    Using the scheduling delay issue above, a top British architect once told me “If a project is declared late on the delivery date, I fire the staffer for one of two reasons: Either he is incompetent and did not know it was late until the last day, or he hid the information from me, which is dishonest”
    In short, it’s almost always better to be up-front. Being blunt on advice is considered especially refreshing in the USA, and is a key factor in promotions, event when the communication is skipping reporting layers.

Facing things head-on

Similar to being direct, in USA avoiding something uncomfortable, is frowned upon, and even downright confusing to Americans. If you cannot do what is asked, it is expected you will push back directly, and say you can’t. The best advice is to offer alternatives, rather than a blanket refusal.
How to succeed: If you can’t do something, offer guidance on who can, or a date when you can, or an alternative approach that you can deliver on.

Initiative

In the USA, guidance given is often general and not specific and indirect. In contrast, the expectation from Indian staff is to be given precise directives. USA staff are used to giving vague and summary guidance, and only general goals.

This cultural gap leads to stress for Indian staff and dissatisfaction on the part of USA clients.

This cultural gap feeds the perception in USA is that Indian staff do not show initiative. This perception is grounded in experience where USA organizations expect staff to apply common sense and promote ideas, alternatives, and make unrequested changes.

In USA there is an expression “The Customer is King”. So if the client asks for something small (doable), the common response expected should be “Yes” or a qualified yes, with a promise to get back. It is less acceptable to say one needs to climb the management chain for approval. Staff are assumed to take responsibility. Certainly this has to be balanced with managing scope/costs caused by commitments.

Email confirmation

Americans expect email confirmation when sending an email. This may sound simpler and even petty, but has been an issue, especially exacerbated by the time zone differences. Emails are discussions in America, and Americans expect confirmation or a reply with questions, ideas or suggestions.

I’ve seen this simple expectation result in significant consternation when an American manager emails guidance, and doesn’t get questions or acknowledgement back in response.

Americans are generally happy to coordinate and navigate even complex business issues in writing.

Suggestions for success:

  • Acknowledge receipt of guidance along with stating that it was understood
  • Ask any questions or clarifications in response
  • Feel free to suggest improvements or enhancements or even critique

Summary

The cultural differences encountered in business can be a cause for delight, or a source for frustration and even failed business relationships. Closing the cultural gap starts with an understanding of differences, and effort to change behavior and reduce the impact of such differences.

Excel corruption writing DIF files

When Excel writes a file in the DIF format, SAS is unable to read the file.  Here’s a valid DIF that has 24 columns, and 446,213 rows:

TABLE
0,1
""
VECTORS
0,24      
""
TUPLES
0,446213  

Note that “Tuples” in mathematical formulas are equivalent to “Rows”. A VECTOR is like a dimension, or field. In the case of Excel, it refers to columns. So far so good. However here is how such a file would be saved by Excel 2010:

TABLE
0,1
"EXCEL"
VECTORS
0,446213
""
TUPLES
0,24

 

Excel has no problem reading the above file format, as it ignores tuples/vectors internally. However SAS cannot handle this not-so-standard deviation.

Below is VBA code that after saving a DIF file “fixes” the header by opening the file in binary mode and corrects the issue. Note FName contains both path and filename:

 
 'Fixup TUPLES and VECTORS
 
Dim filenum As Integer
Dim strData As String
Dim VectorIdx As Integer
Dim TuplesIdx As Integer
Dim VectorStr As String
Dim TuplesStr As String
Const CharsToProcess = 60
Dim outStr
Dim CRLF As String
Dim DoubleQuote As String
Dim Fname As String
 
CRLF = Chr(13) & Chr(10)
DoubleQuote = Chr(34)
 
Fname = saveString
 
filenum = FreeFile
Open Fname For Binary Access Read As filenum
 
strData = String$(CharsToProcess, " ")
Get #filenum, , strData
Close #filenum
 
VectorIdx = InStr(strData, "VECTORS")
TuplesIdx = InStr(strData, "TUPLES")
VectorStr = Mid(strData, VectorIdx + 9, 14) 'overly generous portion of chars
TuplesStr = Mid(strData, TuplesIdx + 8, 14)
 
If InStr(TuplesStr, Chr(13)) > 0 Then 'trim CR LF
  TuplesStr = Left(TuplesStr, InStr(TuplesStr, Chr(13)) - 1)
End If
 
If InStr(VectorStr, Chr(13)) > 0 Then 'trim CR LF
  VectorStr = Left(VectorStr, InStr(VectorStr, Chr(13)) - 1)
End If
 
outStr = "VECTORS" & CRLF & TuplesStr & CRLF & DoubleQuote & DoubleQuote & CRLF & "TUPLES" & CRLF & VectorStr
 
filenum = FreeFile
Open Fname For Binary Access Write As filenum
Put #filenum, VectorIdx, outStr
Close #filenum

SharePoint Group Management

Managing SharePoint Groups in PowerShell

SharePoint Groups are a great mechanism for managing user permissions; however, they exist within a single site collection. What if you have hundreds of site collections? We can easily script a range of common operations.

I prefer to use a CSV-fed approach to manage groups and users. I create a CSV with the name of the group and the users, which I list in pipe-separated format (commas are already being used for the CSV). To read in a CSV, use:

Import-Csv "L:PowerShellAD and SP group mapping.csv"

Let’s get the Site, Root Web, as well as an SPUser for the group owner, and get the groups object:

$Site = New-Object Microsoft.SharePoint.SPSite($SiteName)
write-host $site.Url
$rootWeb = $site.RootWeb;
$Owner = $rootWeb.EnsureUser($OwnerName)
$Groups = $rootWeb.SiteGroups;

Here’s how to add a Group:

 
$Groups.Add($SPGroupName, $Owner, $web.Site.Owner, “SharePoint Group to hold AD group for Members")

Here’s how to give the group Read access, for example:

 
$GroupToAddRoleTo = $Groups[$SPGroupName]
if ($GroupToAddRoleTo) #if group exists
{
   $MyAcctassignment = New-Object Microsoft.SharePoint.SPRoleAssignment($GroupToAddRoleTo)
   $MyAcctrole = $RootWeb.RoleDefinitions["Read"]
   $MyAcctassignment.RoleDefinitionBindings.Add($MyAcctrole)
   $RootWeb.RoleAssignments.Add($MyAcctassignment)
}

Here’s how to add a Member to a Group:

$UserObj = $rootWeb.EnsureUser($userName);
if ($UserObj) #if it exists
{
   $GroupToAddTo.addUser($UserObj)  
}

Note that a duplicate addition of a member is a null-op, throwing no errors.

Here’s how to remove a member:

$UserObj = $rootWeb.EnsureUser($userName);
if ($UserObj)
{
   $GroupToAddTo.RemoveUser($UserObj)  
}

Here’s how to remove all the members from a given group. This wipes the users from the whole site collection, so use this approach with care and consideration:

$user1 = $RootWeb.EnsureUser($MyUser)
try
{
   $RootWeb.SiteUsers.Remove($MyUser)
   $RootWeb.update()
}

Here’s the full script, with flags to setting the specific actions described above:

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
# uses feedfile to load and create set of SharePoint Groups.
$mylogfile="L:PowerShellongoinglogfile.txt"
$ADMap= Import-Csv "L:PowerShellAD and SP group mapping.csv"
$OwnerName = "DOMAIN\sp2013farm"
$AddGroups = $false;
$AddMembers = $false;  # optionally populates those groups, Comma separated list
$GrantGroupsRead = $true; #grants read at top rootweb level
$RemoveMembers = $false; # optionally  removes Comma separated list of users from the associated group
$WipeMembers = $false;  # wipes the groups clean        
$WipeUsersOutOfSite = $false;  #The Nuclear option. Useful to eliminate AD groups used directly as groups
 
 
 #we do not need a hashtable for this work, but let's load it for extensibility
$MyMap=@{}  #load CSV contents into HashTable
for ($i=0; $i -lt $AD.Count; $i++)
{
    $MyMap[$ADMap[$i].SharePointGroup] = $ADMap[$i].ADGroup;
}
 
# Script changes the letter heading for each site collection
$envrun="Dev"           # selects environment to run in
 
if ($envrun -eq "Dev")
{
$siteUrl = "h ttp://DevServer/sites/"
$mylogfile="L:PowerShellongoinglogfile.txt"
$LoopString = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
$LoopStringArr = $LoopString.Split(“,”)
 
}
elseif ($envrun -eq "Prod")
{
$siteUrl = "ht tp://SharePoint/sites/"
$mylogfile="L:PowerShellongoinglogfile.txt"
$LoopString = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
$LoopStringArr = $LoopString.Split(“,”)
}
else
{
Write-Host "ENVIRONMENT SETTING NOT VALID: script terminating..."
$siteUrl =  $null;
return;
}
 
Write-Host "script starting"
 
$myheader = "STARTING: $(get-date)"
 
foreach ($letter in $LoopStringArr)
{
    $SiteName=$siteurl+$letter
    $Site = New-Object Microsoft.SharePoint.SPSite($SiteName)
 
    write-host $site.Url
    $rootWeb = $site.RootWeb;
    $Owner = $rootWeb.EnsureUser($OwnerName)
    $Groups = $rootWeb.SiteGroups;
 
    for ($ADi = 0; $ADi -lt $ADMap.count; $ADi++)
    {
        $SPGroupName = $ADMap[$ADi].SharePoint Group;
         
        if ($AddGroups)
        {
            if (!$Groups[$SPGroupName]) #no exist, so create
            {
                try
                {
                    $Groups.Add($SPGroupName, $Owner, $web.Site.Owner, “SharePoint Group to hold AD group members")
                }
                catch
                {
                    Write-Host -ForegroundColor DarkRed "Ouch, could not create $($SPgroupName)"
                }
            }
            else
            {
                    Write-Host -ForegroundColor DarkGreen "Already exists: $($SPgroupName)"
            }
        } #endif Add Groups
     
            if ($GrantGroupsRead)
        {
            $GroupToAddRoleTo = $Groups[$SPGroupName]
            if ($GroupToAddRoleTo) #if group exists
            {
                 
                $MyAcctassignment = New-Object Microsoft.SharePoint.SPRoleAssignment($GroupToAddRoleTo)
                $MyAcctrole = $RootWeb.RoleDefinitions["Read"]
                $MyAcctassignment.RoleDefinitionBindings.Add($MyAcctrole)
                $RootWeb.RoleAssignments.Add($MyAcctassignment)
            } #if the group exists in the first place
        } #ActionFlagTrue
     
        if ($AddMembers)
        {
            $GroupToAddTo = $Groups[$SPGroupName]
            if ($GroupToAddTo) #if group exists
            {
                $usersToAdd = $ADMap[$ADi].ADGroup;
                 
                if ($usersToAdd.length -gt 0) #if no users to add, skip
                {
                    $usersToAddArr = $usersToAdd.split("|")
                    foreach ($userName in $usersToAddArr)
                    {
                        try
                        {
                            $UserObj = $rootWeb.EnsureUser($userName);
                            if ($UserObj)
                            {
                                $GroupToAddTo.addUser($UserObj)  #dup adds are a null-op, throwing no errors
                            }
                        }
                        catch
                        {
                        Write-Host -ForegroundColor DarkRed "cannot add user ($($userName) to $($GroupToAddTo)"
                        }
 
                    }
                } #users to add
            } #if the group exists in the first place
        } #ActionFlagTrue
         
        if ($RemoveMembers)
        {
            $GroupToAddTo = $Groups[$SPGroupName]
            if ($GroupToAddTo) #if group exists
            {
                $usersToAdd = $ADMap[$ADi].SharePoint Group;
                 
                if ($usersToAdd.length -gt 0) #if no users to add, skip
                {
                    $usersToAddArr = $usersToAdd.split("|")
                    foreach ($userName in $usersToAddArr)
                    {
                        try
                        {
                            $UserObj = $rootWeb.EnsureUser($userName);
                            if ($UserObj)
                            {
                                $GroupToAddTo.RemoveUser($UserObj)  #dup adds are a null-op, throwing no errors
                            }
                        }
                        catch
                        {
                        Write-Host -ForegroundColor DarkRed "cannot add user ($($userName) to $($GroupToAddTo)"
                        }
 
                    }
                } #users to add
            } #if the group exists in the first place
        } #ActionFlagTrue
         
        if ($WipeMembers)  #Nukes all users in the group
        {
            $GroupToAddTo = $Groups[$SPGroupName]
            if ($GroupToAddTo) #if group exists
            {
                    foreach ($userName in $GroupToAddTo.Users)
                    {
                        try
                        {
                            $UserObj = $rootWeb.EnsureUser($userName);
                            if ($UserObj)
                            {
                                $GroupToAddTo.RemoveUser($UserObj)  #dup adds are a null-op, throwing no errors
                            }
                        }
                        catch
                        {
                        Write-Host -ForegroundColor DarkRed "cannot remove user ($($userName) to $($GroupToAddTo)"
                        }
 
                    }
                 
            } #if the group exists in the first place
        } #ActionFlagTrue
 
if ($WipeUsersOutOfSite)  #Nukes all users in the group
        {
        $usersToNuke = $ADMap[$ADi].ADGroup;
         
        if ($usersToNuke.length -gt 0) #if no users to add, skip
                {
                    $usersToNukeArr = $usersToNuke.split("|")
                    foreach ($MyUser in $usersToNukeArr)
                    {
                        try
                            {
                                try
                                {
                                    $user1 = $RootWeb.EnsureUser($MyUser)
                                }
                                catch
                                {
                                    Write-Host "x1: Failed to ensure user $($MyUser) in $($Site.url)"
                                }
                                 
                                try
                                {
                                    $RootWeb.SiteUsers.Remove($MyUser)
                                    $RootWeb.update()
                                }
                                catch
                                {
                                    Write-Host "x2: Failed to remove $($MyUser) from all users in $($Site.url)"
                                }
                           }
                           catch
                           {
                                Write-Host "x4: other failure for $($MyUser) in $($Site.url)"
                           }
                } #if user is not null
            } #foreach user to nuke
        } #ActionFlagTrue
         
    }
     
     
    $rootWeb.dispose()
    $site.dispose()
     
} #foreach site

Restore SharePoint document timestamp and author from feedfile

Often an administrator during maintenance or checking in a document for a user, “stomps” on a timestamp and who edited the document. In a perfect world we take the time to restore authorship and timestamp. Here’s a script that reads in a CSV of the URL, timestamp and user of any number of documents to correct. it will also try to remove the previous incorrect version, if possible.

 
$actionlist= Import-Csv "C:scriptsNameDateTag.csv"
 
for ($Ai=0; $Ai -lt $actionlist.Count; $Ai++)
    {
    $ActionRow=$ActionList[$Ai]
    $docurl=$ActionRow.DocURL;
    $site = New-Object Microsoft.SharePoint Online.SPSite($docurl)
    $web = $site.OpenWeb()
    $item = $web.GetListItem($docurl)
    $list = $item.ParentList
     
    [System.DateTime] $dat = Get-Date $ActionRow.Timestamp
    $usr = $web.ensureuser($ActionRow.Editor)
     
     $item["Modified"] = $dat;
     $item["Editor"] = $usr;
        $item.Update()
     try { $item.Versions[1].delete() } catch {write-host -foregroundcolor red "Error (1) could not delete old version of $($item['Name'])"}
    }

Use PowerShell to Automate Migration of FTP files to a File Share

A common business process to automate is moving files from an FTP server. To copy the files from an FTP server we first need to get a file listing. The following routine serves nicely:

function Get-FtpDir ($url,$credentials) {
 
$request = [Net.WebRequest]::Create($url)
 
$request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
 
if ($credentials)
 
{
 
$request.Credentials = $credentials
 
}
 
$response = $request.GetResponse()
 
$reader = New-Object IO.StreamReader $response.GetResponseStream()
 
$reader.ReadToEnd()
 
$reader.Close()
 
$response.Close()
 
}

Let’s set some basic parameters for the file migration:

$url = 'ftp://sftp.SomeDomain.com';
$user = 'UserID';
$pass = 'Password'  #single quotes recommended if unusual characters are in use
$DeleteSource = $true;  #controls whether to delete the source files from the FTP Server after copying
$DestLocation = '\DestinationServerAnyLocation';

Let’s start the processing with connecting to the FTP server, getting the file list, and processing:

$credentials = new-object System.Net.NetworkCredential($user, $pass)
 $webclient = New-Object System.Net.WebClient
 $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)  
 
$files=Get-FTPDir $url $credentials
$filesArr = $files.Split("`n")
 
Foreach ($file in ($filesArr )){
    if ($file.length -gt 0) #this actually happens for last file
    {
    $source=$url+$file
    $dest = $DestLocation + $file
    $dest = $dest.Trim()        # this is actually needed, as trailing blank appears in FTP directory listing
    $WebClient.DownloadFile($source, $dest)
    }
}

Let’s now delete the source files, if configured to do so:

$credentials = new-object System.Net.NetworkCredential($user, $pass)
 $webclient = New-Object System.Net.WebClient
 $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)  
 
$files=Get-FTPDir $url $credentials
$filesArr = $files.Split("`n")
 
Foreach ($file in ($filesArr )){
    if ($file.length -gt 0) #this actually happens for last file
    {
    $source=$url+$file
    $dest = $DestLocation + $file
    $dest = $dest.Trim()        # this is actually needed, as trailing blank appears in FTP directory listing
    $WebClient.DownloadFile($source, $dest)
    }
}

Let’s now delete the source files, if configured to do so:

if ($DeleteSource)
{
Foreach ($file in ($filesArr )){
    if ($file.length -gt 0) #this actually happens for last file
    {
    $source=$url+$file
    $ftprequest = [System.Net.FtpWebRequest]::create($source)
    $ftprequest.Credentials =  New-Object System.Net.NetworkCredential($user,$pass)
    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DeleteFile
    $ftprequest.GetResponse()
    }
}
}

That’s it in a nutshell. Just don’t try to move zero length files, and trim the filenames for trailing blanks. Ensure your FTP ports are open, and you are good to go!

Start Your PowerShell Migration Project In A Click

Our technology and wide delivery footprint have created billions of dollars in value for clients globally and are widely recognized by industry professionals and analysts.

How to Download All Attachments for All Tasks in a List

Downloading all attachments for a SharePoint task list Tasks can have attachments. In fact, they can have multiple attachments.

However, these are stored in an “AttachmentCollection”. We can iterate through all items in the task list to download all attachments.

What we do is create a folder for each of the items and name the folder by the ID of the task.

 
$webUrl = "http:.."            # this is the URL of the SPWeb
$library = "Compliance Tasks"  # this is the SPList display name
$tempLocation = "D:\PROD"      # Local Folder to dump files
$s = new-object Microsoft.SharePoint.SPSite($webUrl)   
$w = $s.OpenWeb()        
$l = $w.Lists[$library]   
foreach ($listItem in $l.Items)
  {
     Write-Host "    Content: " $listItem.ID
       $destinationfolder = $tempLocation + "\" + $listItem.ID         
          if($listItem.Attachments.Count -gt 0)
          {
               if (!(Test-Path -path $destinationfolder))       
               {           
                 $dest = New-Item $destinationfolder -type directory         
               }
                     foreach ($attachment in $listItem.Attachments)   
                 {       
                       $file = $w.GetFile($listItem.Attachments.UrlPrefix + $attachment)       
                       $bytes = $file.OpenBinary()               
                       $path = $destinationfolder + "\" + $attachment
                       Write "Saving $path"
                       $fs = new-object System.IO.FileStream($path, "OpenOrCreate")
                       $fs.Write($bytes, 0 , $bytes.Length)   
                       $fs.Close()   
                 }
              }
   }

A folder for each task was created to allow for multiple attachments. The ID was applied to each folder to allow a subsequent script to traverse and upload the attachments by ID or for any linkage preservation.

For how to upload attachments from a task list, please see: Uploading attachments to tasks.

Additional Read
Secure Store Master Key Error

Newsletters