Búsqueda de sitios web

Buscar y reemplazar ID de usuario en formularios de SharePoint InfoPath usando PowerShell


Requisito: Reemplazar ID de usuario en formularios de InfoPath.

Un poco de historia: la cuenta de usuario de un usuario en particular cambió en Active Directory y en SharePoint, ejecutamos el cmdlet Move-SPUser para acomodar el cambio de nombre de cuenta SAM del usuario. Sin embargo, muchas bibliotecas de formularios de InfoPath tienen numerosos formularios de InfoPath con una identificación de usuario antigua. ¡Por supuesto, Move-SPUser no afecta a InfoPath Forms!

Script de PowerShell para buscar y reemplazar la identificación del usuario en formularios XML de InfoPath:

Este script de PowerShell recorre en iteración todos los formularios de InfoPath en una determinada colección de sitios, analiza y reemplaza un ID de usuario determinado de todos los formularios.


Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Configuration Parameters
$SiteCollURL="https://intranet.crescent.com"

#Old and New User IDs - CASE SENSITIVE!
$OldUserID="<pc:AccountId>i:0#.w|Crescent\JohnA</pc:AccountId>"
$NewUserID="<pc:AccountId>i:0#.w|Crescent\JonhAbraham</pc:AccountId>"

#Get all webs in the site collection
$WebsColl = Get-SPSite $SiteCollURL | Get-SPWeb -Limit All

#Iterate through each web
foreach($web in $WebsColl)
{
    Write-host "Processing web:"$web.Url
    
    #Get all InfoPath Form Libraries in the web
    $InfoPathLibs = $web.lists | where { $_.BaseType -eq "DocumentLibrary" -and $_.BaseTemplate -eq "XMLForm"} 

    #Loop through each InfoPath form library and Forms (.xml)
    Foreach($Library in $InfoPathLibs)
    {
        Foreach($Item in $Library.Items)
        {
            # Load the contents of the InfoPath Form
            $File = $Item.File
            $Data = [System.Text.Encoding]::ASCII.GetString($File.OpenBinary())
            
            #Check if the File has Old ID
            if($data.Contains($OldUserID))
            {
                $Data = $Data.Replace($OldUserID, $NewUserID)
                $Data = $Data.Replace("???","") #special characters fix!
                $File.SaveBinary([System.Text.Encoding]::ASCII.GetBytes($Data))

                Write-host "InfoPath XML File updated at $($web.URL)/$($Item.File.URL)"
            }
        }
    }
}

Artículos relacionados