使用 Powershell 调用 Graph Api 上传文件夹和文件
Using Powershell to call the Graph Api to upload Folders and Files
所以我正在编写这个脚本,它将允许我将文件夹和文件上传到 SharePoint 文档库。目前,我的本地计算机上有一个文件夹 (TEST),其中包含一些其他文件夹,其中包含文件。我可以毫无问题地将文件夹和文件上传到 SharePoint,但我很难将它们放入正确的文件结构中。下面我将在 SharePoint 站点中创建我需要的所有文件夹。我调用图表 API,它会在根目录下创建所有文件夹,但其中一些文件夹不属于根目录,而是存在于其他一些文件夹中。我知道我需要
更改 $CreateFolderURL,但我不确定如何跟踪哪个文件夹或文件属于哪个文件夹。基本上我想在 SharePoint 库中复制相同的本地子目录结构
$Files = Get-ChildItem "C:\Users\Mark\Documents\TestUpload" -Recurse
write-host $Files
AllFolders($Files)
function AllFolders($Files){
$CreateFolderURL = "https://graph.microsoft.com/v1.0/drives/(DriveID)/items/root/children"
foreach($file in $Files){
#check if folder or file
if (! $file.PSIsContainer)
{
write-host "File"
}
else{
$uploadFolderRequestBody = @{
name= "$file"
folder = @{}
"@microsoft.graph.conflictBehavior"= "rename"
} | ConvertTo-Json
Invoke-RestMethod -Headers $header -Method Post -Body $uploadFolderRequestBody -ContentType "application/json" -Uri $CreateFolderURL
}
}
}
这没有经过测试。这样做的目的似乎是创建子目录结构。
如果您使用的是 PowerShell 5.1 或更高版本,Get-ChildItem 可以指定一个 -Directory
开关以避免检查 PSIsContainer。关键是在设置$CreateFolderURL
.
时将本地基目录路径替换成URL路径
AllFolders('C:\Users\Mark\Documents\TestUpload')
function AllFolders($BaseDirectory) {
$Directories = Get-ChildItem -Path $BaseDirectory -Recurse -Directory
foreach ($Directory in $Directories) {
$CreateFolderURL = 'http://graph.microsoft.com/v1.0/drives/(DriveID)/items/root/' +
$_.FullName.Replace($BaseDirectory,'').Replace('\','/')
$uploadFolderRequestBody = @{
name= "$file"
folder = @{}
"@microsoft.graph.conflictBehavior"= "rename"
} | ConvertTo-Json
Invoke-RestMethod -Headers $header -Method Post -Body $uploadFolderRequestBody `
-ContentType "application/json" -Uri $CreateFolderURL
}
}
所以我正在编写这个脚本,它将允许我将文件夹和文件上传到 SharePoint 文档库。目前,我的本地计算机上有一个文件夹 (TEST),其中包含一些其他文件夹,其中包含文件。我可以毫无问题地将文件夹和文件上传到 SharePoint,但我很难将它们放入正确的文件结构中。下面我将在 SharePoint 站点中创建我需要的所有文件夹。我调用图表 API,它会在根目录下创建所有文件夹,但其中一些文件夹不属于根目录,而是存在于其他一些文件夹中。我知道我需要 更改 $CreateFolderURL,但我不确定如何跟踪哪个文件夹或文件属于哪个文件夹。基本上我想在 SharePoint 库中复制相同的本地子目录结构
$Files = Get-ChildItem "C:\Users\Mark\Documents\TestUpload" -Recurse
write-host $Files
AllFolders($Files)
function AllFolders($Files){
$CreateFolderURL = "https://graph.microsoft.com/v1.0/drives/(DriveID)/items/root/children"
foreach($file in $Files){
#check if folder or file
if (! $file.PSIsContainer)
{
write-host "File"
}
else{
$uploadFolderRequestBody = @{
name= "$file"
folder = @{}
"@microsoft.graph.conflictBehavior"= "rename"
} | ConvertTo-Json
Invoke-RestMethod -Headers $header -Method Post -Body $uploadFolderRequestBody -ContentType "application/json" -Uri $CreateFolderURL
}
}
}
这没有经过测试。这样做的目的似乎是创建子目录结构。
如果您使用的是 PowerShell 5.1 或更高版本,Get-ChildItem 可以指定一个 -Directory
开关以避免检查 PSIsContainer。关键是在设置$CreateFolderURL
.
AllFolders('C:\Users\Mark\Documents\TestUpload')
function AllFolders($BaseDirectory) {
$Directories = Get-ChildItem -Path $BaseDirectory -Recurse -Directory
foreach ($Directory in $Directories) {
$CreateFolderURL = 'http://graph.microsoft.com/v1.0/drives/(DriveID)/items/root/' +
$_.FullName.Replace($BaseDirectory,'').Replace('\','/')
$uploadFolderRequestBody = @{
name= "$file"
folder = @{}
"@microsoft.graph.conflictBehavior"= "rename"
} | ConvertTo-Json
Invoke-RestMethod -Headers $header -Method Post -Body $uploadFolderRequestBody `
-ContentType "application/json" -Uri $CreateFolderURL
}
}