Запуск Poweshell-Задание с учетной записи службы с помощью SailPoint IQService

#windows #powershell #active-directory

Вопрос:

Итак, в этом вопросе есть несколько факторов, поэтому вот они:

  • SailPoint 8.2 и IQService 8.2
  • Windows Server 2016
  • Учетная запись службы(Администратор домена)
  • Интерактивная учетная запись пользователя (администратор домена)
  • Powershell 5.1 сборка 14393 версия 4583

Итак, мы имеем дело с тем, что SailPoint выполняет правило на своем конце, отправляя некоторую информацию в IQService, а IQService выполняет сценарии PowerShell в качестве учетной записи службы. В одном из сценариев PowerShell у нас есть следующая команда:

 LogToFile("calling start job")


$j = Start-Job -ScriptBlock { C:/SailPoint/Scripts/PowershellContainerAfterCreateRetry.ps1 -sAMAccountName $args[0] -company $args[1] } -ArgumentList $sAMAccountName, $company -Name 'PowershellContainerAfterCreateRetry'
LogToFile($j | Select-Object -Property *)
LogToFile("finished start-job")
 

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

 calling start job
@{
State=Running; HasMoreData=True; 
StatusMessage=; 
Location=localhost; 
Command= C:/SailPoint/Scripts/PowershellContainerAfterCreateRetry.ps1 -sAMAccountName $args[0] -company $args[1] ; 
JobStateInfo=Running;
Finished=System.Threading.ManualResetEvent; 
InstanceId=aa889c06-7a8a-402e-807a-880d02465bdd; Id=1; 
Name=PowershellContainerAfterCreateRetry; 
ChildJobs=System.Collections.Generic.List`1[System.Management.Automation.Job]; 
PSBeginTime=10/15/2021 21:14:22; PSEndTime=; 
PSJobTypeName=BackgroundJob;
Output=System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject];
Error=System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord];
Progress=System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord];
Verbose=System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord];
Debug=System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord];
Warning=System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord];
Information=System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]}
finished start-job
 

Когда я выполняю эту команду самостоятельно или в рамках этого сценария с помощью Windows PowerShell ISE, она завершается без проблем и вызывает соответствующий сценарий, и все работает отлично! (независимо от того, использую ли я свою интерактивную учетную запись ИЛИ учетную запись службы)

Когда этот скрипт выполняется с помощью IQService, происходит что — то «еще» — я говорю что-то «еще», потому что у меня нет никаких файлов журналов или ошибок; кажется, что это просто исчезает в эфире. (У меня есть журнал, в котором записано пять строк в сценарий PowerShell, так что можно было бы подумать, что я, по крайней мере, ЧТО-то получу!?!? У меня закончились идеи…мысли?

В качестве второстепенного замечания я провел эксперимент, который показал мне, что в настройке есть что — то странное, что должно было произойти без проблем-как показано выше, она, похоже, выполняется (потому что я вижу ту же информацию выше, которая показывает, что задание запущено). Тем не менее, как и выше, он никогда на самом деле «не кажется» завершенным или ошибочным. Единственное, о чем я могу думать, это то, что каким — то образом закрытие основного сценария также приводит к закрытию этого-но я бы подумал, что в этом случае можно было бы записать пару файлов журнала, если бы это было так? В любом случае…спасибо за чтение!

 $doit = {
"test" | Out-File -filepath ("c:test.txt") -append
}
Start-job -ScriptBlock $doit
 

Ответ №1:

я думаю, что проблема здесь в запуске задания, так как iqservice запустит процесс сценария powershell, который может не поддерживать аспект фонового задания, который вы пытаетесь использовать.

если вам нужно что-то повторить или подождать и зациклиться, вам нужно будет использовать другой механизм identityiq/iqservice (возможно, рабочий процесс в iiq, который вызывает AD при выполнении условий, срабатывании таймера и т. Д.) Помимо запуска задания внутри сценария powershell iqservice.