#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.