Nota: La integración de PowerShell requiere una suscripción Pro o Enterprise de ShareGate Migrate. No está disponible en el plan Essentials.
Para evitar ingresar tus credenciales en cada conexión dentro de una instrucción de bucle foreach con Browser authentication y Modern authentication, puedes usar el parámetro de PowerShell -UseCredentialsFrom para crear una única conexión y reutilizar las credenciales de esa conexión en tu script.
-UseCredentialsFrom
Para ilustrar cómo funciona -UseCredentialsFrom, aquí tienes un script de conexión básico:
# Connect to the first SharePoint site using browser authentication and store the connection
$connection = Connect-Site -Url "http://mytenant/sites/mysitecollection1" -ModernAuth
# Use the stored credentials to connect to the second SharePoint site
Connect-Site -Url "http://mytenant/sites/mysitecollection2" -UseCredentialsFrom $connection
# Use the same stored credentials to connect to the third SharePoint site
Connect-Site -Url "http://mytenant/sites/mysitecollection3" -UseCredentialsFrom $connection
Cuando ejecutas este script, se abrirá una ventana del navegador para que te conectes a mysitecollection1. Una vez establecida la conexión, el script usará automáticamente esa primera conexión para conectarse a mysitecollection2 y mysitecollection3.
Cómo usar -UseCredentialsFrom con un bucle foreach
Una instrucción de bucle foreach normalmente usa llaves para repetir los comandos de conexión y copia en cada fila de un archivo CSV con la aplicación. Aquí tienes un ejemplo:
# Import the Sharegate module
Import-Module ShareGate
# Define the path to the CSV file containing site information
$csvFile = "C:\CSV\CopySites.csv"
# Import the CSV file into a table using a comma as the delimiter
$table = Import-Csv $csvFile -Delimiter ","
# Define source site credentials
$srcUsername = "sourceusername"
$srcPassword = ConvertTo-SecureString 'sourcepassword' -AsPlainText -Force
# Connect to the destination site using browser authentication and store the connection
$dstsiteConnection = Connect-Site -Url "https://tenantname.sharepoint.com/sites/sitename" -Browser
# Declare variables for source and destination sites
Set-Variable -Name srcSite
Set-Variable -Name dstSite
# Loop through each row in the CSV table and copy sites from source to destination
foreach ($row in $table) {
# Clear any existing variable values for source and destination sites
Clear-Variable -Name srcSite
Clear-Variable -Name dstSite
# Connect to the source site using credentials
$srcSite = Connect-Site -Url $row.SourceSite -Username $srcUsername -Password $srcPassword
# Connect to the destination site using the stored credentials from the browser connection
$dstSite = Connect-Site -Url $row.DestinationSite -UseCredentialsFrom $dstsiteConnection
# Copy the source site to the destination site with merging and subsites included
Copy-Site -Site $srcSite -DestinationSite $dstSite -Merge -Subsites
}
Cuando ejecutas este script, se te solicita que ingreses tus credenciales en una ventana del navegador antes de la instrucción foreach.
La conexión se almacena en la variable $dstsiteConnection, que se reutiliza en cada iteración de -UseCredentialsFrom $dstsiteConnection dentro del bucle.
Esto garantiza que no necesites volver a ingresar tus credenciales para cada sitio que se copie.
Nota: Evita usar cualquiera de las URL que aparecen en tu CSV para la variable $dstsiteConnection. Si usas una de las URL de tu lista, el comando Clear-Variable borrará tus credenciales.
Reutiliza una conexión guardada entre sesiones
El parámetro -UseCredentialsFrom reutiliza una conexión dentro del mismo script. Para reutilizar una conexión entre sesiones distintas, guárdala en Connection manager con -SaveConnection cuando te conectes, y luego recupérala más adelante con Get-SharePointConnection y pásala a Connect-Site o Connect-Tenant usando -UseConnection.
$connection = Get-SharePointConnection -Id 01c0ebab-a17e-4ae3-9caf-ba09f05f2970
Connect-Site -Url "http://mytenantdomain/sites/mysitecollection" -UseConnection $connection
Para más detalles, consulta Get-SharePointConnection.
Este artículo fue traducido con inteligencia artificial. En caso de duda, consulta la versión original en inglés.
