Поделиться через


Краткое руководство. Предоставление общего доступа к данным и их получение с помощью пакета SDK для Общий доступ к данным Microsoft Purview .NET

Важно!

Эта функция в настоящее время прекращена. Поддержка предоставляется до сентября 2025 г. для миграции на внешний общий доступ к данным Microsoft Fabric.

В этом кратком руководстве вы будете использовать пакет SDK для .NET для предоставления общего доступа к данным и получения общих папок из Azure Data Lake Storage (ADLS 2-го поколения) или учетных записей хранения BLOB-объектов. Эта статья содержит фрагменты кода, которые позволяют создавать, принимать общие папки и управлять ими с помощью Общий доступ к данным Microsoft Purview.

Общие сведения о том, как работает общий доступ к данным, watch этой краткой демонстрации.

Примечание.

Эта функция была обновлена в феврале 2023 г., а пакет SDK и разрешения, необходимые для просмотра общих папок данных и управления ими в Microsoft Purview, изменились.

  • Теперь в Microsoft Purview не требуются разрешения для использования пакета SDK для создания общих папок и управления ими. (Разрешения читателя необходимы для использования портала управления Microsoft Purview для совместного доступа к данным.)
  • Разрешения по-прежнему требуются для учетных записей хранения.

Ознакомьтесь с обновленным пакетом NuGet и обновленными фрагментами кода , чтобы использовать обновленный пакет SDK.

Предварительные условия

Предварительные требования к Microsoft Purview

  • Учетная запись Microsoft Purview. Для тестирования обоих сценариев можно также использовать две учетные записи Microsoft Purview: одну для поставщика данных, а другую — для потребителя данных.
  • Адрес электронной почты для входа в Azure получателя, который можно использовать для отправки приглашения. Псевдоним электронной почты получателя не будет работать.

Предварительные требования к учетной записи хранения Azure

  • Подписка Azure должна быть зарегистрирована для предварительной версии функции AllowDataSharing . (Если вы еще не зарегистрировали эту предварительную версию функции, рассмотрите возможность использования внешнего общего доступа к данным Microsoft Fabric, так как Общий доступ к данным Microsoft Purview будет прекращена в сентябре 2025 года.) Или обратитесь в службу поддержки.
  • Исходная и целевая учетные записи хранения , созданные после завершения этапа регистрации. Обе учетные записи хранения должны находиться в том же регионе Azure, что и друг друга. Обе учетные записи хранения должны быть ADLS 2-го поколения или учетными записями хранилища BLOB-объектов. Учетные записи хранения могут находиться в регионе Azure, отличном от вашей учетной записи Microsoft Purview.
  • Последняя версия пакета SDK для хранилища, PowerShell, CLI и Обозреватель службы хранилища Azure. Версия REST API хранилища должна быть от февраля 2020 г. или более поздней.
  • Учетные записи хранения должны быть зарегистрированы в коллекциях, в которых вы будете отправлять или получать общий ресурс. Если вы используете одну учетную запись Microsoft Purview, это могут быть две разные коллекции или одна и та же коллекция. Инструкции по регистрации см. на страницах источников данных ADLS 2-го поколения или хранилища BLOB-объектов .
  • Если исходная или целевая учетные записи хранения находятся в подписке Azure, отличной от подписки для учетной записи Microsoft Purview, майкрософт. Поставщик ресурсов Purview автоматически регистрируется в подписке Azure, где хранилище данных находится во время добавления поставщика общих ресурсов или потребителя общего ресурса, сопоставляющего ресурс, и только в том случае, если у пользователя есть разрешение на выполнение операции /register/action для поставщика ресурсов. Разрешение включается в роли Участник и Владелец.

    Примечание.

    Эта регистрация требуется только в первый раз при совместном использовании или получении данных в учетной записи хранения в подписке Azure.

Необходимые роли

Ниже приведены необходимые роли для совместного доступа к данным и получения общих папок.

Роли учетной записи хранения Azure Роли коллекции Microsoft Purview
Поставщик данных Одна из следующих ролей:
  • Владелец
  • Владелец данных BLOB-объекта хранилища
Средство чтения данных
Потребитель данных Одна из следующих ролей:
  • Участник
  • Владелец
  • Участник данных BLOB-объектов хранилища
  • Владелец данных BLOB-объекта хранилища
Средство чтения данных

Примечание.

Если вы создали учетную запись Microsoft Purview, все роли будут автоматически назначены корневой коллекции. Дополнительные сведения о коллекции и ролях Microsoft Purview см. в разделе Разрешения Microsoft Purview .

Visual Studio

В этом пошаговом руководстве используется Visual Studio 2022. Процедуры для Visual Studio 2013, 2015, 2017 или 2019 годах могут немного отличаться.

Azure .NET SDK

Скачайте и установите пакет SDK для Azure .NET на компьютере.

Использование субъекта-службы

В фрагментах кода, приведенных в этом руководстве, вы можете выполнить проверку подлинности с помощью собственных учетных данных или субъекта-службы. Чтобы настроить субъект-службу, выполните следующие инструкции.

  1. В разделе Создание приложения Microsoft Entra создайте приложение, представляющее приложение .NET, которое вы создаете в этом руководстве. Для URL-адреса входа можно указать фиктивный URL-адрес, как показано в статье (https://contoso.org/exampleapp).

  2. В разделе Получение значений для входа получите идентификатор приложения, идентификатор клиента и идентификатор объекта и запишите эти значения, которые будут использоваться далее в этом руководстве.

  3. В разделе Сертификаты и секреты получите ключ проверки подлинности и запишите это значение, которое будет использоваться далее в этом руководстве.

  4. назначьте приложению следующие роли:

    Пользователь Роли учетной записи хранения Azure Роли коллекции Microsoft Purview
    Поставщик данных Одна из следующих ролей:
    • Владелец
    • Владелец данных хранилища BLOB-объектов
    Участник Data Share
    Потребитель данных Одна из следующих ролей:
    • Участник
    • Владелец
    • Участник данных BLOB-объектов хранилища
    • Владелец данных хранилища BLOB-объектов
    Участник Data Share

Создание проекта Visual Studio

Затем создайте консольное приложение C# .NET в Visual Studio:

  1. Запустите Visual Studio.
  2. В окне Пуск выберите Создатьконсольное приложениепроекта>. Требуется .NET версии 6.0 или более поздней.
  3. В поле Имя проекта введите PurviewDataSharingQuickStart.
  4. Выберите Создать , чтобы создать проект.

Установка пакетов Nuget

  1. Выберите Инструменты>Консоль диспетчера>пакетов NuGet.

  2. В консоли управления пакетами выполните команду .NET CLI add package , показанную на этой странице, чтобы добавить пакет NuGet: Microsoft.Azure.Analytics.Purview.Sharing.

  3. В области консоли диспетчера пакетов выполните следующие команды, чтобы установить пакеты.

    Install-Package Azure.Analytics.Purview.Sharing -IncludePrerelease
    Install-Package Azure.Identity
    

    Совет

    Если появляется сообщение об ошибке "Не удалось найти проект в..." При попытке выполнить эти команды может потребоваться просто переместить уровень папки вниз в проекте. Попробуйте выполнить команду dir , чтобы получить список папок в каталоге, а затем используйте "cd <name of the project folder>", чтобы переместить уровень вниз в папку проекта. Затем повторите попытку.

Создание отправленного общего ресурса

Этот скрипт создает общую папку данных, которую можно отправить внутренним или внешним пользователям. Чтобы использовать его, обязательно заполните следующие переменные:

  • SenderTenantIdидентификатор клиента Azure для удостоверения отправителя.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой будут отправляться данные.
  • ShareName — отображаемое имя отправленного общего ресурса.
  • ShareDescription — (необязательно) Описание отправленного общего ресурса.
  • SenderStorageKind — blobAccount или AdlsGen2Account.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • SenderStorageContainer — имя контейнера, в котором хранятся данные для общего доступа.
  • SenderPathToShare — путь к файлу или папке к данным для общего доступа.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • SentShareID — (необязательно). Этот параметр должен быть GUID, и текущее значение создает его, но при желании его можно заменить другим значением.
  • ReceiverVisiblePath — (необязательно) Имя общей папки, который будет видеть получатель. В настоящее время задано значение GUID, но GUID не требуется.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Identity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";

    private static string ShareName = "<Share Display Name>";
    private static string ShareDescription = "Share created using the SDK.";
    private static string SenderStorageKind = "<Sender Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";
    private static string SenderStorageContainer = "<Share Data Container Name>";
    private static string SenderPathToShare = "<File/Folder Path To Share>";

    // Set if using Service principal to create shares
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // [OPTIONAL INPUTS] Override Value If Desired.
    private static string SentShareId = Guid.NewGuid().ToString();
    private static string ReceiverVisiblePath = Guid.NewGuid().ToString();

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            /// Replace all placeholder inputs above with actual values before running this program.
            /// This updated Share experience API will create Shares based on callers RBAC role on the storage account.
            /// To view/manage Shares via UX in Purview Studio. Storage accounts need to be registered (one time action) in Purview account with DSA permissions.

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateShare - START");
            await Sender_CreateSentShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Sender_CreateSentShare()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (sentSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Sent Shares Client.");
        }

        // Create sent share
        var inPlaceSentShareDto = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ShareName,
                description = ShareDescription,
                artifact = new
                {
                    storeKind = SenderStorageKind,
                    storeReference = new
                    {
                        referenceName = SenderStorageResourceId,
                        type = "ArmResourceReference"
                    },
                    properties = new
                    {
                        paths = new[]
                        {
                            new
                            {
                                receiverPath = ReceiverVisiblePath,
                                containerName = SenderStorageContainer,
                                senderPath = SenderPathToShare
                            }
                        }
                    }
                }
            },
        };

        Operation<BinaryData> sentShare = await sentSharesClient.CreateOrReplaceSentShareAsync(WaitUntil.Completed, SentShareId, RequestContent.Create(inPlaceSentShareDto));
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;
        return sentShare.Value;
    }
}

Отправка приглашения пользователю

Этот скрипт отправляет пользователю приглашение по электронной почте для общей папки. Если вы хотите отправить приглашение субъекту-службе, см. следующий пример кода. Чтобы использовать его, обязательно заполните следующие переменные:

  • RecipientUserEmailId — Email адрес для отправки приглашения.
  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой будут отправляться данные.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • SentShareDisplayName — имя отправленной общей папки, для которую вы отправляете приглашение.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • InvitationId — (необязательно). Этот параметр должен быть идентификатором GUID, и текущее значение создает его, но при желании его можно заменить другим значением.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string RecipientUserEmailId = "<Target User's Email Id>";

    private static string SenderTenantId = "<Sender Indentity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to send invitation
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    private static string SentShareDisplayName = "<Name of share you're sending an invite for.>";
    private static string InvitationId = Guid.NewGuid().ToString();

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";
    private static int StepCounter = 0;

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoUser - START");
            await Sender_CreateUserRecipient();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoUser - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }

    private static async Task<BinaryData> Sender_CreateUserRecipient()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (string.IsNullOrEmpty(RecipientUserEmailId))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient User Email Id.");
        }

        // Create user recipient and invite
        var invitationData = new
        {
            invitationKind = "User",
            properties = new
            {
                expirationDate = DateTime.Now.AddDays(7).ToString(),
                notify = true, // Send invitation email
                targetEmail = RecipientUserEmailId
            }
        };

        var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("{0}. {1}...", ++StepCounter, "Get a Specific Sent Share");
        Console.ForegroundColor = Console.ForegroundColor;

        var mySentShare = allSentShares.First(sentShareDoc =>
        {
            var doc = JsonDocument.Parse(sentShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == SentShareDisplayName;
        });

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("My Sent Share Id: " + JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString());
        Console.ForegroundColor = Console.ForegroundColor;

        var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

        var sentInvitation = await sentSharesClient.CreateSentShareInvitationAsync(SentShareId, InvitationId, RequestContent.Create(invitationData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentInvitation.Content);
        Console.ForegroundColor = Console.ForegroundColor;

        return sentInvitation.Content;
    }
}

Отправка приглашения в службу

Этот скрипт отправляет субъекту-службе приглашение на общий доступ по электронной почте. Если вы хотите отправить приглашение пользователю, см. предыдущий пример. Чтобы использовать его, обязательно заполните следующие переменные:

  • RecipientApplicationTenantId — идентификатор клиента Azure для принимающего субъекта-службы.
  • RecipientApplicationObjectId — идентификатор объекта для принимающего субъекта-службы.
  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой будут отправляться данные.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • SentShareDisplayName — имя отправленной общей папки, для которую вы отправляете приглашение.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • InvitationId — (необязательно). Этот параметр должен быть идентификатором GUID, и текущее значение создает его, но при желании его можно заменить другим значением.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string RecipientApplicationTenantId = "<Target Application's Tenant Id>";
    private static string RecipientApplicationObjectId = "<Target Application's Object Id>";

    private static string SentShareDisplayName = "<Name of share you're sending an invite for.>";
    private static string InvitationId = Guid.NewGuid().ToString();

    private static string SenderTenantId = "<Sender Indentity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";

    private static string SenderStorageResourceId = "<Resource ID for storage account that has been shared>";

    // Set if using Service principal to send invitation
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoService - START");
            await Sender_CreateServiceRecipient();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoService - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }

    private static async Task<BinaryData> Sender_CreateServiceRecipient()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (!Guid.TryParse(RecipientApplicationTenantId, out Guid _))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient Service Tenant Id.");
        }

        if (!Guid.TryParse(RecipientApplicationObjectId, out Guid _))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient Service Object Id.");
        }

        // Create service recipient
        var invitationData = new
        {
            invitationKind = "Service",
            properties = new
            {
                expirationDate = DateTime.Now.AddDays(5).ToString(),
                targetActiveDirectoryId = RecipientApplicationTenantId,
                targetObjectId = RecipientApplicationObjectId
            }
        };


        var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
        var mySentShare = allSentShares.First(sentShareDoc =>
        {
            var doc = JsonDocument.Parse(sentShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == SentShareDisplayName;
        });

        var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

        var sentInvitation = await sentSharesClient.CreateSentShareInvitationAsync(SentShareId, InvitationId, RequestContent.Create(invitationData));
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentInvitation.Content);
        Console.ForegroundColor = Console.ForegroundColor;
        return sentInvitation.Content;
    }

}

Список отправленных общих папок

Этот скрипт выводит список всех отправленных общих папок для определенного ресурса хранилища. Чтобы использовать его, обязательно заполните следующие переменные:

  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой были отправлены данные.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой были отправлены общие папки.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to list shares
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {


        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
            Console.WriteLine(allSentShares);
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Вывод списка всех получателей общих параметров

Этот скрипт выводит список всех получателей для определенной общей папки. Чтобы использовать его, обязательно заполните следующие переменные:

  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой были отправлены данные.
  • SentShareDisplayName — имя отправленной общей папки, для которой вы перечисляете получателей.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SentShareDisplayName = "<Name of share you're listing recipients for.>";
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to list recipients
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("My Sent Share Id: " + JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString());
            Console.ForegroundColor = Console.ForegroundColor;

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            var allRecipients = await sentSharesClient.GetAllSentShareInvitationsAsync(SentShareId).ToResultList();
            Console.WriteLine(allRecipients);

        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Удаление получателя

Этот скрипт удаляет приглашение к общему доступу и, следовательно, общую папку для получателя. Чтобы использовать его, обязательно заполните следующие переменные:

  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой были отправлены данные.
  • SentShareDisplayName — имя отправленной общей папки, для которую вы удаляете получателя.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • RecipientUserEmailId — Email адрес пользователя, который требуется удалить.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SentShareDisplayName = "<Name of share you're removing a recipient for.>";
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string RecipientUserEmailId = "<Target User's Email Id>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to delete recipients
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            var allRecipients = await sentSharesClient.GetAllSentShareInvitationsAsync(SentShareId).ToResultList();

            var recipient = allRecipients.First(recipient =>
            {
                var doc = JsonDocument.Parse(recipient).RootElement;
                var props = doc.GetProperty("properties");
                return props.TryGetProperty("targetEmail", out JsonElement rcpt) && rcpt.ToString() == RecipientUserEmailId;
            });

            var recipientId = JsonDocument.Parse(recipient).RootElement.GetProperty("id").ToString();

            await sentSharesClient.DeleteSentShareInvitationAsync(WaitUntil.Completed, SentShareId, recipientId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Remove Id: " + JsonDocument.Parse(recipient).RootElement.GetProperty("id").ToString());
            Console.WriteLine("Complete");
            Console.ForegroundColor = Console.ForegroundColor;

        }

        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Удаление отправленного общего ресурса

Этот скрипт удаляет отправленный общий ресурс. Чтобы использовать его, обязательно заполните следующие переменные:

  • SenderTenantId — идентификатор клиента Azure для удостоверения отправителя общей папки.
  • SenderPurviewAccountName — имя учетной записи Microsoft Purview, из которой были отправлены данные.
  • SentShareDisplayName — имя отправленной общей папки, для которой вы перечисляете получателей.
  • SenderStorageResourceIdидентификатор ресурса для учетной записи хранения , из которой будут отправляться данные.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для создания общих папок, задайте для этого параметра значение true.
  • SenderClientId — (необязательно). Если для создания общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • SenderClientSecret — (необязательно). Если для создания общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • SenderPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{SenderPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string SentShareDisplayName = "<Name of share you're removing.>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to delete share
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            await sentSharesClient.DeleteSentShareAsync(WaitUntil.Completed, SentShareId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Remove Id: " + SentShareId);
            Console.WriteLine("Complete");
            Console.ForegroundColor = Console.ForegroundColor;

        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Создание полученной общей папки

Этот скрипт позволяет получить общую папку данных. Чтобы использовать его, обязательно заполните следующие переменные:

  • ReceiverTenantId — идентификатор клиента Azure для пользователя или службы, получающей общие данные.
  • ReceiverPurviewAccountName — имя учетной записи Microsoft Purview, в которой будут получены данные.
  • ReceiverStorageKind — blobAccount или AdlsGen2Account.
  • ReceiverStorageResourceIdидентификатор ресурса для учетной записи хранения , в которой будут получены данные.
  • ReceiverStorageContainer — имя контейнера, в котором будут храниться общие данные.
  • ReceiverTargetFolderName — путь к папке, в которой будут храниться общие данные.
  • ReceiverTargetMountPath — путь подключения, который вы хотите использовать для хранения данных в папке.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для получения общих папок, задайте для этого параметра значение true.
  • ReceiverClientId — (необязательно). Если для получения общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • ReceiverClientSecret — (необязательно). Если для получения общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • ReceivedShareId — (необязательно). Этот параметр должен быть GUID, и текущее значение создаст его, но при желании его можно заменить другим значением.
  • ReceiverVisiblePath — (необязательное) имя, которое вы хотите использовать для пути к полученной общей папке.
  • ReceivedShareDisplayName — (необязательно) Отображаемое имя для полученной общей папки.
  • ReceiverPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{ReceiverPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageKind = "<Receiver Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string ReceiverStorageResourceId = "<Receiver Storage Account Resource Id>";
    private static string ReceiverStorageContainer = "<Container Name To Receive Data Under>";
    private static string ReceiverTargetFolderName = "<Folder Name to Received Data Under>";
    private static string ReceiverTargetMountPath = "<Mount Path to store Received Data Under>";

    //Use if using a service principal to receive a share
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // [OPTIONAL INPUTS] Override Values If Desired.
    private static string ReceivedShareId = Guid.NewGuid().ToString();
    private static string ReceiverVisiblePath = "ReceivedSharePath";

    private static string ReceivedShareDisplayName = "ReceivedShare";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {


            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateReceivedShare - START");
            await Receiver_CreateReceivedShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateReceivedShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Receiver_CreateReceivedShare()
    {

        TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

        ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

        if (receivedSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Received Shares Client.");
        }

        var results = await receivedSharesClient.GetAllDetachedReceivedSharesAsync().ToResultList();
        var detachedReceivedShare = results;

        if (detachedReceivedShare == null)
        {
            throw new InvalidOperationException("No received shares found.");
        }



        var myReceivedShare = detachedReceivedShare.First(recShareDoc =>
        {
            var doc = JsonDocument.Parse(recShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
        });

        var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();


        var attachedReceivedShareData = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ReceivedShareDisplayName,
                sink = new
                {
                    storeKind = ReceiverStorageKind,
                    properties = new
                    {
                        containerName = ReceiverStorageContainer,
                        folder = ReceiverTargetFolderName,
                        mountPath = ReceiverTargetMountPath
                    },
                    storeReference = new
                    {
                        referenceName = ReceiverStorageResourceId,
                        type = "ArmResourceReference"
                    }
                }
            }
        };

        var receivedShare = await receivedSharesClient.CreateOrReplaceReceivedShareAsync(WaitUntil.Completed, ReceivedShareId, RequestContent.Create(attachedReceivedShareData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(receivedShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;

        return receivedShare.Value;
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Перечисление всех полученных общих папок

Этот скрипт выводит список всех полученных общих папок в учетной записи хранения. Чтобы использовать его, обязательно заполните следующие переменные:

  • ReceiverTenantId — идентификатор клиента Azure для пользователя или службы, получающей общие данные.
  • ReceiverPurviewAccountName — имя учетной записи Microsoft Purview, в которой были получены данные.
  • ReceiverStorageResourceIdидентификатор ресурса для учетной записи хранения , в которой был предоставлен общий доступ к данным.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для получения общих папок, задайте для этого параметра значение true.
  • ReceiverClientId — (необязательно). Если для получения общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • ReceiverClientSecret — (необязательно). Если для получения общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • ReceiverPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{ReceiverPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageResourceId = "<Storage Account Resource Id that is housing shares>";

    //Use if using a service principal to list shares
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

            ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

            var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();
            Console.WriteLine(allReceivedShares);
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Обновление полученного общего ресурса

Этот скрипт позволяет обновить расположение хранилища для полученной общей папки. Как и при создании полученного общего ресурса, вы добавляете сведения для учетной записи хранения, в которой должны размещаться данные. Чтобы использовать его, обязательно заполните следующие переменные:

  • ReceiverTenantId — идентификатор клиента Azure для пользователя или службы, получающей общие данные.
  • ReceiverPurviewAccountName — имя учетной записи Microsoft Purview, в которой будут получены данные.
  • ReceiverStorageKind — blobAccount или AdlsGen2Account.
  • ReceiverStorageResourceIdидентификатор ресурса для учетной записи хранения , в которой был предоставлен общий доступ к данным.
  • ReAttachStorageResourceIdидентификатор ресурса для учетной записи хранения , в которой будут получены данные.
  • ReceiverStorageContainer — имя контейнера, в котором будут храниться общие данные.
  • ReceiverTargetFolderName — путь к папке, в которой будут храниться общие данные.
  • ReceiverTargetMountPath — путь подключения, который вы хотите использовать для хранения данных в папке.
  • ReceivedShareDisplayName — отображаемое имя для полученной общей папки.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для получения общих папок, задайте для этого параметра значение true.
  • ReceiverClientId — (необязательно). Если для получения общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • ReceiverClientSecret — (необязательно). Если для получения общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • ReceiverPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{ReceiverPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageKind = "<Receiver Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string ReceiverStorageResourceId = "<Storage Account Resource Id for the account where the share is currently attached.>";
    private static string ReAttachStorageResourceId = "<Storage Account Resource Id For Reattaching Received Share>";
    private static string ReceiverStorageContainer = "<Container Name To Receive Data Under>";
    private static string ReceiverTargetFolderName = "<Folder Name to Received Data Under>";
    private static string ReceiverTargetMountPath = "<Mount Path to Received Data Under>";

    private static string ReceivedShareDisplayName = "<Display name of your received share>";

    //Use if using a service principal to update the share
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: UpdateReceivedShare - START");
            await Receiver_UpdateReceivedShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: UpdateReceivedShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Receiver_UpdateReceivedShare()
    {

        TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

        ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

        if (receivedSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Received Shares Client.");
        }

        var attachedReceivedShareData = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ReceivedShareDisplayName,
                sink = new
                {
                    storeKind = ReceiverStorageKind,
                    properties = new
                    {
                        containerName = ReceiverStorageContainer,
                        folder = ReceiverTargetFolderName,
                        mountPath = ReceiverTargetMountPath
                    },
                    storeReference = new
                    {
                        referenceName = ReAttachStorageResourceId,
                        type = "ArmResourceReference"
                    }
                }
            }
        };

        var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();

        var myReceivedShare = allReceivedShares.First(recShareDoc =>
        {
            var doc = JsonDocument.Parse(recShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
        });

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("My Received Share Id: " + JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString());
        Console.ForegroundColor = Console.ForegroundColor;


        var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();

        var receivedShare = await receivedSharesClient.CreateOrReplaceReceivedShareAsync(WaitUntil.Completed, ReceivedShareId, RequestContent.Create(attachedReceivedShareData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(receivedShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;

        return receivedShare.Value;
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Удаление полученной общей папки

Этот скрипт удаляет полученную общую папку. Чтобы использовать его, обязательно заполните следующие переменные:

  • ReceiverTenantId — идентификатор клиента Azure для пользователя или службы, получающей общие данные.
  • ReceiverPurviewAccountName — имя учетной записи Microsoft Purview, в которой будут получены данные.
  • ReceivedShareDisplayName — отображаемое имя для полученной общей папки.
  • ReceiverStorageResourceIdидентификатор ресурса для учетной записи хранения , в которой был предоставлен общий доступ к данным.
  • UseServiceTokenCredentials — (необязательно). Если вы хотите использовать субъект-службу для получения общих папок, задайте для этого параметра значение true.
  • ReceiverClientId — (необязательно). Если для получения общих папок используется субъект-служба, это идентификатор приложения (клиента) для субъекта-службы.
  • ReceiverClientSecret — (необязательно). Если для получения общих папок используется субъект-служба, добавьте секрет клиента или ключ проверки подлинности.
  • ReceiverPurviewEndPoint — если вы используете классический интерфейс Microsoft purview, используйте $"https://{ReceiverPurviewAccountName}.purview.azure.com"; Если вы используете новый интерфейс Microsoft Purview, используйте https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceivedShareDisplayName = "<Display name of your received share>";

    private static string ReceiverStorageResourceId = "<Storage Account Resource Id for the account where the share is currently attached.>";

    //Use if using a service principal to delete share.
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

            ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

            var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();

            var myReceivedShare = allReceivedShares.First(recShareDoc =>
            {
                var doc = JsonDocument.Parse(recShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
            });

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("My Received Share Id: " + JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString());
            Console.ForegroundColor = Console.ForegroundColor;

            var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();

            await receivedSharesClient.DeleteReceivedShareAsync(WaitUntil.Completed, ReceivedShareId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Delete Complete");
            Console.ForegroundColor = Console.ForegroundColor;
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }
    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

Очистка ресурсов

Чтобы очистить ресурсы, созданные для быстрого запуска, используйте следующие рекомендации.

  1. На портале Microsoft Purview удалите отправленный общий ресурс.
  2. Также удалите полученную общую папку.
  3. После успешного удаления общих папок удалите целевой контейнер и папку Microsoft Purview, созданные в целевой учетной записи хранения при получении общих данных.

Дальнейшие действия