TestEnvironment
1.3.0
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) 2026 Jeffrey Stuhr. All rights reserved.
Package Details
Author(s)
- Jeffrey Stuhr
Tags
TestData TestEnvironment SeedData Identity IAM IdentityManagement Entra EntraID AzureAD MicrosoftGraph ActiveDirectory Okta Authentik FreeIPA PingOne Kerberos LDAP ConditionalAccess PIM HBAC Sudo Automation Pester Lab Windows Linux MacOS
Functions
Connect-TestEnvironment Disconnect-TestEnvironment Get-TestEnvironmentProvider New-TestEnvironment Remove-TestEnvironment Get-TestEnvironmentReport Test-TestEnvironment Compare-TestEnvironment Repair-TestEnvironment Get-TestAccessToken New-TestServiceApp Get-TestServiceApp Update-TestContainment New-EntraAdministrativeUnit New-EntraUser New-EntraGuestUser New-EntraGroup New-EntraDevice New-EntraApplication New-EntraNamedLocation New-EntraConditionalAccessPolicy New-EntraAuthenticationStrength New-EntraDirectoryRole New-EntraRoleEligibility New-EntraDirectoryExtension Set-EntraLicense New-ADTestOUStructure New-ADTestUser New-ADTestDevice New-ADTestSecurityGroups New-ADTestServiceAccount New-ADTestEdgeCase New-ADTestGroupPolicy New-ADTestDnsZone New-ADTestPasswordPolicy Get-ADTestPasswordFromVault New-OktaProfileAttribute New-OktaUser New-OktaGroup New-OktaGroupRule New-OktaApp New-OktaUserType New-OktaNetworkZone New-OktaPolicy New-OktaLinkedObject New-OktaTrustedOrigin New-OktaEventHook New-AuthentikGroup New-AuthentikUser New-AuthentikRole New-AuthentikApplication New-AuthentikOutpost New-AuthentikFlow New-AuthentikScopeMapping New-AuthentikEntitlement New-AuthentikPolicy New-AuthentikNotificationRule New-AuthentikBinding New-AuthentikToken New-AuthentikInvitation New-FreeIPAGroup New-FreeIPAUser New-FreeIPAHostgroup New-FreeIPAHost New-FreeIPANetgroup New-FreeIPAHbacRule New-FreeIPASudoRule New-FreeIPARole New-FreeIPAPasswordPolicy New-FreeIPAService New-FreeIPAIdView New-FreeIPAOtpToken New-FreeIPAAutomemberRule New-FreeIPAAutomount New-FreeIPASelinuxUserMap New-FreeIPACertMapRule New-FreeIPACaAcl New-FreeIPACertificate New-FreeIPADnsZone New-FreeIPAIdentityProvider New-PingOneProfileAttribute New-PingOnePopulation New-PingOneUser New-PingOneGroup New-PingOneResource New-PingOneApplication
PSEditions
Dependencies
This module has no dependencies.
Release Notes
1.3.0 - A sixth provider, and the seed learns to check its own work.
PingOne joins Entra ID, Active Directory, Okta, Authentik and FreeIPA: five custom user
attributes, four populations, 319 users, eleven groups, two resources and six applications,
seeded through the management API as a worker application, reported on, and removed again by
proving ownership first. No seeded population is ever the environment's default and no public
client is created without PKCE, and neither has a parameter.
Three commands close the loop a seed used to leave open. Test-TestEnvironment compares what the
connected provider holds with the seed data - every object present the way teardown would find
it, nothing of the module's that the data does not describe, every name equal by codepoint, every
listed membership in place - and returns one object for all six providers. Repair-TestEnvironment
re-runs only the seed steps that own what verification found missing, and removes nothing.
Compare-TestEnvironment matches the people two connected providers hold, by login and then by
name folded for case and Unicode normalisation, the way a hybrid identity tool would, and reports
the names that differ on the wire.
The seed data is one population. The shared people's names live in one file every generator
reads, each of them exists once in every provider rather than twice under two logins, -Tier Core
and -Tier Bulk mean the same people everywhere, and bulk group membership is sampled by hash so
adding one person no longer rewrites every provider's memberships. Every provider's report takes
the same three parameters and writes JSON, CSV and HTML through one UTF-8 writer; every stored
credential answers to -UseStoredCredential; every HTTP call goes through one function that sends
UTF-8 bytes and decodes raw bytes, the two things Windows PowerShell 5.1 gets wrong on its own.
The Entra connect reads the tenant's licences once and skips the two steps a tenant cannot hold
with one message. Authentik seeds and tears down on a runspace pool and FreeIPA sends its objects
fifty to a request; both measured on the lab instances, both faster, the FreeIPA one modestly.
Report shapes changed: -Format Object is gone from the Entra report in favour of -PassThru, a
file format needs -OutputPath, the Active Directory report's -PassThru object uses the shared
property names, and the Okta CSV export is one file per section. -Format and -Path still bind as
aliases.
Fixes, found by running the suite on Windows PowerShell 5.1 in CI for the first time and by
verifying every provider live:
- The Active Directory group step searched the whole domain for members and added twelve real
accounts, Administrator among them, to seeded groups on the lab domain. Every lookup in the seed
steps is now scoped to the seed's own OU, and a test fails on any that is not.
- Its membership count was inflated by duplicates, its manager count undercounted by the same
job-list fault 1.2.0 fixed for users and devices, its teardown total left out three object types,
-PassThru carried no detail for four steps, and a group of one member counted as empty on 5.1.
- The forest DNS partition was searched under the domain's root rather than the forest's, which
only a child domain would have noticed.
- The deny-logon policy ran after the service accounts it names had failed, and under -WhatIf.
- Three PingOne teardown tests waited for a human at a real terminal; three credential tests
passed only in one file order. CI now runs the suite shuffled and prints the seed.
1.2.0 - Seed data that can find string bugs, and four defects the live runs turned up.
Every provider's people were accented Latin and nothing else, so the only string bugs this
module could find were the ones Latin-1 exposes. Nine new people each carry one specific way
that string handling goes wrong: Han with an ideographic space that is not U+0020, a surname
above the basic plane where one character is two UTF-16 units, Cyrillic homoglyphs a duplicate
check made by eye cannot see, Greek with its positional final sigma, right-to-left Arabic, a
decomposed name that renders identically to an existing precomposed one, a Turkish dotless i,
an eszett that upper-cases into two characters, and Devanagari combining vowel signs. Every
login stays plain ASCII, because that is the field a directory actually constrains; the writing
system lives in the display name, where a real directory keeps it. Counts move with it: Active
Directory 296 users to 311, Entra 305 to 329, Authentik 306 to 330, FreeIPA 333 to 357.
Okta is capped at eight users by its licence and cannot carry the cohort, so its one Japanese
person is now written in kanji rather than romaji, as she is in every other provider.
Fixes, all found while verifying that data against live directories:
- An Active Directory teardown refused at the confirmation prompt deleted the environment
anyway. The guard returned from begin{}, which ends the begin block and nothing else, so
process{} ran regardless. Unattended it always took that path, because Read-Host reads EOF
and never matches CONFIRM. An automated teardown must now pass -Force, which was always the
documented bypass; -WhatIf still beats it.
- The seeding counters undercounted badly - 176 of 311 users and 569 of 688 devices, with none
skipped and no error raised - because jobs that finished between two readings of the job list
were dropped from tracking without ever being received.
- Entra teardown left behind any user still in a role-assignable group, which Graph refuses to
delete until the group is gone, and the group deletion needs a moment to take effect. That
refusal is now retried once after a pause.
- Service account creation failed at random, about one seed run in three hundred, when a
generated password happened to contain a three-letter token of the account's own display
name. Windows reports that as a length, complexity or history failure and names none of the
three. A refused account was also left behind without a password, which every later run then
skipped as already created.
1.1.0 - The Active Directory provider catches up, and learns to survive a messy domain.
Seeded computers now resolve: two directory-integrated DNS zones of the seed's own, an A
record and a PTR for all 688 devices, and records around them that deliberately do not
reconcile. Eight service accounts register a principal name against a seeded server and one
delegates, constrained; unconstrained delegation is never seeded. Three fine-grained password
policies sit over seeded groups at three precedences. Remove-TestEnvironment -Keep now works
against Active Directory, which was the only provider without it.
Connecting picks a domain controller that answers rather than trusting discovery, and pins
every later call to it, so a domain that registers a controller it is not running no longer
breaks a seed halfway through. If that controller stops answering mid-run the seed stops with
one message instead of failing every remaining step.
Fixes: teardown claimed password settings objects by name pattern rather than by the seed tag;
the service account step discarded the password export entries it built, so the documentation
wrote nothing and the entries leaked onto the output stream; DNS zone objects were looked for
in the wrong directory partition, so the seed tag was never written and teardown refused to
remove its own zones.
1.0.0 - First release.
Five providers behind one connect-seed-report-teardown surface:
- Entra ID: ~1,150 objects across twelve types, held in administrative units.
- Active Directory: ~1,100 objects across five types, held in OU=TestData.
- Okta: ~60 objects across ten types, seed-tagged.
- Authentik: ~480 objects across seventeen types, under a user path of their own.
- FreeIPA: ~970 objects across twenty-eight types, seed-tagged, in DNS zones of their own.
The Entra and Active Directory providers seed the same people, so hybrid identity matching
is testable across the two.
Every provider proves ownership before deleting anything, never puts a directory into an
enforcing state (a seeded Conditional Access policy is report-only, a seeded PIM eligibility
is never active, a stock FreeIPA rule is never touched, and none of that is a parameter),
and honours -WhatIf over -Force on every destructive command. RequiredModules is empty:
importing this module installs nothing. The AD provider imports RSAT at connect time; the
other four run from a stock host on any platform.
See CHANGELOG.md for the detail.
FileList
- TestEnvironment.nuspec
- TestEnvironment.psd1
- Providers\Authentik\Data\AuthentikFlows.csv
- Providers\Entra\Public\Connect-EntraEnvironment.ps1
- Providers\AD\Private\Invoke-ADTestSecretStoreOrchestration.ps1
- Providers\Authentik\Data\AuthentikInvitations.csv
- Providers\Entra\Public\New-EntraGuestUser.ps1
- Providers\AD\Private\Set-ADTestServerPin.ps1
- CHANGELOG.md
- Providers\Authentik\Data\AuthentikNotificationRules.csv
- Providers\Entra\Public\Get-EntraServiceApp.ps1
- Providers\AD\Private\Remove-ADTestSecretVault.ps1
- TestEnvironment.psm1
- Providers\Authentik\Data\AuthentikScopeMappings.csv
- Providers\Entra\Public\New-EntraAuthenticationStrength.ps1
- Providers\AD\Private\Test-ADTestPrerequisite.ps1
- README.md
- Providers\Authentik\Data\AuthentikEntitlements.csv
- Providers\Entra\Public\Get-EntraEnvironmentReport.ps1
- Providers\AD\Private\New-ADTestSecretVault.ps1
- LICENSE
- Providers\Authentik\Data\AuthentikUsers.csv
- Providers\Entra\Public\Disconnect-EntraEnvironment.ps1
- Providers\AD\Private\Select-ADTestOwnedObject.ps1
- Core\ConvertFrom-TestBase64Url.ps1
- Providers\Authentik\Data\AuthentikGroups.csv
- Providers\Entra\Public\Update-EntraContainment.ps1
- Providers\AD\Private\Test-ADTestDirectoryReachable.ps1
- Core\Invoke-TestParallel.ps1
- Providers\Authentik\Data\AuthentikTokens.csv
- Providers\Entra\Public\New-EntraEnvironment.ps1
- Providers\AD\Private\Resolve-ADTestGroupMember.ps1
- Core\ConvertFrom-TestSecureString.ps1
- Providers\Authentik\Data\AuthentikStages.csv
- Providers\Entra\Public\New-EntraConditionalAccessPolicy.ps1
- Providers\AD\Private\Select-ADTestSeedUser.ps1
- Core\New-TestEnvironmentReport.ps1
- Providers\Authentik\Data\AuthentikPolicies.csv
- Providers\Entra\Tools\New-EntraTestSeedData.ps1
- Providers\AD\Private\Install-ADTestRsatFeature.ps1
- Core\Get-TestCertificate.ps1
- Providers\Authentik\Data\AuthentikApplications.csv
- Providers\FreeIPA\Data\FreeIPACaAcls.csv
- Providers\AD\Private\Set-ADTestPasswordSecret.ps1
- Core\ConvertTo-TestSecureString.ps1
- Providers\Authentik\Data\AuthentikRoles.csv
- Providers\FreeIPA\Data\FreeIPASelinuxUserMaps.csv
- Providers\AD\Private\Get-ADTestPolicySetting.ps1
- Core\Export-TestCredentialRecord.ps1
- Providers\Authentik\Private\Get-AuthentikSeededObject.ps1
- Providers\FreeIPA\Data\FreeIPAOtpTokens.csv
- Providers\AD\Private\Set-ADTestSeedTag.ps1
- Core\Import-TestCredentialRecord.ps1
- Providers\Authentik\Private\Get-AuthentikServiceAccountName.ps1
- Providers\FreeIPA\Data\FreeIPAHostgroups.csv
- Providers\AD\Private\Get-ADTestDomain.ps1
- Core\Confirm-TestTeardown.ps1
- Providers\Authentik\Private\ConvertFrom-AuthentikSetting.ps1
- Providers\FreeIPA\Data\FreeIPAIdentityProviders.csv
- Providers\AD\Private\New-ADTestOU.ps1
- Core\Write-TestMessage.ps1
- Providers\Authentik\Private\Invoke-AuthentikRequest.ps1
- Providers\FreeIPA\Data\FreeIPAUsers.csv
- Providers\AD\Private\Get-ADTestNameToken.ps1
- Core\Get-TestCredentialPath.ps1
- Providers\Authentik\Private\Get-AuthentikIdentitySnapshot.ps1
- Providers\FreeIPA\Data\FreeIPADnsRecords.csv
- Providers\AD\Private\Get-ADIdentitySnapshot.ps1
- Core\New-TestEnvironmentCheck.ps1
- Providers\Authentik\Private\Get-AuthentikSeedMarker.ps1
- Providers\FreeIPA\Data\FreeIPACertMapRules.csv
- Providers\AD\Private\Set-ADTestPolicyUserRight.ps1
- Core\Save-TestCertificate.ps1
- Providers\Authentik\Private\Test-AuthentikPrerequisite.ps1
- Providers\FreeIPA\Data\FreeIPAHosts.csv
- Providers\AD\Private\Select-ADTestServer.ps1
- Core\Set-TestVaultSecret.ps1
- Providers\Authentik\Private\Get-AuthentikErrorDetail.ps1
- Providers\FreeIPA\Data\FreeIPARoles.csv
- Providers\AD\Private\Get-ADTestDefaultVaultPassword.ps1
- Core\Invoke-TestWebRequest.ps1
- Providers\Authentik\Private\Get-AuthentikManagedMapping.ps1
- Providers\FreeIPA\Data\FreeIPAServices.csv
- Providers\AD\Private\Export-ADTestPasswordDocumentation.ps1
- Core\New-TestIdentity.ps1
- Providers\Authentik\Private\Get-AuthentikCredentialPath.ps1
- Providers\FreeIPA\Data\FreeIPASudoCommands.csv
- Providers\AD\Private\Get-ADTestSeedMarker.ps1
- Core\New-TestPassword.ps1
- Providers\Authentik\Private\Export-AuthentikCredential.ps1
- Providers\FreeIPA\Data\FreeIPASudoRules.csv
- Providers\AD\Private\New-ADTestEdgeUser.ps1
- Core\Write-TestProgress.ps1
- Providers\Authentik\Private\Get-AuthentikFlow.ps1
- Providers\FreeIPA\Data\FreeIPAPermissions.csv
- Providers\AD\Private\Test-ADTestSecretStorePrerequisite.ps1
- Core\Protect-TestFile.ps1
- Providers\Authentik\Private\Import-AuthentikCredential.ps1
- Providers\FreeIPA\Data\FreeIPAHbacRules.csv
- Providers\AD\Private\Get-ADTestDataPath.ps1
- Core\Initialize-TestSecretVault.ps1
- Providers\Authentik\Private\Get-AuthentikSigningKeypair.ps1
- Providers\FreeIPA\Data\FreeIPAAutomemberRules.csv
- Providers\AD\Private\Get-ADTestDnsZoneObject.ps1
- Core\Get-TestSecretStoreState.ps1
- Providers\Authentik\Private\Get-AuthentikConnection.ps1
- Providers\FreeIPA\Data\FreeIPAPrivileges.csv
- Providers\AD\Private\Test-ADTestAdministrator.ps1
- Core\Get-TestSeedMarker.ps1
- Providers\Authentik\Private\Get-AuthentikDataPath.ps1
- Providers\FreeIPA\Data\FreeIPAGroups.csv
- Providers\AD\Private\Get-ADTestSeedZone.ps1
- Core\ConvertTo-TestBase64Url.ps1
- Providers\Authentik\Public\Disconnect-AuthentikEnvironment.ps1
- Providers\FreeIPA\Data\FreeIPAHbacServices.csv
- Providers\AD\Private\New-ADTestPasswordExportEntry.ps1
- Core\Compare-TestIdentitySnapshot.ps1
- Providers\Authentik\Public\Test-AuthentikEnvironment.ps1
- Providers\FreeIPA\Data\FreeIPAPasswordPolicies.csv
- Providers\AD\Public\Remove-ADEnvironment.ps1
- Core\Export-TestEnvironmentReport.ps1
- Providers\Authentik\Public\New-AuthentikInvitation.ps1
- Providers\FreeIPA\Data\FreeIPAAutomount.csv
- Providers\AD\Public\New-ADTestServiceAccount.ps1
- Core\Protect-TestSecret.ps1
- Providers\Authentik\Public\New-AuthentikRole.ps1
- Providers\FreeIPA\Data\FreeIPAIdViews.csv
- Providers\AD\Public\New-ADTestDnsZone.ps1
- Core\New-TestEnvironmentVerification.ps1
- Providers\Authentik\Public\New-AuthentikToken.ps1
- Providers\FreeIPA\Data\FreeIPACertificates.csv
- Providers\AD\Public\New-ADTestOUStructure.ps1
- Core\Get-TestVaultSecret.ps1
- Providers\Authentik\Public\New-AuthentikPolicy.ps1
- Providers\FreeIPA\Data\FreeIPANetgroups.csv
- Providers\AD\Public\New-ADTestEdgeCase.ps1
- Core\Get-TestProviderParameter.ps1
- Providers\Authentik\Public\New-AuthentikEnvironment.ps1
- Providers\FreeIPA\Data\FreeIPAServiceDelegation.csv
- Providers\AD\Public\Get-ADEnvironmentReport.ps1
- Core\Get-TestCredentialRoot.ps1
- Providers\Authentik\Public\New-AuthentikGroup.ps1
- Providers\FreeIPA\Data\FreeIPAIdOverrides.csv
- Providers\AD\Public\New-ADEnvironment.ps1
- Core\Format-TestEnvironmentSample.ps1
- Providers\Authentik\Public\Get-AuthentikServiceApp.ps1
- Providers\FreeIPA\Private\Send-FreeIPAHttpRequest.ps1
- Providers\AD\Public\Test-ADEnvironment.ps1
- Core\Unprotect-TestSecret.ps1
- Providers\Authentik\Public\New-AuthentikBinding.ps1
- Providers\FreeIPA\Private\ConvertFrom-FreeIPADnsName.ps1
- Providers\AD\Public\New-ADTestGroupPolicy.ps1
- Core\Remove-TestVaultSecret.ps1
- Providers\Authentik\Public\Get-AuthentikAccessToken.ps1
- Providers\FreeIPA\Private\Get-FreeIPAServiceAccountName.ps1
- Providers\AD\Public\New-ADTestUser.ps1
- Public\Connect-TestEnvironment.ps1
- Providers\Authentik\Public\New-AuthentikServiceApp.ps1
- Providers\FreeIPA\Private\Add-FreeIPAMember.ps1
- Providers\AD\Public\New-ADTestPasswordPolicy.ps1
- Public\New-TestEnvironment.ps1
- Providers\Authentik\Public\New-AuthentikNotificationRule.ps1
- Providers\FreeIPA\Private\Invoke-FreeIPABatch.ps1
- Providers\AD\Public\New-ADTestSecurityGroups.ps1
- Public\Remove-TestEnvironment.ps1
- Providers\Authentik\Public\New-AuthentikUser.ps1
- Providers\FreeIPA\Private\Get-FreeIPADataPath.ps1
- Providers\AD\Public\New-ADTestDevice.ps1
- Public\Get-TestEnvironmentProvider.ps1
- Providers\Authentik\Public\New-AuthentikFlow.ps1
- Providers\FreeIPA\Private\Get-FreeIPACredentialPath.ps1
- Providers\AD\Public\Get-ADTestPasswordFromVault.ps1
- Public\Repair-TestEnvironment.ps1
- Providers\Authentik\Public\New-AuthentikOutpost.ps1
- Providers\FreeIPA\Private\Set-FreeIPAPassword.ps1
- Providers\AD\Public\Connect-ADEnvironment.ps1
- Public\New-TestServiceApp.ps1
- Providers\Authentik\Public\New-AuthentikApplication.ps1
- Providers\FreeIPA\Private\Test-FreeIPAPrerequisite.ps1
- Providers\AD\Public\Disconnect-ADEnvironment.ps1
- Public\Get-TestServiceApp.ps1
- Providers\Authentik\Public\Get-AuthentikEnvironmentReport.ps1
- Providers\FreeIPA\Private\Invoke-FreeIPARequest.ps1
- Providers\Okta\Data\OktaEventHooks.csv
- Public\Get-TestAccessToken.ps1
- Providers\Authentik\Public\New-AuthentikScopeMapping.ps1
- Providers\FreeIPA\Private\New-FreeIPACertificateRequest.ps1
- Providers\Okta\Data\OktaTrustedOrigins.csv
- Public\Compare-TestEnvironment.ps1
- Providers\Authentik\Public\New-AuthentikEntitlement.ps1
- Providers\FreeIPA\Private\Get-FreeIPAMemberFailure.ps1
- Providers\Okta\Data\OktaLinkedObjects.csv
- Public\Update-TestContainment.ps1
- Providers\Authentik\Public\Remove-AuthentikEnvironment.ps1
- Providers\FreeIPA\Private\Get-FreeIPASeedZone.ps1
- Providers\Okta\Data\OktaGroupRules.csv
- Public\Get-TestEnvironmentReport.ps1
- Providers\Authentik\Public\Connect-AuthentikEnvironment.ps1
- Providers\FreeIPA\Private\ConvertFrom-FreeIPADateTime.ps1
- Providers\Okta\Data\OktaPolicies.csv
- Public\Test-TestEnvironment.ps1
- Providers\Authentik\Tools\New-AuthentikTestSeedData.ps1
- Providers\FreeIPA\Private\Get-FreeIPAIdentitySnapshot.ps1
- Providers\Okta\Data\OktaNetworkZones.csv
- Public\Disconnect-TestEnvironment.ps1
- Providers\Entra\Data\EntraDevices.csv
- Providers\FreeIPA\Private\Get-FreeIPASeededObject.ps1
- Providers\Okta\Data\OktaUsers.csv
- en-US\about_TestEnvironment.help.txt
- Providers\Entra\Data\EntraServiceAppPermissions.csv
- Providers\FreeIPA\Private\Connect-FreeIPASession.ps1
- Providers\Okta\Data\OktaGroups.csv
- en-US\TestEnvironment-Help.xml
- Providers\Entra\Data\EntraUsers.csv
- Providers\FreeIPA\Private\Export-FreeIPACredential.ps1
- Providers\Okta\Data\OktaApps.csv
- Core\Data\SeedPeople.csv
- Providers\Entra\Data\EntraNamedLocations.csv
- Providers\FreeIPA\Private\New-FreeIPAHttpClient.ps1
- Providers\Okta\Data\OktaUserTypes.csv
- Providers\PingOne\Initialize.ps1
- Providers\Entra\Data\EntraApplications.csv
- Providers\FreeIPA\Private\Get-FreeIPAConnection.ps1
- Providers\Okta\Data\OktaProfileAttributes.csv
- Providers\PingOne\README.md
- Providers\Entra\Data\EntraAuthenticationStrengths.csv
- Providers\FreeIPA\Private\ConvertTo-FreeIPADateTime.ps1
- Providers\Okta\Private\Import-OktaAppCredential.ps1
- Providers\Authentik\Initialize.ps1
- Providers\Entra\Data\EntraDirectoryExtensions.csv
- Providers\FreeIPA\Private\Import-FreeIPACredential.ps1
- Providers\Okta\Private\Revoke-OktaApiToken.ps1
- Providers\Authentik\README.md
- Providers\Entra\Data\EntraGuestUsers.csv
- Providers\FreeIPA\Private\ConvertFrom-FreeIPACertificateDate.ps1
- Providers\Okta\Private\Get-OktaErrorDetail.ps1
- Providers\Entra\Initialize.ps1
- Providers\Entra\Data\EntraConditionalAccessPolicies.csv
- Providers\FreeIPA\Private\Get-FreeIPASeedMarker.ps1
- Providers\Okta\Private\Get-OktaDataPath.ps1
- Providers\Entra\README.md
- Providers\Entra\Data\EntraRoleEligibilities.csv
- Providers\FreeIPA\Private\Resolve-FreeIPASeedName.ps1
- Providers\Okta\Private\Get-OktaConnection.ps1
- Providers\FreeIPA\Initialize.ps1
- Providers\Entra\Data\EntraGroups.csv
- Providers\FreeIPA\Public\Disconnect-FreeIPAEnvironment.ps1
- Providers\Okta\Private\Get-OktaUserHeadroom.ps1
- Providers\FreeIPA\README.md
- Providers\Entra\Data\EntraDirectoryRoles.csv
- Providers\FreeIPA\Public\Get-FreeIPAAccessToken.ps1
- Providers\Okta\Private\New-OktaClientAssertion.ps1
- Providers\AD\Initialize.ps1
- Providers\Entra\Private\Invoke-EntraBatch.ps1
- Providers\FreeIPA\Public\New-FreeIPASelinuxUserMap.ps1
- Providers\Okta\Private\Get-OktaSeededGroup.ps1
- Providers\AD\README.md
- Providers\Entra\Private\Invoke-EntraRequest.ps1
- Providers\FreeIPA\Public\Test-FreeIPAEnvironment.ps1
- Providers\Okta\Private\Test-OktaPrerequisite.ps1
- Providers\Okta\Initialize.ps1
- Providers\Entra\Private\Get-EntraSeedMarker.ps1
- Providers\FreeIPA\Public\New-FreeIPAService.ps1
- Providers\Okta\Private\Get-OktaIdentitySnapshot.ps1
- Providers\Okta\README.md
- Providers\Entra\Private\Get-EntraCapability.ps1
- Providers\FreeIPA\Public\New-FreeIPAHostgroup.ps1
- Providers\Okta\Private\Get-OktaSeededApp.ps1
- Providers\PingOne\Data\PingOneGroups.csv
- Providers\Entra\Private\Get-EntraConnection.ps1
- Providers\FreeIPA\Public\New-FreeIPAAutomount.ps1
- Providers\Okta\Private\Get-OktaSeededUser.ps1
- Providers\PingOne\Data\PingOneResources.csv
- Providers\Entra\Private\Get-EntraTeardownCapability.ps1
- Providers\FreeIPA\Public\New-FreeIPAGroup.ps1
- Providers\Okta\Private\Resolve-OktaApiToken.ps1
- Providers\PingOne\Data\PingOneApplications.csv
- Providers\Entra\Private\Get-EntraIdentitySnapshot.ps1
- Providers\FreeIPA\Public\New-FreeIPAEnvironment.ps1
- Providers\Okta\Private\Get-OktaSeedTag.ps1
- Providers\PingOne\Data\PingOneUsers.csv
- Providers\Entra\Private\Split-EntraOwnedObject.ps1
- Providers\FreeIPA\Public\New-FreeIPACertMapRule.ps1
- Providers\Okta\Private\Invoke-OktaRequest.ps1
- Providers\PingOne\Data\PingOnePopulations.csv
- Providers\Entra\Private\Write-EntraBootstrapNextStep.ps1
- Providers\FreeIPA\Public\New-FreeIPARole.ps1
- Providers\Okta\Private\Get-OktaUserTypeName.ps1
- Providers\PingOne\Data\PingOneProfileAttributes.csv
- Providers\Entra\Private\Get-EntraStoredCredential.ps1
- Providers\FreeIPA\Public\New-FreeIPACaAcl.ps1
- Providers\Okta\Private\Get-OktaCredentialPath.ps1
- Providers\PingOne\Private\Get-PingOneDataPath.ps1
- Providers\Entra\Private\Get-EntraSeededObject.ps1
- Providers\FreeIPA\Public\New-FreeIPASudoRule.ps1
- Providers\Okta\Private\Export-OktaAppCredential.ps1
- Providers\PingOne\Private\Get-PingOneIdentitySnapshot.ps1
- Providers\Entra\Private\Get-EntraErrorDetail.ps1
- Providers\FreeIPA\Public\Connect-FreeIPAEnvironment.ps1
- Providers\Okta\Private\Invoke-OktaPendingCleanupRequest.ps1
- Providers\PingOne\Private\Get-PingOneConnection.ps1
- Providers\Entra\Private\Get-EntraBootstrapState.ps1
- Providers\FreeIPA\Public\Get-FreeIPAServiceApp.ps1
- Providers\Okta\Private\New-OktaRsaKeyPair.ps1
- Providers\PingOne\Private\Get-PingOneCredentialPath.ps1
- Providers\Entra\Private\New-EntraClientAssertion.ps1
- Providers\FreeIPA\Public\New-FreeIPAUser.ps1
- Providers\Okta\Private\Get-OktaSchemaPath.ps1
- Providers\PingOne\Private\Invoke-PingOneRequest.ps1
- Providers\Entra\Private\Get-EntraTokenRole.ps1
- Providers\FreeIPA\Public\New-FreeIPAHbacRule.ps1
- Providers\Okta\Public\New-OktaNetworkZone.ps1
- Providers\PingOne\Private\Get-PingOneSeedMarker.ps1
- Providers\Entra\Private\Resolve-EntraSeededId.ps1
- Providers\FreeIPA\Public\New-FreeIPAHost.ps1
- Providers\Okta\Public\New-OktaUserType.ps1
- Providers\PingOne\Private\Resolve-PingOneSeedName.ps1
- Providers\Entra\Private\Get-EntraSeedData.ps1
- Providers\FreeIPA\Public\New-FreeIPANetgroup.ps1
- Providers\Okta\Public\Disconnect-OktaEnvironment.ps1
- Providers\PingOne\Private\Get-PingOneSeededObject.ps1
- Providers\Entra\Private\Get-EntraDelegatedScope.ps1
- Providers\FreeIPA\Public\New-FreeIPADnsZone.ps1
- Providers\Okta\Public\New-OktaProfileAttribute.ps1
- Providers\PingOne\Private\Get-PingOneErrorDetail.ps1
- Providers\Entra\Private\New-EntraDeviceCodeToken.ps1
- Providers\FreeIPA\Public\New-FreeIPAOtpToken.ps1
- Providers\Okta\Public\New-OktaTrustedOrigin.ps1
- Providers\PingOne\Public\New-PingOneUser.ps1
- Providers\Entra\Private\Add-EntraUnitMember.ps1
- Providers\FreeIPA\Public\New-FreeIPACertificate.ps1
- Providers\Okta\Public\Get-OktaAccessToken.ps1
- Providers\PingOne\Public\New-PingOneResource.ps1
- Providers\Entra\Public\New-EntraDirectoryRole.ps1
- Providers\FreeIPA\Public\New-FreeIPAAutomemberRule.ps1
- Providers\Okta\Public\New-OktaEnvironment.ps1
- Providers\PingOne\Public\New-PingOneProfileAttribute.ps1
- Providers\Entra\Public\Remove-EntraEnvironment.ps1
- Providers\FreeIPA\Public\New-FreeIPAPasswordPolicy.ps1
- Providers\Okta\Public\New-OktaGroupRule.ps1
- Providers\PingOne\Public\Get-PingOneAccessToken.ps1
- Providers\Entra\Public\Get-EntraAccessToken.ps1
- Providers\FreeIPA\Public\New-FreeIPAIdentityProvider.ps1
- Providers\Okta\Public\New-OktaEventHook.ps1
- Providers\PingOne\Public\New-PingOneApplication.ps1
- Providers\Entra\Public\New-EntraServiceApp.ps1
- Providers\FreeIPA\Public\Get-FreeIPAEnvironmentReport.ps1
- Providers\Okta\Public\New-OktaPolicy.ps1
- Providers\PingOne\Public\New-PingOnePopulation.ps1
- Providers\Entra\Public\New-EntraAdministrativeUnit.ps1
- Providers\FreeIPA\Public\New-FreeIPAServiceApp.ps1
- Providers\Okta\Public\Remove-OktaEnvironment.ps1
- Providers\PingOne\Public\Test-PingOneEnvironment.ps1
- Providers\Entra\Public\Test-EntraEnvironment.ps1
- Providers\FreeIPA\Public\New-FreeIPAIdView.ps1
- Providers\Okta\Public\New-OktaUser.ps1
- Providers\PingOne\Public\Connect-PingOneEnvironment.ps1
- Providers\Entra\Public\New-EntraApplication.ps1
- Providers\FreeIPA\Public\Remove-FreeIPAEnvironment.ps1
- Providers\Okta\Public\New-OktaApp.ps1
- Providers\PingOne\Public\New-PingOneGroup.ps1
- Providers\Entra\Public\New-EntraGroup.ps1
- Providers\FreeIPA\Tools\New-FreeIPATestSeedData.ps1
- Providers\Okta\Public\New-OktaServiceApp.ps1
- Providers\PingOne\Public\Remove-PingOneEnvironment.ps1
- Providers\Entra\Public\Set-EntraLicense.ps1
- Providers\AD\Data\ADSecurityGroups.csv
- Providers\Okta\Public\Get-OktaServiceApp.ps1
- Providers\PingOne\Public\New-PingOneEnvironment.ps1
- Providers\Entra\Public\New-EntraDevice.ps1
- Providers\AD\Data\ADDevices.csv
- Providers\Okta\Public\Get-OktaEnvironmentReport.ps1
- Providers\PingOne\Public\Get-PingOneEnvironmentReport.ps1
- Providers\Entra\Public\New-EntraUser.ps1
- Providers\AD\Data\ADUsers.csv
- Providers\Okta\Public\Test-OktaEnvironment.ps1
- Providers\PingOne\Public\Disconnect-PingOneEnvironment.ps1
- Providers\Entra\Public\New-EntraNamedLocation.ps1
- Providers\AD\Data\ADServiceAccounts.csv
- Providers\Okta\Public\Connect-OktaEnvironment.ps1
- Providers\PingOne\Tools\New-PingOneTestSeedData.ps1
- Providers\Entra\Public\New-EntraDirectoryExtension.ps1
- Providers\AD\Data\ADDnsRecords.csv
- Providers\Okta\Public\New-OktaGroup.ps1
- Providers\Authentik\Data\AuthentikOutposts.csv
- Providers\Entra\Public\New-EntraRoleEligibility.ps1
- Providers\AD\Data\ADPasswordPolicies.csv
- Providers\Okta\Public\New-OktaLinkedObject.ps1
- Providers\Authentik\Data\AuthentikBindings.csv
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 1.3.0 (current version) | 4 | 9/14/2026 |
| 1.2.0 | 7 | 9/12/2026 |
| 1.1.0 | 6 | 9/12/2026 |
| 1.0.0 | 6 | 9/12/2026 |