Undeclare In-Place records
Last week I had a question to remove a document library with items that where records. Then you have an option to remove the record status of every document by hand, this is ok for a few items but in this case there were a few thousand items and only some of them had the status Record. With some searching on the internet I found a code snippet to remove the record status of a document.
[Microsoft.Office.RecordsManagement.RecordsRepository.Records]::UndeclareItemAsRecord($item)
But not all items where a record so I had to check first if the item was a record, this can be done with the following line
$IsRecord = [Microsoft.Office.RecordsManagement.RecordsRepository.Records]::IsRecord($item)
In this library there where too much items to get all of them at once I created a recursive function to query each folder and undeclare the items in it.
Function GetFolder($folder) { $query = new-object -TypeName “Microsoft.SharePoint.SPQuery” $query.Folder = $folder $items = $list.GetItems($query) foreach($item in $items) { $IsRecord = [Microsoft.Office.RecordsManagement.RecordsRepository.Records]::IsRecord($item) if ($IsRecord -eq $true) { [Microsoft.Office.RecordsManagement.RecordsRepository.Records]::UndeclareItemAsRecord($item) } } foreach($fol in $folder.SubFolders) { GetFolder($fol) } }
When the script is done, a timerjob has to run to finalize the process. This timerjob is called “Hold Processing and Reporting”