{"id":19055434,"url":"https://github.com/evotecit/powerfederateddirectory","last_synced_at":"2025-07-23T17:06:47.752Z","repository":{"id":95331740,"uuid":"532329732","full_name":"EvotecIT/PowerFederatedDirectory","owner":"EvotecIT","description":"PowerFederatedDirectory is a PowerShell module to interact with service https://www.federated.directory/. This module uses API exposed by Federated Directory and allows to Add, Get, Set and Remove users from Federated Directory.","archived":false,"fork":false,"pushed_at":"2023-02-14T08:18:57.000Z","size":241,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-21T12:45:39.513Z","etag":null,"topics":["federateddirectory","powershell"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EvotecIT.png","metadata":{"files":{"readme":"README.MD","changelog":"CHANGELOG.MD","contributing":null,"funding":".github/FUNDING.yml","license":"License","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":"PrzemyslawKlys","custom":["https://paypal.me/PrzemyslawKlys"]}},"created_at":"2022-09-03T17:32:07.000Z","updated_at":"2023-08-21T02:41:23.000Z","dependencies_parsed_at":"2023-03-27T21:50:15.354Z","dependency_job_id":null,"html_url":"https://github.com/EvotecIT/PowerFederatedDirectory","commit_stats":{"total_commits":111,"total_committers":1,"mean_commits":111.0,"dds":0.0,"last_synced_commit":"9e5c68b4d2b703aa1df995ffc06117b76d06c69f"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/EvotecIT/PowerFederatedDirectory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvotecIT%2FPowerFederatedDirectory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvotecIT%2FPowerFederatedDirectory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvotecIT%2FPowerFederatedDirectory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvotecIT%2FPowerFederatedDirectory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EvotecIT","download_url":"https://codeload.github.com/EvotecIT/PowerFederatedDirectory/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EvotecIT%2FPowerFederatedDirectory/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266717709,"owners_count":23973384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["federateddirectory","powershell"],"created_at":"2024-11-08T23:45:00.813Z","updated_at":"2025-07-23T17:06:47.716Z","avatar_url":"https://github.com/EvotecIT.png","language":"PowerShell","funding_links":["https://github.com/sponsors/PrzemyslawKlys","https://paypal.me/PrzemyslawKlys"],"categories":[],"sub_categories":[],"readme":"﻿# PowerFederatedDirectory - PowerShell Module\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://dev.azure.com/evotecpl/PowerFederatedDirectory/_build/results?buildId=latest\"\u003e\u003cimg src=\"https://img.shields.io/azure-devops/build/evotecpl/39c74615-8f34-4af0-a835-68dc33f9214f/14?label=Azure%20Pipelines\u0026style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.powershellgallery.com/packages/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/powershellgallery/v/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.powershellgallery.com/packages/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/powershellgallery/vpre/PowerFederatedDirectory.svg?label=powershell%20gallery%20preview\u0026colorB=yellow\u0026style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/EvotecIT/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/github/license/EvotecIT/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.powershellgallery.com/packages/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/powershellgallery/p/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/EvotecIT/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/github/languages/top/evotecit/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/EvotecIT/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/github/languages/code-size/evotecit/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.powershellgallery.com/packages/PowerFederatedDirectory\"\u003e\u003cimg src=\"https://img.shields.io/powershellgallery/dt/PowerFederatedDirectory.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://twitter.com/PrzemyslawKlys\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/PrzemyslawKlys.svg?label=Twitter%20%40PrzemyslawKlys\u0026style=flat-square\u0026logo=twitter\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://evotec.xyz/hub\"\u003e\u003cimg src=\"https://img.shields.io/badge/Blog-evotec.xyz-2A6496.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.linkedin.com/in/pklys\"\u003e\u003cimg src=\"https://img.shields.io/badge/LinkedIn-pklys-0077B5.svg?logo=LinkedIn\u0026style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n`PowerFederatedDirectory` is a PowerShell module to interact with service https://www.federated.directory/. This module uses API exposed by **Federated Directory** and allows to Add, Get, Set and Remove users from **Federated Directory**.\nThis is unofiicial module and is not supported by **Federated Directory**, but it does work just fine.\n\n### Creating Token\n\n1. Install OpenSSL (manually or using chocolatey)\n\n```powershell\nchoco install openssl.light\n```\n\n\n2. Install PowerShell Module called `jwtPS`\n\nMake sure to download 0.6.0 as the author changed the way it works in newer version\n\n```powershell\nInstall-Module jwtPs -MaximumVersion 0.6.0 -Force -Verbose\n```\n\n1. Get the token by providing Key, Issuer and Private Key that are available on Federated Directory\n\n```powershell\nImport-Module jwtPs -MaximumVersion 0.6.0 -Force\n\n$PrivateKeyPath = \"C:\\Support\\Important\\Password-FederatedDirectory-Key.txt\"\n$Key = Get-Content -Raw -LiteralPath $PrivateKeyPath # Saved private key from Federated Directory\n$Payload = @{\n    aud     = \"eyJhbGciOin\" # Key from Federated Directory\n    iss     = \"0snz1xgp7inutc\" # Issuer name from Federated Directory\n    scope = @(\"directoryKey\")\n}\n$JWT = New-Jwt -PrivateKey $Key -Algorithm RS256 -Payload $Payload\n$JWT\n```\n\n4. Use the token in the `Connect-FederatedDirectory`. Once created token works forever, so the OpenSSL / jwtPS is not required on production environment.\n\n### Using the module\n\nConnect to Federated Directory using created token. This token will automatically be used for all commands.\n\n```powershell\nConnect-FederatedDirectory -Token $JWT -Suppress\n```\n\n#### Get users\n\n```powershell\nGet-FederatedDirectoryUser -Attributes id, userName, 'custom01', 'custom02', 'employeeNumber' -Verbose | Format-Table *\n```\n\n#### Create users\n\n```powershell\nfor ($i = 1; $i -le 10; $i++) {\n    Add-FederatedDirectoryUser -UserName \"TestUserNew$i@test.pl\" -DisplayName \"TestUserNew$i\" -Suppress\n}\n```\n\n#### Update users\n\n```powershell\nSet-FederatedDirectoryUser -Id '11105df0-31cf-11ed-ada4-2bbc677ce86d' -DisplayName 'New name' -FamilyName 'New namme' -EmailAddressHome 'test@evo.pl' -PhoneNumberHome '50246000' -Verbose -Custom01 'test123' -Action Update\n```\n\n#### Remove users\n\n```powershell\nRemove-FederatedDirectoryUser -Id '11105df0-31cf-11ed-ada4-2bbc677ce86d' -Verbose\n```\n\n#### Send multiple actions in bulk\n\nThis will prepare a list of actins first that then is executed by `Invoke-FederatedDirectory` function\n\n```powershell\n$Operations = for ($i = 1; $i -le 100; $i++) {\n    Add-FederatedDirectoryUser -Verbose -UserName \"TestNewwwww$i@test.pl\" -DisplayName \"TestUserNew$i\" -ManagerDisplayName 'TestUser' -FamilyName 'Kłys' -GivenName 'Przemysłąw' -BulkProcessing\n    Remove-FederatedDirectoryUser -Id '11105df0-31cf-11ed-ada4-2bbc677ce86d' -Verbose -BulkProcessing\n    Set-FederatedDirectoryUser -Id '11105df0-31cf-11ed-ada4-2bbc677ce86d' -DisplayName 'New name' -FamilyName 'New namme' -EmailAddressHome 'test@evo.pl' -PhoneNumberHome '50246000' -Verbose -Custom01 'test123' -Action Update -BulkProcessing\n}\n$Response = Invoke-FederatedDirectory -Operations $Operations -Verbose -WhatIf\n$Response | Format-Table *\n```\n\n### Attributes\n\nThe attributes, filter and sortBy parameters can be configured by the below list of attributes.\n\n| Attribute                                                                 | Filter operator         |\n| ------------------------------------------------------------------------- | ----------------------- |\n| **id**                                                                    | eq                      |\n| externalId                                                                | eq                      |\n|                                                                           | co (admin only)         |\n| userName                                                                  | eq                      |\n|                                                                           | co (admin only)         |\n| name.givenName                                                            |                         |\n| name.familyName                                                           |                         |\n| **displayName**                                                           | co                      |\n| nickName                                                                  |                         |\n| profileUrl                                                                |                         |\n| **title**                                                                 | co                      |\n| userType                                                                  |                         |\n| emails                                                                    |                         |\n| phoneNumbers                                                              |                         |\n| addresses                                                                 |                         |\n| preferredLanguage                                                         |                         |\n| locale                                                                    |                         |\n| timezone                                                                  |                         |\n| active                                                                    |                         |\n| **groups**                                                                | eq (group members only) |\n| roles                                                                     |                         |\n| meta                                                                      |                         |\n| urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organization   |                         |\n| urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber |                         |\n| urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter     |                         |\n| **urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division**   | co                      |\n| **urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department** | co                      |\n| urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager        | eq (use manager.value)  |\n| urn:ietf:params:scim:schemas:extension:fd:2.0:User:description            |                         |\n| urn:ietf:params:scim:schemas:extension:fd:2.0:User:directoryId            | eq                      |\n| urn:ietf:params:scim:schemas:extension:fd:2.0:User:companyId              | eq                      |\n| urn:ietf:params:scim:schemas:extension:fd:2.0:User:companyLogos           |\n\nWhen no attributes are specified as a parameter in the query, it will default to the bold printed attributes above.\n\nEvery filter attribute has a default filter operator which will be used, no matter which filter operator you use in the query. This default filter operator query can be found in the above attribute table. You can only filter on those attributes that have a default filter operator value.\n\n### Resources\n\n- https://help.federated.directory/\n- https://help.federated.directory/developer/getting-started.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevotecit%2Fpowerfederateddirectory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevotecit%2Fpowerfederateddirectory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevotecit%2Fpowerfederateddirectory/lists"}