OneDrive For Business(ODFB) Personal Site
怎样创建MySite对于SharePoint On-Premise来说非常容易,但现如今使用On-Premise的越来越少,逐渐走进Cloud,今天就来聊聊如何在Microsoft 365 Online上创建MySite(Personal Site)。
应用场景:
1、从local AD同步到Microsoft 365 Online AzureAD的User;
2、Azure AD已存在的User
3、通过third-part在Azure AD 创建的User
实现方式主要有两种,一是Powershell,另一个就是Code(CSOM):
1、SharePoint Online Powershell (Microsoft.Online.SharePoint.PowerShell)
1)、Install Module:
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
或者Import-Module(推荐)
Import-Module -Name C:\\microsoft.online.sharepoint.powershell.16.0.21116.12000\\Microsoft.Online.SharePoint.PowerShell.psd1
2)、连接SPO,这里介绍通过Credential的方式(username, password)
$username = "admin@contoso.sharepoint.com" $password = "password" $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $userName, $(convertto-securestring $Password -asplaintext -force) Connect-SPOService -Url https://contoso-admin.sharepoint.com -Credential $cred
Notes:如果是windows OS,可以直接使用windows powershell运行此命令;如果是PowerShell 7,Connect-SPOService会报 error:Can you please implement System.Security.Cryptography.SHA256Cng from .net standard? We cant use Connect-AzureAD in Powershell 7 because of this.
Reason:虽然官网说PowerShell 7是crossplatform,但目前仍有些module imcompatible, include: AzureAD Preview, Microsoft.Online.SharePoint.PowerShell...
Resolved : 如果你仍执着于PS7,可以在Import-Module的时候使用-UseWindowsPowerShell,实际上这时Remote Server充当一个policy,调用的是本地的windows powershell。 PowerShell 7.0
3)、执行Request-SPOPersonalSite command,通过user email创建MySite
Request-SPOPersonalSite -NoWait -UserEmails admin@contoso.onmicrosoft.com
PnP PowerShell 跨平台,支持Microsoft 365的SharePoint Online, Microsoft Teams,Microsoft Planner和Microsoft Flow的操作和管理。它是SharePointPnPPowershellOnline的后续模块,SharePointPnPPowershellOnline已经不再维护使用了。
1)、Install-Module
Install-Module -Name PnP.PowerShell
或Import-Module(推荐)
Import-Module -Name C:\\pnp.powershell.1.5.0\\PnP.PowerShell.psd1
2)、Connect-PnPOnline
Connect-PnPOnline -Url https://contoso-admin.sharepoint.com/ -UseWebLogin
Notes: 这里使用-UseWebLogin parameter,会弹出Microsoft 365 web Login页面,使用username, password验证登录。
如果在某种情况下使用Credentials认证,你会发现不一样的惊喜
$username = "admin@contoso.sharepoint.com" $password = "password" $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $userName, $(convertto-securestring $Password -asplaintext -force)
Connect-PnPOnline -Url https://contoso.sharepoint.com -Credentials $cred
Connect-PnPOnline : AADSTS65001: The user or administrator has not consented to use the application with ID
'31359c7f-bd7e-475c-86db-fdb8c937548e' named 'PnP Management Shell'. Send an interactive authorization request for
this user and resource.
如何解决呢?需要用下列命令:
Connect-PnPOnline -Url https://contoso.sharepoint.com -PnPManagementShell
执行之后,你会收到一个code:
接下来在https://microsoft.com/devicelogin 输入刚刚得到的code,用Microsoft accout 验证,这里需要注意,MS account 必须是application admin role,接下来会弹出给PnP PowerShell授权页面,授予PnPPowerShell所需权限就可以操作Tenant了。
3)、创建OneDrive Site
New-PnPPersonalSite -Email admin@contoso.onmicrosoft.com
4)、查看是否创建成功
Get-PnPTenantSite -IncludeOneDriveSites -Filter "Url -like '-my.sharepoint.com/personal/'"
3、 CSOM在NetFramework下的使用
using (ClientContext _context = new ClientContext(tenantAdminUrl)) { try { SharePointOnlineCredentials _creds = new SharePointOnlineCredentials(userName, ConvertToSecureString(password)); _context.Credentials = _creds; _context.ExecuteQuery(); ProfileLoader _profileLoader = ProfileLoader.GetProfileLoader(_context); _profileLoader.CreatePersonalSiteEnqueueBulk(emailIDs); _profileLoader.Context.ExecuteQuery(); } catch(Exception ex) { throw new Exception(ex.Message); } }
Notes: 为什么只介绍CSOM在NetFramework下的使用呢,因为CSOM 不支持NetCore下创建OneDrive Site,Graph官网目前也只提供Get OneDrive Site方法
如果项目是NetCore的呢?怎么办???遇到我你是幸运的,我们可以在NetCore下调用SharePoint Online PowerShell,但必须是运行在windows OS下。
Demo Code:
public void PreProvisionOneDriveSites(string username, string password, string spAdminUrl) { var initial = InitialSessionState.CreateDefault(); using (Runspace runspace = RunspaceFactory.CreateRunspace(initial)) { runspace.Open(); try { using (var ps = PowerShell.Create()) { ps.Runspace = runspace; ps.AddCommand("Import-Module"); ps.AddParameter("-Name", "C:\\microsoft.online.sharepoint.powershell.16.0.21116.12000\\Microsoft.Online.SharePoint.PowerShell.psd1"); ps.AddParameter("-UseWindowsPowerShell"); ps.Invoke(); } using (var ps = PowerShell.Create()) { ps.Runspace = runspace; ps.AddCommand("Connect-SPOService"); ps.AddParameter("-Url", spAdminUrl); ps.AddParameter("-Credential", _pnpService.GetCredential(username, password)); ps.Invoke(); } using (var ps = PowerShell.Create()) { ps.Runspace = runspace; ps.AddCommand("Request-SPOPersonalSite"); ps.AddParameter("-NoWait", null); ps.AddParameter("-UserEmails", "devtest03@M365x677264.onmicrosoft.com"); ps.Invoke(); } } catch (Exception ex) { throw new Exception(ex.Message); } finally { runspace.Close(); runspace.Dispose(); } } }
public PSCredential GetCredential(string username, string password) { var secureString = new SecureString(); Array.ForEach(password.ToCharArray(), secureString.AppendChar); var credential = new PSCredential(username, secureString); return credential; }
OK,就先这样吧,如有任何问题,请下方留言!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)