如何使用 PowerShell 将网络访问的公司文件服务器每晚备份到 SharePoint Online?
How do I use PowerShell to make nightly backups of a network-accessed company file server to SharePoint Online?
我们正在将我们的文件服务器迁移到 SharePoint Online。我已经知道如何使用 SharePoint 迁移工具等将我们的整个驱动器上传到站点。然而,我们不想完全摆脱我们的文件服务器 (S:),因为许多内部应用程序依赖它来上传数据并且不能指向 Internet 站点。我们正在尝试使用 PowerShell 脚本将我们的本地目录与 SharePoint 目录同步,以便 SharePoint 站点可以在新数据添加到 S:\ 驱动器时保持更新。我们使用的脚本能够将整个文件夹复制到 SharePoint,但无法识别子文件夹,也无法区分新文件和 SharePoint 上已有的文件。我们想要一个脚本,可以将我们的驱动器单向同步到站点,包括所有子文件夹和文件,但只上传新的或修改过的文件。我们也不希望将 SharePoint 更改同步回服务器,因为我们正试图减少存储使用量。代码看起来像这样(带有位置的通用占位符):
if((Get-PSSnapin "Microsoft.SharePoint.PowerShell") -eq $null)
{
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
#Script settings
$webUrl = "http://vs-server12"
$docLibraryName = "Documents"
$docLibraryUrlName = "Shared%20Documents"
$localFolderPath = "C:\temp\Docs4SharePoint"
#Open web and library
$web = Get-SPWeb $webUrl
$docLibrary = $web.Lists[$docLibraryName]
$files = ([System.IO.DirectoryInfo] (Get-Item $localFolderPath)).GetFiles()
ForEach($file in $files)
{
#Open file
$fileStream = ([System.IO.FileInfo] (Get-Item $file.FullName)).OpenRead()
#Add file
$folder = $web.getfolder($docLibraryUrlName)
write-host "Copying file " $file.Name " to " $folder.ServerRelativeUrl "..."
$spFile = $folder.Files.Add($folder.Url + "/" + $file.Name, [System.IO.Stream]$fileStream, $true)
write-host "Success"
#Close file stream
$fileStream.Close();
}
#Dispose web
$web.Dispose()
我找到了一种通过 PowerShell one-direction 迁移文件夹、子文件夹和文件的方法。我已经在几个不同的位置测试了这个命令,并尝试了多次,每次都成功了。如果您从 Microsoft 下载 SharePoint 迁移工具,除了 gui,您还可以获得一些专门为该任务设计的新 PowerShell 模块。 Register-SPMTMigration、Add-SPMTTask 和 StartSPMTMigration 等命令允许您指定要推送到 SharePoint 的位置。 PowerShell 模块支持从文件共享中获取数据和从 SharePoint on-premise 中获取文件。当您 运行 命令时,它也只会迁移自上次迁移以来任何编辑过的文件或新文件,这意味着它不会浪费带宽和时间将每个文件重新上传到 SharePoint。这使它成为满足我需求的夜间备份解决方案的完美选择。
您可以使用 pscredentials 使该过程自动化,否则每次 运行 命令时都必须登录 Office。这是我做的一个例子(去掉了个人数据,并设置了两个额外的参数)。
# Define clear text string for username and password
[string]$userName = 'USERNAME'
[string]$userPassword = 'PASSWORD'
# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
# Create PS Credential Object
[pscredential]$Credentials = New-Object System.Management.Automation.PSCredential ($userName, $secStringPassword)
Register-SPMTMigration -SPOCredential $Credentials -MigrateFileVersionHistory $false -DeleteTempFilesWhenMigrationDone $true
Add-SPMTTask -FileShareSource C:\Path -TargetSiteUrl https://sharepoint.sharepoint.com/sites/Test -TargetList Documents
Start-SPMTMigration
我们正在将我们的文件服务器迁移到 SharePoint Online。我已经知道如何使用 SharePoint 迁移工具等将我们的整个驱动器上传到站点。然而,我们不想完全摆脱我们的文件服务器 (S:),因为许多内部应用程序依赖它来上传数据并且不能指向 Internet 站点。我们正在尝试使用 PowerShell 脚本将我们的本地目录与 SharePoint 目录同步,以便 SharePoint 站点可以在新数据添加到 S:\ 驱动器时保持更新。我们使用的脚本能够将整个文件夹复制到 SharePoint,但无法识别子文件夹,也无法区分新文件和 SharePoint 上已有的文件。我们想要一个脚本,可以将我们的驱动器单向同步到站点,包括所有子文件夹和文件,但只上传新的或修改过的文件。我们也不希望将 SharePoint 更改同步回服务器,因为我们正试图减少存储使用量。代码看起来像这样(带有位置的通用占位符):
if((Get-PSSnapin "Microsoft.SharePoint.PowerShell") -eq $null)
{
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
#Script settings
$webUrl = "http://vs-server12"
$docLibraryName = "Documents"
$docLibraryUrlName = "Shared%20Documents"
$localFolderPath = "C:\temp\Docs4SharePoint"
#Open web and library
$web = Get-SPWeb $webUrl
$docLibrary = $web.Lists[$docLibraryName]
$files = ([System.IO.DirectoryInfo] (Get-Item $localFolderPath)).GetFiles()
ForEach($file in $files)
{
#Open file
$fileStream = ([System.IO.FileInfo] (Get-Item $file.FullName)).OpenRead()
#Add file
$folder = $web.getfolder($docLibraryUrlName)
write-host "Copying file " $file.Name " to " $folder.ServerRelativeUrl "..."
$spFile = $folder.Files.Add($folder.Url + "/" + $file.Name, [System.IO.Stream]$fileStream, $true)
write-host "Success"
#Close file stream
$fileStream.Close();
}
#Dispose web
$web.Dispose()
我找到了一种通过 PowerShell one-direction 迁移文件夹、子文件夹和文件的方法。我已经在几个不同的位置测试了这个命令,并尝试了多次,每次都成功了。如果您从 Microsoft 下载 SharePoint 迁移工具,除了 gui,您还可以获得一些专门为该任务设计的新 PowerShell 模块。 Register-SPMTMigration、Add-SPMTTask 和 StartSPMTMigration 等命令允许您指定要推送到 SharePoint 的位置。 PowerShell 模块支持从文件共享中获取数据和从 SharePoint on-premise 中获取文件。当您 运行 命令时,它也只会迁移自上次迁移以来任何编辑过的文件或新文件,这意味着它不会浪费带宽和时间将每个文件重新上传到 SharePoint。这使它成为满足我需求的夜间备份解决方案的完美选择。 您可以使用 pscredentials 使该过程自动化,否则每次 运行 命令时都必须登录 Office。这是我做的一个例子(去掉了个人数据,并设置了两个额外的参数)。
# Define clear text string for username and password
[string]$userName = 'USERNAME'
[string]$userPassword = 'PASSWORD'
# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
# Create PS Credential Object
[pscredential]$Credentials = New-Object System.Management.Automation.PSCredential ($userName, $secStringPassword)
Register-SPMTMigration -SPOCredential $Credentials -MigrateFileVersionHistory $false -DeleteTempFilesWhenMigrationDone $true
Add-SPMTTask -FileShareSource C:\Path -TargetSiteUrl https://sharepoint.sharepoint.com/sites/Test -TargetList Documents
Start-SPMTMigration