Búsqueda de sitios web

Cómo utilizar PowerShell para eliminar archivos de OneDrive encontrados mediante una búsqueda de contenido


Recientemente, mientras trabajaba en algunas búsquedas de contenido, surgió una pregunta sobre cómo realizar la eliminación selectiva de los documentos de OneDrive encontrados en las búsquedas. Si bien puede eliminar el correo electrónico mediante una acción de búsqueda de contenido, Office 365 no incluye un método para limpiar los documentos de OneDrive encontrados mediante búsquedas de contenido.

La pregunta es cómo eliminar algunos, pero no todos, los documentos de OneDrive encontrados mediante una búsqueda de contenido. Este artículo muestra cómo usar PowerShell para ver el conjunto de archivos y luego seleccionar los archivos que desea eliminar.

¿Tiene curiosidad por saber cómo puede utilizar PowerShell para administrar políticas de acceso condicional (CA)? Damian revisa los ocho cmdlets de este artículo.

Búsqueda de contenido base

Primero, necesitamos ejecutar una búsqueda de contenido. En el Centro de cumplimiento de Microsoft 365, vaya a la sección Búsqueda de contenido y cree una nueva búsqueda. Ingrese "Exchange" como palabra clave para la búsqueda y elija las ubicaciones de búsqueda de OneDrive de destino. La búsqueda comienza y crea un conjunto de resultados de vista previa. Dependiendo del número de ubicaciones de búsqueda, esto podría tardar algún tiempo en completarse.

Una vez que se completa la búsqueda, podemos examinar los resultados de la vista previa. Una vez que esté satisfecho de que la búsqueda encuentre los elementos correctos, genere un informe de los resultados seleccionando "Exportar informe":

Una vez exportado el informe, podemos descargar el archivo CSV generado:

La descarga del informe requiere una clave (Figura 3), que se puede copiar de los detalles de la búsqueda y pegar en la utilidad Microsoft Export:

Ahora que se completó la búsqueda y se descargó el informe, podemos utilizar ese archivo CSV para determinar qué archivos de OneDrive eliminar.

Revisión de resultados y eliminación selectiva de OneDrive

La siguiente tarea es presentar los datos de exportación del archivo CSV de forma utilizable. Para hacer esto, usamos PowerShell para agrupar los archivos por dirección de OneDrive del usuario y permitir que el revisor seleccione uno, algunos, todos o ninguno de los archivos para eliminarlos. Usamos cmdlets de los módulos SharePoint Online y PNP PowerShell para realizar operaciones de archivos OneDrive con los permisos necesarios para ejecutar estas tareas. El script completo está disponible para descargar aquí desde GitHub. Ahora voy a resaltar algunas partes importantes.

Archivo CSV
Nuestro archivo CSV descargado tiene un formato como el que se muestra a continuación:

Proceso general del script
El archivo de exportación no está ordenado ni tiene un formato que podamos usar, por lo que primero debemos procesar los datos para generar algo más utilizable. En el siguiente código solicitamos el nombre del archivo CSV, extraemos elementos clave (Usuario y Archivo) del archivo de entrada y almacenamos estos datos en una variable llamada $Table. Finalmente, ordene la variable $Table por Usuario y almacene los resultados en una variable llamada $SortedResults:

$CSVName = Read-Host "Please specify a CSV file to import [i.e. Results.csv]"
$CSV = Import-Csv $CSVName
$Table = Foreach ($Line in $CSV) {
    $User = $Line.Location
    $FullFilePath = $Line."Original Path"
    $Type = $Line.Type
    $File = $FullFilePath.Split('/')[-1]
    New-Object -TypeName PSCustomObject -Property @{
        User = $User
        File = $File
    }
}
$SortedResults = $Table | Sort-Object User,File

Conectarse a SharePoint Online
Ahora que tenemos buenos datos, podemos conectarnos a SharePoint Online. Asegúrese de utilizar el nombre de inquilino correcto para conectarse al punto final de administración de SharePoint Online (entre paréntesis, primera línea de código):

$SharePointURL = 'https://<tenant domain>-admin.sharepoint.com'
$GAUPN = Read-Host "Please enter your Global Admin account UPN"
$Password = Read-Host -assecurestring "Please password for Global Admin account specified above"
$Credentials = New-Object -typeName System.Management.Automation.PSCredential -argumentlist $GAUPN, $Password
Connect-SPOService -Url $SharePointURL -Credential $Credentials

Una vez conectados, podemos comenzar a procesar el archivo CSV. Usamos algunas reglas para procesar datos a medida que recorremos los elementos del archivo. Primero, el bucle es un bucle foreach, donde cada línea se lee por separado y se toman acciones dentro de cada bucle. En general, los pasos del script que utilizaremos son:

  1. El bucle Foreach agrupa cada línea de un único usuario en una variable.
  2. Se otorgan permisos al operador del script (administrador de la colección de sitios) para que el script realice sus tareas.
  3. Una vez que se concede el permiso, se realiza una conexión a la cuenta OneDrive del usuario.
  4. Mientras está conectado, el ID del archivo se consulta y almacena según sea necesario para identificar el archivo que se va a eliminar.
  5. Cuando se detecta un cambio de usuario, la lista de archivos actual sigue estos pasos.
    a. Paso 1: mostrar archivos con Out-GridView
    b. Paso 2: utilice el resultado de Out-GridView para comenzar a eliminar archivos.
    c. Paso 3: permita que el operador no elimine el archivo (opción ¿está seguro?)
  6. Después de que se procesan los archivos de un usuario, el bucle Foreach pasa al siguiente usuario
  7. Los pasos 1 a 6 continúan hasta que se detecte el último usuario (última línea del archivo CSV)
  8. El guión sale.

Acceder al OneDrive de un usuario
Para eliminar archivos de la cuenta OneDrive de un usuario, debemos conectarnos directamente a su URL de OneDrive (en el archivo CSV). Una vez conectado, otorgamos permiso de administrador de la colección de sitios. Estas dos tareas se pueden completar con el siguiente script:

Connect-PnPOnline -Url $UserOneDrive -Credentials $Credentials
Set-SPOUser -Site $UserOneDrive -LoginName $GAUPN -IsSiteCollectionAdmin $True

Out-GridView y Remove-PnPItemListItem
Para el paso 5 del proceso general enumerado anteriormente, debemos mostrar los archivos al operador, almacenar los archivos elegidos y luego permitir que el usuario decida sobre el archivo. eliminación. Primero, mostrando el archivo usando Out-GridView:

$FilesToRemove = $RemovalList | Out-GridView -PassThru

• $FilesToRemove: (¿una rutina para?) almacenará cualquier archivo seleccionado por el operador.
• $RemovalList: lista original de todos los archivos del CSV
• -PassThru: esta opción permite la devolución de opciones seleccionadas del cmdlet Out-GridView, que luego se almacenarán en la variable $FilesToRemove.

Después de seleccionar los archivos, se enumera cada uno de ellos y el operador puede elegir si el archivo debe eliminarse:

Write-Host "Removing $File from $User with ID of $SubID ..." -ForegroundColor Yellow
$ConfirmRemoval = Read-Host " Confirm file removal [y or n] "
If ($ConfirmRemoval -eq 'y') {
Remove-PnPListItem -List Documents -Identity $SubID
} Else {
Write-Host " *** FILE WAS NOT DELETED **" -ForegroundColor Yellow
}

Vista del operador
Ahora que hemos examinado algunas secciones de código importantes, revisemos el proceso general para la eliminación de archivos. Después de descargar el archivo CSV y procesar su contenido, podemos usarlo como base para eliminar archivos. Cuando ejecutamos el script, lo primero es conectarnos al inquilino de destino. También se nos solicita el archivo CSV de resultados que descargamos de la búsqueda. Luego, el script muestra los archivos para revisar y/o eliminar usando el cmdlet Out-GridView:

Después de seleccionar algunos archivos, podemos decidir eliminarlos o no, a continuación se muestran algunos ejemplos:

Requisitos previos
Antes de poder ejecutar el script, debe dar su consentimiento para utilizar el módulo PnP PowerShell porque utiliza autenticación OAuth. Si no otorgamos el consentimiento para la aplicación, se mostrará un error como este:

Connect-PnPOnline : AADSTS65001: The user or administrator has not consented to use the application with ID
'31359c7f-bd7e-475c-86db-fdb8c937548e' named 'PnP Management Shell'. Send an interactive authorization request for this user and resource.

Para utilizar el módulo PnP, debemos seguir estos pasos:

$URL = 'https://<tenant>-my.sharepoint.com/personal/user_yourdomain_com'
Connect-PnPOnline -Url $Url -PnPManagementShell 

Al ejecutar estos cmdlets se mostrará un código de acceso de un solo uso para ingresar en https://microsoft.com/devicelogin. Luego podemos ingresar y elegir una cuenta con derechos para otorgar permiso:

Luego necesitaremos aprobar el consentimiento para los cmdlets:

La gran lista de permisos se debe al hecho de que el módulo PNP necesitará acceso a varias cargas de trabajo en un inquilino, desde Teams hasta SharePoint e incluyendo también Planner y Flow. Como tal, el módulo necesitará una amplia gama de permisos para funcionar. Recuerde que este consentimiento sólo permite utilizar el módulo en un inquilino y que su uso puede ser restringido.

Después de otorgar el consentimiento, podemos usar el módulo PnP para conectarnos a OneDrive y administrar archivos.

¿Por qué shell de gestión de PNP?

PNP Management Shell es un potente conjunto de más de 500 cmdlets de PowerShell que permite el acceso a objetos de SharePoint Online, incluida la capacidad de manipular archivos almacenados en cuentas de OneDrive. También podemos eliminar la etiqueta de registros utilizando el cmdlet Clear-PnPListItemAsRecord. Esta acción es la versión de PowerShell de seleccionar un elemento en una biblioteca de SharePoint y elegir la opción "No declarar registro" que está disponible en SharePoint Online.

Revisión de cuentas

Desde una perspectiva de seguimiento general, SharePoint Online captura detalles de cualquier archivo eliminado por el script en el registro de auditoría de Office 365. Busque "Archivo eliminado" y los detalles de los archivos eliminados aparecerán en el registro.

Conclusión

El script que se describe aquí está diseñado para manejar el tedioso proceso de tomar datos de informes para una búsqueda de contenido y usarlos para impulsar un proceso de eliminación de documentos. Actualmente no existe ningún equivalente en el Centro de cumplimiento de Microsoft 365. Para ejecutar el script, necesita cmdlets de Exchange Online (conectado al punto final de cumplimiento), SharePoint Online y los módulos PnP. Por último, un administrador debe otorgar consentimiento para usar los cmdlets del módulo PnP de SharePoint en el inquilino. Todas estas condiciones deben cumplirse antes de trabajar con este script.

Código de muestra

Para ayudarlo a crear su propio código para esta solución, se publicó en GitHub un código de muestra para la operación de esta solución.

Utilice este código con cuidado, ya que realiza varias tareas que solo deben realizar quienes comprendan sus implicaciones:

  • Otorgue acceso al Shell de administración de PNP a su inquilino
  • Uso de Remove-PnPListItem, que eliminó archivos del OneDrive de un usuario
  • Concesión de permisos SiteCollectionAdmin al OneDrive de un usuario

Artículos relacionados