{"id":14063731,"url":"https://github.com/PowerShellCrack/OSDOOBEUI","last_synced_at":"2025-07-29T16:31:23.260Z","repository":{"id":111449958,"uuid":"349262190","full_name":"PowerShellCrack/OSDOOBEUI","owner":"PowerShellCrack","description":"OOBE like user interface for Operating System Deployments","archived":false,"fork":false,"pushed_at":"2021-04-15T17:44:45.000Z","size":2280,"stargazers_count":30,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-25T07:42:34.770Z","etag":null,"topics":["mdt","oobe","osd","powershell","sccm","xaml"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PowerShellCrack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-03-19T01:09:32.000Z","updated_at":"2024-09-22T02:59:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"1917042f-0cd8-4c4e-8755-1c5de648aa50","html_url":"https://github.com/PowerShellCrack/OSDOOBEUI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PowerShellCrack%2FOSDOOBEUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PowerShellCrack%2FOSDOOBEUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PowerShellCrack%2FOSDOOBEUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PowerShellCrack%2FOSDOOBEUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PowerShellCrack","download_url":"https://codeload.github.com/PowerShellCrack/OSDOOBEUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228028618,"owners_count":17858419,"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","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":["mdt","oobe","osd","powershell","sccm","xaml"],"created_at":"2024-08-13T07:03:28.920Z","updated_at":"2024-12-04T01:31:22.139Z","avatar_url":"https://github.com/PowerShellCrack.png","language":"PowerShell","funding_links":[],"categories":["PowerShell"],"sub_categories":[],"readme":"# OSDOOBEUI\n\nAn Out-of-the-Box Experience like user interface for Operating System Deployments\n\n## Description\n\nA PowerShell Driven UI that looks and feels like Windows 10 OOBE. Used in SCCM/MDT TaskSequence Bare-metal deployments\n\n## Requirements\n\nTo support the UI in windows PE, these features must be installed:\n\n- DISM Cmdlets\n- Microsoft Data Access Component (MDAC/ADO) support\n- Windows PowerShell\n\nThe recommended command to run the UI is:\n\n#### **OSDOOBEUI.ps1**\n\nWork-In-Progress\nThe UI is designed o look and feel like Windows 10 OOBE startup wizard but with more control\n\n```bash\n\"%DEPLOYROOT%\\tools\\%architecture%\\ServiceUI.exe\" -process:TSProgressUI.exe \"%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -ExecutionPolicy Bypass -Sta -File \"%SCRIPTROOT%\\Custom\\OSDOOBEUI\\OSDOOBEUI.ps1\"\n```\n\n\n#### **OSDOOBEUI_SinglePage.ps1**\n The UI is designed to be a single page with the option to add an additional app page if needed. The UI will look like this:\n ![UI](UI_Screenshots/OOBEUIWPF_Blank-singlepage.png)\n \n ![Validate](UI_Screenshots/OOBEUIWPF_Validate-singlepage.png)\n\n```bash\n\"%DEPLOYROOT%\\tools\\%architecture%\\ServiceUI.exe\" -process:TSProgressUI.exe \"%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -ExecutionPolicy Bypass -Sta -File \"%SCRIPTROOT%\\Custom\\OSDOOBEUI\\OSDOOBEUI_SinglePage.ps1\" -ConfigPath OOBEUIWPF.config\n```\n\n### Current Features\n\n- **Splash screen**: can be enabled or disabled by the config file. The splash screen is useful when hiding the PowerShell window screen while the UI is loading and task sequence progress bar\n![Splash screen](UI_Screenshots/splashscreen.PNG)\n\n## Configurable Items\n\n### Options Configuration\n\nAll settings are configurable within the **OSDOOBEUI.config** file\n\n- **Logo1Position _[string]_**;   Changes the position of the logo in menu. Options: Left, Right, Both, Hidden; default is Left.\n- **Logo2Position _[string]_**;   Changes the position of the logo in menu. Options: Left, Right, Both, Hidden; default is right\n- **Logo1File _[string]_**;       Location where log file exists. (Recommend size is 100x100)\n- **Logo2File _[string]_**;       Location where log file exists. (Recommend size is 100x100)\n- **FormVariable _[string]_**;   Set the variable used for the Object sin XAML. No need to change\n- **VerboseMode _[Boolean]_**;   Output verbose messages to PowerShell window\n- **DebugMode _[Boolean]_**;     Output additional messages to PowerShell window\n- **Test mode _[Boolean]_**;     Does not show the menu, just runs all functions and menu items\nAfter menu is played/started, run these commands in PowerShell to trigger validation tests:\n\n```powershell\n        $OSDOOBEUI_txtComputerName.text = 'ADPROD12345PAW'\n        $ComputerNameObject = $OSDOOBEUI_txtComputerName\n        Validate-ComputerNameRules $ComputerNameObject\n```\n\n- **BackgroundColor _[string]_**;Changes the main background color of the UI\n    **NOTE:** Buttons are not changeable. Recommend keeping background a blue tone\n\n### Page Options\n\n- **[Still Testing] SinglePageOnly _[Boolean]_**;  Display the UI as a single page. App page can be enabled if set to true\n- **ShowAppSelection _[Boolean]_**; Display the App page (used for both single and multi page UI's)\n![Apps](UI_Screenshots/OOBEUIWPF_Apps.png)\n### Control Configuration\n\n- **[Still Testing] AutoGenerateName _[string]_**; Auto generates name based option selected _[AD, SQL or Locale, disabled]_. Using a SQL table and AD, name will be autogenerated and validated, Locale uses local config from network locale\n- **[Still Testing] GenerateNameMethod _[string]_**; Auto generates name based option selected _[AD, SQL,ODJFile,ODJBlob,Locale,TSEnv,Clear].\n\n- **[Still Testing] GenerateNameSource _[string]_**; Used only with ODJ set in GenerateNameMethod Property; specifies location to pull ODJ file. Path can be a local, network share, or a URL (Will use invoke method). ODJ file path will search for odj files that follow the naming format. Must be named: \u003cassettag\u003e_\u003cserialnumber\u003e_\u003ccomputername\u003e.odj. Using a SQL table and AD, name will be autogenerated and validated, Locale uses local config from network locale\n  NOTE: ODJ set custom properties: ODJ_FilePath,ODJ_BlobData\n- **OverWriteUIControlByTS _[Boolean]_**; Determines if tasksequence controls the UI vs Config (only changes UI_Control section)\n                                                        TS variables needs to mirror control but with UI prefix added (eg. \u003cControl_ShowSplashScreen\u003eTrue\u003c/Control_ShowSplashScreen\u003e -\u003e UIControl_ShowSplashScreen=True)\n- **ShowSplashScreen _[Boolean]_**;       Display splash screen prior to menu loaded. Hides verbose command window\n- **ShowSiteCode _[Boolean]_**;           Displays site code. Site code can be changed is displayed\n- **ShowSiteListSelection _[Boolean]_**;  Dropdown of all sites with site ID and site Code(if exists)\n- **EnableNetworkDetection _[Boolean]_**; Select site locales based on current IP\n- **ValidateNameRules _[Boolean]_**;      Uses Generation Rule Sets to ensure name is valid. Does not check if name is available on domain\n- **ShowClassificationProperty _[string]_**; Displays classification property in Identity field with appropriate color based on device name (Values to choose from: Id,Level,Type,None)\n- **ShowDomainOUListSelection _[Boolean]_**; Dropdown to select the OU to join to. Can be controlled by site locale\n- **AllowCustomDomain _[Boolean]_**;      If enabled the domain field is a fillable textbox, if disabled the domain field is a dropdown (populated by Locale Domain Info)\n- **AllowWorkgroupJoin _[Boolean]_**;     If set to false, the workgroup option is filtered out.\n- **AllowSiteSelection _[Boolean]_**;     Enables the ability to change the Site ID from selection list (Must have ShowSiteListSelection enabled)\n- **FilterAccountDomainType _[string]_**; Set this value to match a Locale Domain Type property. If set, the matching domain by classification will be filled in for the account domain\n- **FilterDomainProperty _[string]_**;    Value is used when matching domain property to classification id property. Currently supports only classification id filter.\n- **AllowRuleBypassModeKey _[string]_**;  If set, the validation rules can be bypassed by pressing shift before clicking validate. This allows custom names. Other validations are still checked\n- **HideDomainList _[Boolean]_**;         If this is set to true, the domains fields will be hidden and no validation or variables will be set; overwrites ShowDomainOUListSelection\n- **HideDomainCreds _[Boolean]_**;        If this is set to true, the credential fields will be hidden and no validation or variables will be set\n    --\u003e\n\nAllowRuleBypassModeKey screenshot\n![Apps](UI_Screenshots/OOBEUIWPF_Bypassmode.png)\n\n### Generation Rules\n\nThis is highly configurable and can have up to 5 areas. Please read the [config](OSDOOBEUI.config) file for more details\n\nThe varname can be renamed. however keep the **ID** the same\n\n- **IDMachineType _[table]_**; Value is controlled based computer name field (eg._**;A**DPROP12345PAW\"_).\n\nexample:\n```xml\n\u003crulesets Id=\"Id1\" Name=\"Machine Type\" VarName=\"IDMachineType\" MustExist=\"True\" \u003e\n    \u003crule Char=\"A\" Name=\"Administrative\"                VarValue=\"Admin\" /\u003e\n    \u003crule Char=\"D\" Name=\"Developer\"                     VarValue=\"Developer\" /\u003e\n    \u003crule Char=\"R\" Name=\"Training\"                      VarValue=\"Training\" /\u003e\n\u003c/rulesets\u003e\n```\n\n- **IDFormFactor _[table]_**; Value is controlled based computer name field (eg. _A**D**PROP12345PAW\"_).\n\nexample:\n```xml\n\u003crulesets Id=\"Id2\" Name=\"Form Factor\" VarName=\"IDFormFactor\" MustExist=\"True\" \u003e\n    \u003crule Char=\"D\" Name=\"Desktop\"                       VarValue=\"Desktop\" /\u003e\n    \u003crule Char=\"H\" Name=\"Virtual Desktop (VDI)\"         VarValue=\"VDI\" /\u003e\n    \u003crule Char=\"L\" Name=\"Laptop\"                        VarValue=\"Laptop\" /\u003e\n    \u003crule Char=\"U\" Name=\"Virtual Machine\"               VarValue=\"VM\" /\u003e\n\u003c/rulesets\u003e\n```\n\n- **SiteID _[stable]_**; Value is controlled based computer name field (eg. _AD**PROP**12345PAW\"_).\n\nexample:\n```xml\n\u003crulesets Id=\"Id3\" Name=\"Site Identifier\" VarName=\"SiteID\" MustExist=\"True\" \u003e\n    \u003crule Name=\"Local Sites\" GetVariable=\"MenuLocaleSiteList\" MatchProperty=\"ID\" DisplayProperty=\"BaseLocation\" SetVariable=\"SiteID\" /\u003e\n\u003c/rulesets\u003e\n```\n\n- **IDMachineClass _[table]_**; Value is controlled based computer name field (eg. _ALDTLAB**12**3456PA_). Value is determined by the first and/or second digits.\n\nexample:\n```xml\n\u003crulesets Id=\"Id4\" Name=\"Machine Class\" VarName=\"IDMachineClass\" MinCharIdentifier=\"5\" MustExist=\"True\" \u003e\n    \u003crule Char=\"0#####\" Name=\"Corporation\"          VarValue=\"Corp\" /\u003e\n    \u003crule Char=\"1#####\" Name=\"Laboratory\"             VarValue=\"Lab\" /\u003e\n\u003c/rulesets\u003e\n```\n\n- **IDMachineRole _[table]_**; Value is controlled based computer name field (eg. _ALDTLAB123456**PA**_). Value can be Null. Variable name can be changed in ruleset's _VarName_ property\n\nexample:\n```xml\n\u003crulesets Id=\"Id5\" Name=\"Role Identifier\" VarName=\"IDMachineRole\" MustExist=\"True\" \u003e\n    \u003crule Char=\"dPAW\" Name=\"Privilege Access Workstation\"             VarValue=\"PAW\" /\u003e\n    \u003crule Char=\"SSW\" Name=\"Security Access Workstation\"              VarValue=\"SAW\" /\u003e\n    \u003crule Char=\"JMP\" Name=\"Jump Box Workstation\"                     VarValue=\"JMP\" /\u003e\n\u003c/rulesets\u003e\n```\n### Classification list\n\nIf enabled, list is pre selected based on Computer Machine AS Rule; Searches for Type\n\nexample:\n```xml\n\u003cLocale_Classifications\u003e\n\t\u003cclassification Id=\"Prod\" Level=\"Confidential\"\tType=\"Confidential\"\tColor=\"Green\"  /\u003e\n\t\u003cclassification Id=\"Lab\" Level=\"Laboratory\"    Type=\"Laboratory\"\tColor=\"Yellow\"\t/\u003e\n\u003c/Locale_Classifications\u003e\n```\n### Domain List\n\nValue is controlled based on dropdown field or by computer name value and when Validate is pressed. Not all options are present:\n\nexample:\n```xml\n\u003cLocale_Domains\u003e\n\t\u003cdomain Name=\"LABD\" FQDN=\"lab.contoso.com\"       ClassId=\"Lab\" Type=\"Join\" /\u003e\n\t\u003cdomain Name=\"PROD\" FQDN=\"prod.contoso.com\"       ClassId=\"Prod\" Type=\"Join\" /\u003e\n\t\u003cdomain Name=\"PROD\" FQDN=\"prod.contoso.com\"       ClassId=\"Prod\" Type=\"Auth\" /\u003e\n\u003c/Locale_Domains\u003e\n```\n### DomainOU List\n\nIf enabled, this list will poplulate a dropdown based on site selected\n\nexample:\n```xml\n\u003cLocale_DomainOUs\u003e\n\t\t\u003cOU Name=\"Lab\" Domain=\"LABD\" LDAPOU=\"OU='Test',OU='lab',DC='contoso',DC=com\"    ClassId=\"Lab\" /\u003e\n\t\t\u003cOU Name=\"Production\" Domain=\"PROD\" LDAPOU=\"OU='Systems',OU='Prod',DC='contoso',DC=com\"    ClassId=\"Prod\" /\u003e\n\u003c/Locale_DomainOUs\u003e\n```\n\n### Site List\n\nValue is controlled based on dropdown field or by computer name value and when Validate is pressed. Not all options are present:\n\nexample:\n```xml\n\u003cLocale_Sites DisplayFormat=\"\u0026lt;id\u0026gt; - \u0026lt;Baselocation\u0026gt;\" SiteCodeFormat=\" _[\u0026lt;SiteCode\u0026gt;]\" \u003e\n    \u003csite ID=\"LAB\" BaseLocation=\"Laboratory Site, USA\"  TZ=\"MST\" Region=\"US\" SiteCode=\"LAB\" Domain=\"LABD\" /\u003e\n    \u003csite ID=\"PRO\" BaseLocation=\"Production Site, USA\"  TZ=\"CST\" Region=\"US\" SiteCode=\"PRO\" Domain=\"PROD\" /\u003e\n\u003c/Locale_Sites\u003e\n```\n\n### NetworkDetection List\n\nIf enabled, it will match the IP subnet with the Site code and preselect the option in the UI\n\nexample:\n```xml\n\u003cLocale_NetworkDetection\u003e\n    \u003cNetwork SiteId=\"TEST\" CidrAddr=\"192.168.1.0/24\" /\u003e\n    \u003cNetwork SiteId=\"SITEB\" CidrAddr=\"10.11.0.0/24\" /\u003e\n    \u003cNetwork SiteId=\"SITEA\" CidrAddr=\"10.21.0.0/24\" /\u003e\n\u003c/Locale_NetworkDetection\u003e\n```\n\n### Applications\n\n```xml\n\u003cMenu_AppButtons\u003e\n\t\u003citem id=\"1\" Name=\"Update Microsoft Office\"      TSvar=\"MSO13\" DefaultEnabled=\"No\" Desc='This will attempt to install updates for office if detected. This can prolong the deployment' /\u003e\n    \u003citem id=\"2\" Name=\"Install Microsoft InfoPath\"   TSvar=\"MSOIP\" DefaultEnabled=\"Yes\" Desc='InfoPath 2013 is a forms-creation and data-gathering tool that helps organizations streamline business processes' /\u003e\n    \u003citem id=\"3\" Name=\"Install Adobe Reader DC\"      TSvar=\"ADRDC\" DefaultEnabled=\"No\"  Desc='Install Adobes PDF reader instead of using Windows built-in PDF reader' /\u003e\n\t\u003citem id=\"4\" Name=\"Install Mozilla Firefox\"      TSvar=\"MOZF\" DefaultEnabled=\"No\" Desc='A browsers that supports specific DoD websites' /\u003e\n\t\u003citem id=\"5\" Name=\"Install Google Chrome\"        TSvar=\"GCE\" DefaultEnabled=\"No\" Desc='A browsers that supports specific DoD websites' /\u003e\n\t\u003citem id=\"7\" Name=\"Run GPO Script\"               TSvar=\"SCRIPT1\" DefaultEnabled=\"No\" /\u003e\n\t\u003citem id=\"8\" Name=\"Add CMtrace\"                  TSvar=\"SCRIPT2\" DefaultEnabled=\"Yes\" Desc='A tool that was created by Microsoft to view their \"*.log\" live and works in different environments.'/\u003e\n\u003c/Menu_AppButtons\u003e\n```\n\n## OSD variables\n\nIf a task sequence is detected, the output will be a TS variable\n\n- **OSDComputerName _[string]_**; value is what is in field\n- **OSDNetworkJoinType _[0]_**; set only if domain name field is a string other than _workgroup_\n- **OSDJoinType _[workgroup, domain]_**; set to _domain_ if domain field is a string other than _workgroup_\n- **OSDDomainName _[string]_**; value is what is in field\n- **OSDDomainOUName _[LDAP string]_**;\n- **OSDJoinDomainOUName _[LDAP string]_**;\n- **OSDJoinAccount _[string]_**;\n- **OSDJoinDomainName _[string]_**;\n- **OSDJoinPassword _[string]_**;\n- **CMSiteCode _[string]_**; if enabled in configuration the site code is a 3 character string\n- **TimeZone _[[integer]_**;\n- **OSDTimeZone _[time zone]_**;\n- **TimeZoneName _[time zone]_**;\n- **OSDWorkgroupName _[workgroup]_**; only available when typing in _workgroup_ in the domain field\n- **OSDJoinWorkgroupName _[workgroup]_**; only available when typing in _workgroup_ in the domain field\n- **OSDLocalAdminPassword _[string]_**;\n- **TimeZoneName _[string]_**;\n\nHere are some screenshots or errors presented in UI\n\n# Additional Screenshots\n\n\n\n![Error1](UI_Screenshots/OOBEUIWPF_Validate_error1-singlepage.png)\n\n![Error2](UI_Screenshots/OOBEUIWPF_Validate_error2-singlepage.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPowerShellCrack%2FOSDOOBEUI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPowerShellCrack%2FOSDOOBEUI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPowerShellCrack%2FOSDOOBEUI/lists"}