Краткое руководство. Предоставление общего доступа к данным и их получение с помощью пакета 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 | |
---|---|---|
Поставщик данных | Одна из следующих ролей:
|
Средство чтения данных |
Потребитель данных | Одна из следующих ролей:
|
Средство чтения данных |
Примечание.
Если вы создали учетную запись Microsoft Purview, все роли будут автоматически назначены корневой коллекции. Дополнительные сведения о коллекции и ролях Microsoft Purview см. в разделе Разрешения Microsoft Purview .
Visual Studio
В этом пошаговом руководстве используется Visual Studio 2022. Процедуры для Visual Studio 2013, 2015, 2017 или 2019 годах могут немного отличаться.
Azure .NET SDK
Скачайте и установите пакет SDK для Azure .NET на компьютере.
Использование субъекта-службы
В фрагментах кода, приведенных в этом руководстве, вы можете выполнить проверку подлинности с помощью собственных учетных данных или субъекта-службы. Чтобы настроить субъект-службу, выполните следующие инструкции.
В разделе Создание приложения Microsoft Entra создайте приложение, представляющее приложение .NET, которое вы создаете в этом руководстве. Для URL-адреса входа можно указать фиктивный URL-адрес, как показано в статье (
https://contoso.org/exampleapp
).В разделе Получение значений для входа получите идентификатор приложения, идентификатор клиента и идентификатор объекта и запишите эти значения, которые будут использоваться далее в этом руководстве.
В разделе Сертификаты и секреты получите ключ проверки подлинности и запишите это значение, которое будет использоваться далее в этом руководстве.
назначьте приложению следующие роли:
Пользователь Роли учетной записи хранения Azure Роли коллекции Microsoft Purview Поставщик данных Одна из следующих ролей: - Владелец
- Владелец данных хранилища BLOB-объектов
Участник Data Share Потребитель данных Одна из следующих ролей: - Участник
- Владелец
- Участник данных BLOB-объектов хранилища
- Владелец данных хранилища BLOB-объектов
Участник Data Share
Создание проекта Visual Studio
Затем создайте консольное приложение C# .NET в Visual Studio:
- Запустите Visual Studio.
- В окне Пуск выберите Создатьконсольное приложениепроекта>. Требуется .NET версии 6.0 или более поздней.
- В поле Имя проекта введите PurviewDataSharingQuickStart.
- Выберите Создать , чтобы создать проект.
Установка пакетов Nuget
Выберите Инструменты>Консоль диспетчера>пакетов NuGet.
В консоли управления пакетами выполните команду .NET CLI add package , показанную на этой странице, чтобы добавить пакет NuGet: Microsoft.Azure.Analytics.Purview.Sharing.
В области консоли диспетчера пакетов выполните следующие команды, чтобы установить пакеты.
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;
}
}
Очистка ресурсов
Чтобы очистить ресурсы, созданные для быстрого запуска, используйте следующие рекомендации.
- На портале Microsoft Purview удалите отправленный общий ресурс.
- Также удалите полученную общую папку.
- После успешного удаления общих папок удалите целевой контейнер и папку Microsoft Purview, созданные в целевой учетной записи хранения при получении общих данных.