我做了以下事情:
$oldWorkflow="MyOldWorkflow";
$oldAssoc=$list.WorkflowAssociations.GetAssociationByName($oldWorkflow,"en-US");
$list.RemoveWorkflowAssociation($oldAssoc);
之后我可以看到工作流程不再存在。但是在尝试显示工作流程时收到错误之前,每个项目都有工作流程:
Getting Error Message for Exception System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Column 'Reservat' doesn't exist
我从未有过具有该名称的专栏。手动将该列添加到列表后,错误消息更改为:
Application error when access /_layouts/15/Workflow.aspx, Error=Object reference not set to an instance of an object.
有机会解决这个烂摊子吗? (旧的工作流程不再作为WSP存在)
更新: 我仍然可以使用Powershell找到工作流程:
foreach ($wf in $item.Workflows)
if ($wf.ParentAssociation.Name -eq $oldWorkflow)
...
但同时$list.WorkflowAssociations.GetAssociationByName
不返回工作流程
答案 0 :(得分:0)
我解决了这个问题。所有通过谷歌来到这里的人都会注意到:这不是删除工作流程的好方法,但只有在您已经搞砸了SharePoint中的工作流程时才有解决方案。 (像我一样)
$oldWorkflow="MyOldWorkflow";
foreach ($item in $list.Items) {
foreach ($wf in $item.Workflows) {
if ($wf.ParentAssociation.Name -eq $oldWorkflow) {
Write-Host ("[{0}] Workflow '{1}' will be removed" -f $item.Title, $wf.ParentAssociation.Name);
$itemsToAdd.Add($wf);
}
}
}
ForEach($item in $itemsToAdd) {
$man.RemoveWorkflowFromListItem($item);
}