Get-AIPFileStatus возвращает ноль при вызове C#

Я вызываю Powershell commend в C# для получения статуса файла. Это работает нормально, но если я вызвал Get-RMSTemplate до того, как Get-AIPFileStatus Powershell.Invoke вернет ноль.

Мои методы для вызова команд Powershell:

    public async Task<IEnumerable<TemplateInfo>> GetRMSTemplates()
    {
        return await Task.Run(() =>
        {
            using (var rs = RunspaceFactory.CreateRunspace())
            {
                rs.Open();
                using (var ps = PowerShell.Create())
                {
                    ps.Runspace = rs;

                    ps.AddScript("$s =" + "Get-RMSTemplate;" + "$s;");

                    try
                    {
                        Collection<PSObject> psOutput = ps.Invoke();
                        var templates = psOutput.Where(p => p != null).Select(p => new TemplateInfo(p));
                        _loggingService.LogPowershellExecution(ps);

                        return templates;
                    }
                    catch (Exception ex)
                    {
                        _loggingService.Log(ex);

                        return null;
                    }
                }
            }
        });
    }



    public async Task<IEnumerable<FileStatus>> GetFileStatuses(IEnumerable<string> files)
    {
        using (var rs = RunspaceFactory.CreateRunspace())
        {
            try
            {
                rs.Open();
                using (var ps = PowerShell.Create(RunspaceMode.NewRunspace))
                {
                    var result = await Task.Run(async () =>
                    {
                        using (token.Register(() =>
                        {
                            ps.Stop();
                        }, true))
                        {
                            ps.Runspace = rs;

                            string scriptContent = string.Join(", ", files.Select(f => $"\"{f}\""));
                            string script = "$s =" + string.Format(Constants.Commands.GetAIPFileStatusCommandTemplate, scriptContent) + "$s;";
                            ps.AddScript(script);

                            try
                            {
                                token.ThrowIfCancellationRequested();

                                var psOutput = ps.Invoke();

                                var statuses = psOutput.Select(p => new FileStatus(p));
                                await _loggingService.LogPowershellExecution(ps);

                                return statuses;

                            }
                            catch (Exception ex)
                            {
                                await _loggingService.Log(ex);

                                return null;
                            }
                        }
                    });

                    token.ThrowIfCancellationRequested();

                    return result;
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                rs.Close();
            }
        }
    }

Команда для получения статуса файла, который будет построен (например): $s =Get-AIPFileStatus -path "C:\Users\User\Desktop\New Microsoft Word Document.docx" | Выберите FileName, IsLabeled, MainLabelName, SubLabelId, MainLabelId;$s;

Исключение, которое происходит:

Инициализатор типа для "Microsoft.InformationProtection.Powershell.AIP.Commandlets.AipBaseCmdlet" вызвал исключение.

Внутреннее исключение:

Приложение попыталось неправильно задать свойство при вызове службы управления правами. Обратитесь в службу поддержки для получения дополнительной помощи. HRESULT: 0x80040210

ОБНОВИТЬ:

То же самое происходит даже в консоли Powershell:

Если я сначала вызвал Get-RMSTemplate, при попытке определить статус файла я получаю следующую ошибку:

В противном случае, если GetAIPFileStatus был вызван первым - следующая ошибка при выполнении GetRMSTemplate:

Почему так происходит?

0 ответов

Другие вопросы по тегам