如何在ProjectOnline中强制签入并发布已被他人签出的项目?
在Project Online中实现管理员强制签入并发布已签出项目
针对你遇到的场景,在Project Online的CSOM(客户端对象模型)中,可以通过以下步骤实现管理员强制签入其他用户签出的项目并完成发布:
核心思路
管理员需具备Project Server Administrator权限,先获取已签出项目的草稿实例,调用CheckIn方法并传入force=true参数完成强制签入,随后执行发布操作。
完整PowerShell代码示例
# 配置PWA站点信息与管理员账号 $PWAUrl = "https://your-pwa-site.sharepoint.com/sites/pwa" $adminUsername = "admin@your-domain.onmicrosoft.com" $adminPassword = ConvertTo-SecureString "your-admin-password" -AsPlainText -Force # 初始化Project Online上下文 $projContext = New-Object Microsoft.SharePoint.Client.ProjectContext($PWAUrl) $projContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($adminUsername, $adminPassword) # 指定目标项目的GUID $targetProjId = [System.Guid]"替换为你的项目ID" try { # 获取目标项目引用 $project = $projContext.Projects.GetById($targetProjId) $projContext.Load($project) $projContext.ExecuteQuery() # 获取已签出的草稿项目实例 $draftProject = $project.Draft $projContext.Load($draftProject) $projContext.ExecuteQuery() # 强制签入项目(force参数设为$true) $draftProject.CheckIn($true, "管理员强制签入,用于后续发布操作") $projContext.ExecuteQuery() Write-Host "项目已成功强制签入" # 重新加载草稿项目以同步状态 $projContext.Load($draftProject) $projContext.ExecuteQuery() # 发布项目($true表示等待发布完成) $draftProject.Publish($true) $projContext.ExecuteQuery() Write-Host "项目已成功发布" } catch { Write-Host "操作失败: $_" }
关键细节说明
- 权限要求:执行脚本的账号必须拥有Project Server Administrator权限,否则无法执行强制签入操作。
- 状态判断(可选):如果需要区分项目是否已签出,可以先加载项目的
CheckoutStatus属性做判断:$projContext.Load($project, p => p.CheckoutStatus) $projContext.ExecuteQuery() if ($project.CheckoutStatus -eq [Microsoft.SharePoint.Client.Project.Server.Enums.CheckoutStatus]::CheckedOut) { # 执行强制签入逻辑 } else { # 执行常规签出-发布逻辑(即你原有的代码) } - 异常处理:脚本中加入
try-catch块可以捕获权限不足、项目不存在或状态异常等问题,便于排查。
内容的提问来源于stack exchange,提问作者JakeUT
相关产品推荐
相关产品推荐

