当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 将用户家庭驱动器迁移到 OneDrive for Business

作者:精品下载站 日期:2024-12-14 03:39:46 浏览:14 分类:玩电脑

使用 PowerShell 将用户家庭驱动器迁移到 OneDrive for Business


我们使用 Office 365 已经快三年了,我的待办事项之一是将用户主文件夹迁移到 OneDrive for Business。我去年尝试过,要求每个人自己复制或移动文件,但没有按计划进行。

所以这一次我必须改变我的策略,显然,用户(150+)不会自己移动文件。现在我知道 OneDrive 能够移动已知文件夹(桌面、文档和图片),但这些不是存储在文件服务器上的个人文件。因此,为了移动文件,我们将使用 PowerShell。

服务器存储非常昂贵,因此当每个用户在云中获得无限的存储空间时,为主文件夹购买存储空间就是浪费钱。用户的另一个优势是他们当然可以从每个位置访问他们的文件。

准备主文件夹移动

在移动文件之前,我们需要准备一些东西。我们可以配置一些 GPO 设置、查看 OneDrive 管理设置、我们需要通知用户并且必须部署脚本。

另一个潜在的问题是无效的文件名或长路径。就像 SharePoint 具有 OneDrive for Business 一样,存在一些文件限制:

  • 文件或文件夹名称无效
  • 无效字符 ( ” * : ?/\ |)
  • 最大 15Gb 文件大小
  • 400 个字符的路径限制

请在此处阅读完整的限制列表。

检查 OneDrive for Business 管理中心

在进行此类迁移之前,最好检查一下 Office 365 管理中心。定期添加新设置,您可能希望限制 OneDrive for Business 的共享选项等。

确保设置符合您的业务安全策略。

OneDrive for Business 已知文件夹移动

将已知文件夹(桌面、文档和图片)移动到 OneDrive 是您真正应该启用的功能。它只需要两个 GPO 设置即可进行设置,并且它会自行推出。您的用户可以像平常一样工作和存储文件,但它们会安全地备份在云中。

当我们从完整的 Citrix 环境切换到独立环境时,我关心的问题之一是确保用户数据的安全。当然,他们将与工作相关的文件存储在网络驱动程序上,现在又存储在 SharePoint 上。但我们都知道用户喜欢将与工作相关的文件保留在桌面上,或者他们可能会在不知情的情况下将它们保存在文档文件夹中。

是的,我们需要教育我们的用户,但是通过设置已知的文件夹,我们可以少担心一个问题。

获取您的 Office 365 租户 ID

在配置 GPO 之前,我们需要获取租户 ID。使用 PowerShell,我们只需一个命令即可获取它:

# Connect to the Azure AD
connect-azuread

# result:
Account                Environment Tenant
-------                ----------- ------
[email protected]   AzureCloud  <your tenant ID>

# Optional - Get your tenant details
get-azureadtenantdetail

成功连接到 Azure AD 后,您将在结果中获得租户 ID。如果您没有得到它,您可以随时使用 cmdlet Get-AzureAdTenantDetail,其中 objectid 是您的租户 ID。

配置 GPO

我们需要配置几个 GPO。请记住,如果您立即为整个组织启用此 GPO,您将因 OneDrive 同步而出现巨大的网络流量峰值。因此,您可能想要使用临时安全组来定位 GPO。

创建新的 GPO 并导航到以下策略:

Computer configuration\Policies\Administrative Templates\OneDrive


如果您找不到 OneDrive 组策略,则可能需要先复制 adml 和 admx 文件:

  1. 从工作站上的 %localappdata%\Microsoft\OneDrive\BuildNumber\adm\ 复制 .adml 和 .admx 文件
  2. 将 .admx 粘贴到域控制器的中央存储中:\\domain\sysvol\domain\Policies\PolicyDefinitions
  3. 将 .adml 粘贴到中央存储中正确的语言文件夹中

[玩转系统] 使用 PowerShell 将用户家庭驱动器迁移到 OneDrive for Business


如果您尚未执行此操作,请先启用使用主 Windows 帐户静默配置 OneDrive 策略。这将为用户在首次设置 OneDrive 时节省额外的登录次数。

另外,请确保限制上传带宽,这样一个用户就不会减慢整个互联网连接的速度。将策略设置 OneDrive.exe 使用的上传带宽的最大百分比设置为 70 之类的值。

要移动已知文件夹,请启用策略将 Windows 已知文件夹静默重定向到 OneDrive 并输入租户 ID。如果您愿意,您可以启用用户通知。

还建议启用提示用户将 Windows 已知文件夹移至 OneDrive 策略以支持任何旧版 OneDrive 客户端。

移动用户主文件夹

最后一步,也是我们计划做的,是将用户主文件夹数据移动到他们的 OneDrive for Business 帐户。就我而言,文件存储在文件服务器上。因此每个用户都有一个映射到其文件夹的网络驱动器。

我们需要在 PowerShell 脚本中处理的一些事情是找到用户的 OneDrive 文件夹,检查它是否已连接并在主文件夹中留下指示,以便我们知道它已被复制。我们不会移动文件,只是复制它。我计划稍后将文件移至我们的存档服务器,以便我们始终有备份。

PowerShell 和 OneDrive

要检查 OneDrive 是否已连接,我们需要导入 DLL 文件来读取 OneDrive 状态。从此 GitHub 存储库下载 OneDriveLib.dll。将其放置在每个用户都可以访问的位置,我建议使用 netlogon,但任何其他网络共享也可以工作。

首先,我们导入DLL文件:

Import-Module \contoso.local\netlogon\OnedriveLib.dll

接下来,我们需要获取用户 OneDrive 文件夹的路径。该文件夹的默认位置是用户配置文件文件夹。如果您有多个 OneDrive 文件夹,则可以使用 USERPROFILE 变量,否则,我建议使用 OneDriveCommercial 变量。

#Find OneDrive folder
$path = $env:OneDriveCommercial

# Alternative:
# $path = $env:USERPROFILE + '\OneDrive - LazyAdmin'

要检查我们是否拥有正确的文件夹以及 OneDrive 是否已连接,我们可以获取 OneDrive 状态:

#Get OneDrive status
$ODStatus = Get-ODStatus -ByPath $path

# or in short:
$ODStatus = Get-ODStatus -ByPath $env:OneDriveCommercial

如果已连接,它将返回“UpToDate”或“Syncing”。因此我们检查结果并使用 robocopy 来复制文件。

if ($ODStatus -eq 'UpToDate' -or $ODStatus -eq 'Syncing') {
    #OneDrive is connected
    write-host 'OneDrive connected and found'
    robocopy $env:HOMESHARE $env:OneDriveCommercial /E /SEC
    new-item $env:HOMESHARE -name '_FILES COPIED TO ONEDRIVE.txt' -ItemType 'file' -Value 'Files Copied'
}

正如您在最后一行看到的,我们创建了一个新项目,一个文本文件。稍后,我们运行 PowerShell 脚本来检查在存档之前是否迁移了每个主驱动器文件夹。

结论

在登录用户的上下文模式下运行 PowerShell,您可以为此使用 PDQ Deploy、GPO(登录脚本)或 SCCM。如果您有很多用户,请确保分散部署以限制对网络的影响。

使用 PowerShell 确保检查可用的环境变量。在我第一次尝试制作此脚本时,我尝试使用用户主文件夹的驱动器号。那没有成功。在寻找替代方案时,我注意到我们可以使用 $env:HomeDrive 它将返回驱动器号或 $env:HomeShare 它将返回实际路径。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯