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:
Почему так происходит?