{"id":353684,"date":"2024-09-21T00:51:33","date_gmt":"2024-09-21T00:51:33","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/definir-le-navigateur-par-defaut-powershell\/"},"modified":"2024-10-13T19:03:01","modified_gmt":"2024-10-13T19:03:01","slug":"definir-le-navigateur-par-defaut-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/fr\/script-hub\/definir-le-navigateur-par-defaut-powershell\/","title":{"rendered":"Comment d\u00e9finir le navigateur par d\u00e9faut pour tous les utilisateurs avec PowerShell : le guide \u00e9tape par \u00e9tape"},"content":{"rendered":"<p>La gestion du navigateur par d\u00e9faut pour plusieurs profils d&rsquo;utilisateurs sur un syst\u00e8me Windows peut s&rsquo;av\u00e9rer une t\u00e2che ardue, en particulier dans les environnements d&rsquo;entreprise o\u00f9 la coh\u00e9rence et la conformit\u00e9 sont cruciales. L&rsquo;automatisation de ce processus \u00e0 l&rsquo;aide d&rsquo;un script <a href=\"https:\/\/www.ninjaone.com\/fr\/it-hub\/endpoint-management\/qu-est-ce-que-powershell\" target=\"_blank\" rel=\"noopener\">PowerShell<\/a> simplifie la t\u00e2che et garantit que tous les utilisateurs du syst\u00e8me b\u00e9n\u00e9ficient de la m\u00eame exp\u00e9rience de navigation.<\/p>\n<p>Cet article pr\u00e9sente un\u00a0<strong>script PowerShell con\u00e7u pour d\u00e9finir le navigateur par d\u00e9faut pour tous les utilisateurs<\/strong>\u00a0sur une machine Windows, fournissant aux professionnels de l&rsquo;informatique et aux <a href=\"https:\/\/www.ninjaone.com\/fr\/quest-ce-quun-msp\" target=\"_blank\" rel=\"noopener\">fournisseurs de services g\u00e9r\u00e9s (MSP)<\/a> un outil puissant pour maintenir le contr\u00f4le sur leurs environnements.<\/p>\n<h2>Contexte<\/h2>\n<p>Dans un environnement informatique, en particulier au sein des entreprises ou des MSP, il est vital de maintenir une bonne exp\u00e9rience utilisateur de fa\u00e7on consistante. Avec plusieurs utilisateurs sur une m\u00eame machine ou sur un r\u00e9seau, le param\u00e9trage manuel du navigateur par d\u00e9faut pour chaque profil peut s&rsquo;av\u00e9rer laborieux et source d&rsquo;erreurs. Un script PowerShell qui automatise ce processus permet non seulement de gagner du temps, mais aussi de garantir l&rsquo;uniformit\u00e9, ce qui peut s&rsquo;av\u00e9rer essentiel pour la conformit\u00e9 et l&rsquo;assistance aux utilisateurs.<\/p>\n<p>Ce script sp\u00e9cifique est une version modifi\u00e9e d&rsquo;un script de Danysys, con\u00e7u pour changer le navigateur par d\u00e9faut pour tous les utilisateurs en mettant \u00e0 jour les cl\u00e9s de registre. Le script est tr\u00e8s adaptable et prend en charge les navigateurs les plus courants tels que Mozilla Firefox, Google Chrome et Microsoft Edge. En utilisant le script, les administrateurs informatiques peuvent s&rsquo;assurer que tous les utilisateurs ont le bon navigateur par d\u00e9faut, quel que soit le nombre de profils ou l&rsquo;\u00e9tat du syst\u00e8me.<\/p>\n<h2>Le script\u00a0:<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Sets the default browser for all users.\r\n.DESCRIPTION\r\n    Sets the default browser for all users.\r\n.EXAMPLE\r\n    -Browser \"Mozilla Firefox\" -RestartExplorer\r\n\r\n    Setting default browser of Mozilla Firefox for Administrator.\r\n    Setting \r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\\Hash changed from 2q7+uVxu0\/A= to FKcuHm4FMN4=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\\ProgId changed from ChromeHTML to FirefoxURL-308046B0AF4A39CB\r\n    Setting \r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https\\UserChoice\\Hash changed from zR3ANZC6jVI= to clMyDtJdxck=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https\\UserChoice\\ProgId changed from ChromeHTML to FirefoxURL-308046B0AF4A39CB\r\n    Setting \r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\htm\\UserChoice\\Hash changed from IQfza9L6Tfw= to t8+HFkmUAd0=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\htm\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.htm\\UserChoice\\Hash changed from IQfza9L6Tfw= to t8+HFkmUAd0=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.htm\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Setting \r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\html\\UserChoice\\Hash changed from 7CcRlkLW3ik= to q0Eix6jwLFg=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\html\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.html\\UserChoice\\Hash changed from 7CcRlkLW3ik= to q0Eix6jwLFg=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.html\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Setting \r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\xhtml\\UserChoice\\Hash changed from IC7TXk1anlM= to y2gIOuiaLb0=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\xhtml\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.xhtml\\UserChoice\\Hash changed from IC7TXk1anlM= to y2gIOuiaLb0=\r\n    Registry::HKEY_USERS\\S-1-5-21-528047445-1317477324-4168425688-500\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.xhtml\\UserChoice\\ProgId changed from ChromeHTML to FirefoxHTML-308046B0AF4A39CB\r\n    Restarting Explorer.exe\r\n\r\nPARAMETER: -Browser \"Mozilla Firefox\"\r\n    Set the default browser to either \"Mozilla Firefox\", \"Google Chrome\" or \"Microsoft Edge\".\r\n\r\nPARAMETER: -Restart Explorer\r\n    Restarts Explorer.exe so that the desktop icons for .html files refresh immediately.\r\n    \r\nLICENSE:\r\n    Modified version from: https:\/\/github.com\/DanysysTeam\/PS-SFTA\/blob\/22a32292e576afc976a1167d92b50741ef523066\/SFTA.ps1\r\n    This script incorporates the `Get-HexDateTime` and `Get-Hash` functions from Danysys, without which it would not be possible.\r\n    \r\n    LICENSE: https:\/\/github.com\/DanysysTeam\/PS-SFTA\/blob\/22a32292e576afc976a1167d92b50741ef523066\/SFTA.ps1\r\n    MIT License\r\n    \r\n    Copyright (c) 2022 Danysys. &lt;danysys.com&gt;\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and\/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE.\r\n\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10+\r\n    Release Notes:\r\n    Initial Release\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [String]$Browser,\r\n    [Parameter()]\r\n    [Switch]$RestartExplorer = [System.Convert]::ToBoolean($env:restartExplorer)\r\n)\r\n\r\nbegin {\r\n    if ($env:browser -and $env:browser -notlike \"null\") {\r\n        $Browser = $env:browser\r\n    }\r\n\r\n    # If no browser is selected, terminate with an error message.\r\n    if (-not $Browser) {\r\n        Write-Host \"[Error] Please select at least one browser!\"\r\n        Exit 1\r\n    }\r\n\r\n    # Test if running as Administrator\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)\r\n    }\r\n\r\n    # Test if running as System\r\n    function Test-IsSystem {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        return $id.Name -like \"NT AUTHORITY*\" -or $id.IsSystem\r\n    }\r\n\r\n    function Get-HexDateTime {\r\n        # This function was created by DanySys at https:\/\/github.com\/DanysysTeam\/PS-SFTA\r\n        [OutputType([string])]\r\n    \r\n        $now = [DateTime]::Now\r\n        $dateTime = [DateTime]::New($now.Year, $now.Month, $now.Day, $now.Hour, $now.Minute, 0)\r\n        $fileTime = $dateTime.ToFileTime()\r\n        $hi = ($fileTime -shr 32)\r\n        $low = ($fileTime -band 0xFFFFFFFFL)\r\n        ($hi.ToString(\"X8\") + $low.ToString(\"X8\")).ToLower()\r\n    }\r\n\r\n    function Get-Hash {\r\n        # This function was created by DanySys at https:\/\/github.com\/DanysysTeam\/PS-SFTA\r\n        [CmdletBinding()]\r\n        param (\r\n            [Parameter( Position = 0, Mandatory = $True )]\r\n            [string]\r\n            $BaseInfo\r\n        )\r\n    \r\n        function local:Get-ShiftRight {\r\n            [CmdletBinding()]\r\n            param (\r\n                [Parameter( Position = 0, Mandatory = $true)]\r\n                [long] $iValue, \r\n                \r\n                [Parameter( Position = 1, Mandatory = $true)]\r\n                [int] $iCount \r\n            )\r\n        \r\n            if ($iValue -band 0x80000000) {\r\n                Write-Output (( $iValue -shr $iCount) -bxor 0xFFFF0000)\r\n            }\r\n            else {\r\n                Write-Output ($iValue -shr $iCount)\r\n            }\r\n        }\r\n    \r\n        function local:Get-Long {\r\n            [CmdletBinding()]\r\n            param (\r\n                [Parameter( Position = 0, Mandatory = $true)]\r\n                [byte[]] $Bytes,\r\n        \r\n                [Parameter( Position = 1)]\r\n                [int] $Index = 0\r\n            )\r\n        \r\n            Write-Output ([BitConverter]::ToInt32($Bytes, $Index))\r\n        }\r\n    \r\n        function local:Convert-Int32 {\r\n            param (\r\n                [Parameter( Position = 0, Mandatory = $true)]\r\n                [long] $Value\r\n            )\r\n        \r\n            [byte[]] $bytes = [BitConverter]::GetBytes($Value)\r\n            return [BitConverter]::ToInt32( $bytes, 0) \r\n        }\r\n    \r\n        [Byte[]] $bytesBaseInfo = [System.Text.Encoding]::Unicode.GetBytes($baseInfo) \r\n        $bytesBaseInfo += 0x00, 0x00  \r\n        \r\n        $MD5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider\r\n        [Byte[]] $bytesMD5 = $MD5.ComputeHash($bytesBaseInfo)\r\n        \r\n        $lengthBase = ($baseInfo.Length * 2) + 2 \r\n        $length = (($lengthBase -band 4) -le 1) + (Get-ShiftRight $lengthBase 2) - 1\r\n        $base64Hash = \"\"\r\n    \r\n        if ($length -gt 1) {\r\n        \r\n            $map = @{PDATA = 0; CACHE = 0; COUNTER = 0 ; INDEX = 0; MD51 = 0; MD52 = 0; OUTHASH1 = 0; OUTHASH2 = 0;\r\n                R0 = 0; R1 = @(0, 0); R2 = @(0, 0); R3 = 0; R4 = @(0, 0); R5 = @(0, 0); R6 = @(0, 0); R7 = @(0, 0)\r\n            }\r\n        \r\n            $map.CACHE = 0\r\n            $map.OUTHASH1 = 0\r\n            $map.PDATA = 0\r\n            $map.MD51 = (((Get-Long $bytesMD5) -bor 1) + 0x69FB0000L)\r\n            $map.MD52 = ((Get-Long $bytesMD5 4) -bor 1) + 0x13DB0000L\r\n            $map.INDEX = Get-ShiftRight ($length - 2) 1\r\n            $map.COUNTER = $map.INDEX + 1\r\n        \r\n            while ($map.COUNTER) {\r\n                $map.R0 = Convert-Int32 ((Get-Long $bytesBaseInfo $map.PDATA) + [long]$map.OUTHASH1)\r\n                $map.R1[0] = Convert-Int32 (Get-Long $bytesBaseInfo ($map.PDATA + 4))\r\n                $map.PDATA = $map.PDATA + 8\r\n                $map.R2[0] = Convert-Int32 (($map.R0 * ([long]$map.MD51)) - (0x10FA9605L * ((Get-ShiftRight $map.R0 16))))\r\n                $map.R2[1] = Convert-Int32 ((0x79F8A395L * ([long]$map.R2[0])) + (0x689B6B9FL * (Get-ShiftRight $map.R2[0] 16)))\r\n                $map.R3 = Convert-Int32 ((0xEA970001L * $map.R2[1]) - (0x3C101569L * (Get-ShiftRight $map.R2[1] 16) ))\r\n                $map.R4[0] = Convert-Int32 ($map.R3 + $map.R1[0])\r\n                $map.R5[0] = Convert-Int32 ($map.CACHE + $map.R3)\r\n                $map.R6[0] = Convert-Int32 (($map.R4[0] * [long]$map.MD52) - (0x3CE8EC25L * (Get-ShiftRight $map.R4[0] 16)))\r\n                $map.R6[1] = Convert-Int32 ((0x59C3AF2DL * $map.R6[0]) - (0x2232E0F1L * (Get-ShiftRight $map.R6[0] 16)))\r\n                $map.OUTHASH1 = Convert-Int32 ((0x1EC90001L * $map.R6[1]) + (0x35BD1EC9L * (Get-ShiftRight $map.R6[1] 16)))\r\n                $map.OUTHASH2 = Convert-Int32 ([long]$map.R5[0] + [long]$map.OUTHASH1)\r\n                $map.CACHE = ([long]$map.OUTHASH2)\r\n                $map.COUNTER = $map.COUNTER - 1\r\n            }\r\n    \r\n            [Byte[]] $outHash = @(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\r\n            [byte[]] $buffer = [BitConverter]::GetBytes($map.OUTHASH1)\r\n            $buffer.CopyTo($outHash, 0)\r\n            $buffer = [BitConverter]::GetBytes($map.OUTHASH2)\r\n            $buffer.CopyTo($outHash, 4)\r\n        \r\n            $map = @{PDATA = 0; CACHE = 0; COUNTER = 0 ; INDEX = 0; MD51 = 0; MD52 = 0; OUTHASH1 = 0; OUTHASH2 = 0;\r\n                R0 = 0; R1 = @(0, 0); R2 = @(0, 0); R3 = 0; R4 = @(0, 0); R5 = @(0, 0); R6 = @(0, 0); R7 = @(0, 0)\r\n            }\r\n        \r\n            $map.CACHE = 0\r\n            $map.OUTHASH1 = 0\r\n            $map.PDATA = 0\r\n            $map.MD51 = ((Get-Long $bytesMD5) -bor 1)\r\n            $map.MD52 = ((Get-Long $bytesMD5 4) -bor 1)\r\n            $map.INDEX = Get-ShiftRight ($length - 2) 1\r\n            $map.COUNTER = $map.INDEX + 1\r\n    \r\n            while ($map.COUNTER) {\r\n                $map.R0 = Convert-Int32 ((Get-Long $bytesBaseInfo $map.PDATA) + ([long]$map.OUTHASH1))\r\n                $map.PDATA = $map.PDATA + 8\r\n                $map.R1[0] = Convert-Int32 ($map.R0 * [long]$map.MD51)\r\n                $map.R1[1] = Convert-Int32 ((0xB1110000L * $map.R1[0]) - (0x30674EEFL * (Get-ShiftRight $map.R1[0] 16)))\r\n                $map.R2[0] = Convert-Int32 ((0x5B9F0000L * $map.R1[1]) - (0x78F7A461L * (Get-ShiftRight $map.R1[1] 16)))\r\n                $map.R2[1] = Convert-Int32 ((0x12CEB96DL * (Get-ShiftRight $map.R2[0] 16)) - (0x46930000L * $map.R2[0]))\r\n                $map.R3 = Convert-Int32 ((0x1D830000L * $map.R2[1]) + (0x257E1D83L * (Get-ShiftRight $map.R2[1] 16)))\r\n                $map.R4[0] = Convert-Int32 ([long]$map.MD52 * ([long]$map.R3 + (Get-Long $bytesBaseInfo ($map.PDATA - 4))))\r\n                $map.R4[1] = Convert-Int32 ((0x16F50000L * $map.R4[0]) - (0x5D8BE90BL * (Get-ShiftRight $map.R4[0] 16)))\r\n                $map.R5[0] = Convert-Int32 ((0x96FF0000L * $map.R4[1]) - (0x2C7C6901L * (Get-ShiftRight $map.R4[1] 16)))\r\n                $map.R5[1] = Convert-Int32 ((0x2B890000L * $map.R5[0]) + (0x7C932B89L * (Get-ShiftRight $map.R5[0] 16)))\r\n                $map.OUTHASH1 = Convert-Int32 ((0x9F690000L * $map.R5[1]) - (0x405B6097L * (Get-ShiftRight ($map.R5[1]) 16)))\r\n                $map.OUTHASH2 = Convert-Int32 ([long]$map.OUTHASH1 + $map.CACHE + $map.R3) \r\n                $map.CACHE = ([long]$map.OUTHASH2)\r\n                $map.COUNTER = $map.COUNTER - 1\r\n            }\r\n        \r\n            $buffer = [BitConverter]::GetBytes($map.OUTHASH1)\r\n            $buffer.CopyTo($outHash, 8)\r\n            $buffer = [BitConverter]::GetBytes($map.OUTHASH2)\r\n            $buffer.CopyTo($outHash, 12)\r\n        \r\n            [Byte[]] $outHashBase = @(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\r\n            $hashValue1 = ((Get-Long $outHash 8) -bxor (Get-Long $outHash))\r\n            $hashValue2 = ((Get-Long $outHash 12) -bxor (Get-Long $outHash 4))\r\n        \r\n            $buffer = [BitConverter]::GetBytes($hashValue1)\r\n            $buffer.CopyTo($outHashBase, 0)\r\n            $buffer = [BitConverter]::GetBytes($hashValue2)\r\n            $buffer.CopyTo($outHashBase, 4)\r\n            $base64Hash = [Convert]::ToBase64String($outHashBase) \r\n        }\r\n    \r\n        $base64Hash\r\n    }\r\n\r\n    # Helper function for setting registry keys\r\n    function Set-RegKey {\r\n        param (\r\n            $Path,\r\n            $Name,\r\n            $Value,\r\n            [ValidateSet(\"DWord\", \"QWord\", \"String\", \"ExpandedString\", \"Binary\", \"MultiString\", \"Unknown\")]\r\n            $PropertyType = \"DWord\"\r\n        )\r\n        if (-not $(Test-Path -Path $Path)) {\r\n            # Check if path does not exist and create the path\r\n            New-Item -Path $Path -Force | Out-Null\r\n        }\r\n        if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) {\r\n            # Update property and print out what it was changed from and changed to\r\n            $CurrentValue = (Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name\r\n            try {\r\n                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null\r\n            }\r\n            catch {\r\n                Write-Host \"[Error] Unable to set registry key for $Name at $Path please see below error!\"\r\n                Write-Host \"[Error] $($_.Exception.Message)\"\r\n                exit 1\r\n            }\r\n            Write-Host \"$Path\\$Name changed from $CurrentValue to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)\"\r\n        }\r\n        else {\r\n            # Create property with value\r\n            try {\r\n                New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null\r\n            }\r\n            catch {\r\n                Write-Host \"[Error] Unable to set registry key for $Name at $Path please see below error!\"\r\n                Write-Host \"[Error] $($_.Exception.Message)\"\r\n                exit 1\r\n            }\r\n            Write-Host \"Set $Path\\$Name to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)\"\r\n        }\r\n    }\r\n\r\n    # Retrieves all accounts on a system.\r\n    function Get-UserHives {\r\n        param (\r\n            [Parameter()]\r\n            [ValidateSet('AzureAD', 'DomainAndLocal', 'All')]\r\n            [String]$Type = \"All\",\r\n            [Parameter()]\r\n            [String[]]$ExcludedUsers,\r\n            [Parameter()]\r\n            [switch]$IncludeDefault\r\n        )\r\n    \r\n        # User account SID's follow a particular patter depending on if they're azure AD or a Domain account or a local \"workgroup\" account.\r\n        $Patterns = switch ($Type) {\r\n            \"AzureAD\" { \"S-1-12-1-(\\d+-?){4}$\" }\r\n            \"DomainAndLocal\" { \"S-1-5-21-(\\d+-?){4}$\" }\r\n            \"All\" { \"S-1-12-1-(\\d+-?){4}$\" ; \"S-1-5-21-(\\d+-?){4}$\" } \r\n        }\r\n    \r\n        # We'll need the NTuser.dat file to load each users registry hive. So we grab it if their account sid matches the above pattern. \r\n        $UserProfiles = Foreach ($Pattern in $Patterns) { \r\n            Get-ItemProperty -Path \"Registry::HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\*\" |\r\n                Where-Object { $_.PSChildName -match $Pattern } | \r\n                Select-Object @{Name = \"SID\"; Expression = { $_.PSChildName } },\r\n                @{Name = \"UserName\"; Expression = { \"$($_.ProfileImagePath | Split-Path -Leaf)\" } }, \r\n                @{Name = \"UserHive\"; Expression = { \"$($_.ProfileImagePath)\\NTuser.dat\" } }, \r\n                @{Name = \"Path\"; Expression = { $_.ProfileImagePath } }\r\n        }\r\n    \r\n        # There are some situations where grabbing the .Default user's info is needed.\r\n        switch ($IncludeDefault) {\r\n            $True {\r\n                $DefaultProfile = \"\" | Select-Object UserName, SID, UserHive, Path\r\n                $DefaultProfile.UserName = \"Default\"\r\n                $DefaultProfile.SID = \"DefaultProfile\"\r\n                $DefaultProfile.Userhive = \"$env:SystemDrive\\Users\\Default\\NTUSER.DAT\"\r\n                $DefaultProfile.Path = \"C:\\Users\\Default\"\r\n    \r\n                $DefaultProfile | Where-Object { $ExcludedUsers -notcontains $_.UserName }\r\n            }\r\n        }\r\n    \r\n        $UserProfiles | Where-Object { $ExcludedUsers -notcontains $_.UserName }\r\n    }\r\n\r\n    # This is used to check that the browser is installed.\r\n    function Find-UninstallKey {\r\n        [CmdletBinding()]\r\n        param (\r\n            [Parameter(ValueFromPipeline = $True)]\r\n            [String]$DisplayName,\r\n            [Parameter()]\r\n            [Switch]$UninstallString\r\n        )\r\n        process {\r\n            $UninstallList = New-Object System.Collections.Generic.List[Object]\r\n    \r\n            $Result = Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Get-ItemProperty | Where-Object { $_.DisplayName -like \"*$DisplayName*\" }\r\n            if ($Result) { $UninstallList.Add($Result) }\r\n    \r\n            $Result = Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Get-ItemProperty | Where-Object { $_.DisplayName -like \"*$DisplayName*\" }\r\n            if ($Result) { $UninstallList.Add($Result) }\r\n    \r\n            # Programs don't always have an uninstall string listed here so to account for that I made this optional.\r\n            if ($UninstallString) {\r\n                $UninstallList | Select-Object -ExpandProperty UninstallString -ErrorAction SilentlyContinue\r\n            }\r\n            else {\r\n                $UninstallList\r\n            }\r\n        }\r\n    }\r\n}\r\nprocess {\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Host \"[Error] Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n\r\n    # Protocols and file associations to set\r\n    $Protocols = \"http\", \"https\"\r\n    $Files = \"htm\", \"html\", \"xhtml\"\r\n\r\n    # Handlers for each product\r\n    switch ($Browser) {\r\n        \"Google Chrome\" {\r\n            $DisplayName = \"Chrome\"\r\n            $urlID = \"ChromeHTML\"\r\n            $htmlID = \"ChromeHTML\"\r\n        }\r\n        \"Microsoft Edge\" {\r\n            $DisplayName = \"Edge\"\r\n            $urlID = \"MSEdgeHTM\"\r\n            $htmlID = \"MSEdgeHTM\"\r\n        }\r\n        \"Mozilla Firefox\" {\r\n            $DisplayName = \"Firefox\"\r\n            $urlID = \"FirefoxURL-308046B0AF4A39CB\"\r\n            $htmlID = \"FirefoxHTML-308046B0AF4A39CB\"\r\n        }\r\n        default {\r\n            Write-Host \"[Error] Only the following browsers can be made the default. 'Google Chrome','Microsoft Edge' or 'Mozilla Firefox'.\"\r\n            exit 1\r\n        }\r\n    }\r\n\r\n    if (-not (Find-UninstallKey -DisplayName \"$DisplayName\")) {\r\n        Write-Host \"[Error] $Browser is not installed. Please ensure it's installed System-Wide prior to running this script.\"\r\n        exit 1\r\n    }\r\n\r\n    $UserProfiles = Get-UserHives -Type \"All\"\r\n    # Loop through each profile on the machine\r\n    Foreach ($UserProfile in $UserProfiles) {\r\n        # Load User ntuser.dat if it's not already loaded\r\n        If (($ProfileWasLoaded = Test-Path Registry::HKEY_USERS\\$($UserProfile.SID)) -eq $false) {\r\n            Start-Process -FilePath \"cmd.exe\" -ArgumentList \"\/C reg.exe LOAD HKU\\$($UserProfile.SID) `\"$($UserProfile.UserHive)`\"\" -Wait -WindowStyle Hidden\r\n        }\r\n\r\n        # The hex date and user experience don't really change\r\n        $userExperience = \"User Choice set via Windows User Experience {D18B6DD5-6124-4341-9318-804003BAFA0B}\"\r\n        $hexDateTime = Get-HexDateTime\r\n\r\n\r\n        Write-Host \"`nSetting default browser of $Browser for $($UserProfile.UserName).\"\r\n\r\n        # Set protocol association registry keys\r\n        $Protocols | ForEach-Object {\r\n            Write-Host \"Setting \"\r\n            $Protocol = $_\r\n\r\n            $ToBeHashed = \"$Protocol$($UserProfile.SID)$urlID$hexDateTime$userExperience\".ToLower()\r\n            $Hash = Get-Hash -BaseInfo $ToBeHashed\r\n\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\$Protocol\\UserChoice\" -Name \"Hash\" -Value $Hash -PropertyType String\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\$Protocol\\UserChoice\" -Name \"ProgId\" -Value $urlID -PropertyType String\r\n        }\r\n\r\n        # Set file association registry keys\r\n        $Files | ForEach-Object {\r\n            Write-Host \"Setting \"\r\n            $File = $_\r\n\r\n            $ToBeHashed = \".$File$($UserProfile.SID)$htmlID$hexDateTime$userExperience\".ToLower()\r\n            $Hash = Get-Hash -BaseInfo $ToBeHashed\r\n\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\$File\\UserChoice\" -Name \"Hash\" -Value $Hash -PropertyType String\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\$File\\UserChoice\" -Name \"ProgId\" -Value $htmlID -PropertyType String\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.$File\\UserChoice\" -Name \"Hash\" -Value $Hash -PropertyType String\r\n            Set-RegKey -Path \"Registry::HKEY_USERS\\$($UserProfile.SID)\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.$File\\UserChoice\" -Name \"ProgId\" -Value $htmlID -PropertyType String\r\n        }\r\n            \r\n        # Unload NTuser.dat\r\n        If ($ProfileWasLoaded -eq $false) {\r\n            [gc]::Collect()\r\n            Start-Sleep 1\r\n            Start-Process -FilePath \"cmd.exe\" -ArgumentList \"\/C reg.exe UNLOAD HKU\\$($UserProfile.SID)\" -Wait -WindowStyle Hidden | Out-Null\r\n        }\r\n    }\r\n\r\n    # Restart explorer if requested\r\n    if ($RestartExplorer) {\r\n        Write-Host \"`nRestarting Explorer.exe as requested.\"\r\n\r\n        # Stop all instances of Explorer\r\n        Get-Process explorer | Stop-Process -Force\r\n        \r\n        Start-Sleep -Seconds 1\r\n\r\n        # Restart Explorer if not running as System and Explorer is not already running\r\n        if (!(Test-IsSystem) -and !(Get-Process -Name \"explorer\")) {\r\n            Start-Process explorer.exe\r\n        }\r\n    }\r\n}\r\nend {\r\n    \r\n    \r\n    \r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><\/div>\n<h2>Description d\u00e9taill\u00e9e<\/h2>\n<p>Le script fonctionne en interagissant avec le registre de Windows, en ciblant sp\u00e9cifiquement les ruches de registre sp\u00e9cifiques \u00e0 l&rsquo;utilisateur qui stockent les param\u00e8tres d&rsquo;application par d\u00e9faut. Voici une description \u00e9tape par \u00e9tape du fonctionnement du script :<\/p>\n<h3>1. Initialisation du script :<\/h3>\n<ul>\n<li>Le script commence par v\u00e9rifier s&rsquo;il est ex\u00e9cut\u00e9 avec des privil\u00e8ges \u00e9lev\u00e9s (acc\u00e8s administrateur). Si ce n&rsquo;est pas le cas, le script se termine, ce qui garantit que seul le personnel autoris\u00e9 peut apporter des modifications \u00e0 l&rsquo;ensemble du syst\u00e8me.<\/li>\n<\/ul>\n<h3>2. Traitement des param\u00e8tres\u00a0:<\/h3>\n<ul>\n<li>Deux param\u00e8tres sont accept\u00e9s : le navigateur \u00e0 d\u00e9finir par d\u00e9faut et un interrupteur pour red\u00e9marrer le processus Explorer.exe. Le param\u00e8tre de navigateur accepte \u00ab\u00a0Mozilla Firefox\u00a0\u00bb, \u00ab\u00a0Google Chrome\u00a0\u00bb ou \u00ab\u00a0Microsoft Edge\u00a0\u00bb et prend par d\u00e9faut la valeur d\u00e9finie dans la variable d&rsquo;environnement si elle n&rsquo;est pas fournie directement.<\/li>\n<\/ul>\n<h3>3. Validation du navigateur :<\/h3>\n<ul>\n<li>Avant de poursuivre, le script v\u00e9rifie si le navigateur sp\u00e9cifi\u00e9 est install\u00e9 sur le syst\u00e8me en recherchant sa cl\u00e9 de d\u00e9sinstallation dans le registre. Si le navigateur n&rsquo;est pas install\u00e9, le script se termine par un message d&rsquo;erreur.<\/li>\n<\/ul>\n<h3>4. Gestion des profils :<\/h3>\n<ul>\n<li>Le script r\u00e9cup\u00e8re une liste de tous les profils d&rsquo;utilisateurs sur la machine en examinant le registre \u00e0 la recherche de param\u00e8tres sp\u00e9cifiques \u00e0 l&rsquo;utilisateur. Il identifie le SID (Security Identifier) de chaque utilisateur et charge sa ruche de registre pour modifier les param\u00e8tres par d\u00e9faut du navigateur.<\/li>\n<\/ul>\n<h3>5. D\u00e9finition du protocole par d\u00e9faut et des associations de fichiers :<\/h3>\n<ul>\n<li>Pour chaque profil d&rsquo;utilisateur, le script modifie le registre afin de d\u00e9finir le navigateur s\u00e9lectionn\u00e9 comme gestionnaire par d\u00e9faut pour les types de fichiers HTTP, HTTPS, HTM, HTML et XHTML. Il s&rsquo;agit de g\u00e9n\u00e9rer un hachage unique pour les param\u00e8tres afin que Windows les reconnaisse comme valides et s\u00e9curis\u00e9s.<\/li>\n<\/ul>\n<h3>6. Red\u00e9marrage de l&rsquo;explorateur (facultatif) :<\/h3>\n<ul>\n<li>Si l&rsquo;option -RestartExplorer est utilis\u00e9e, le script arr\u00eate et red\u00e9marre le processus Explorer.exe. Cette \u00e9tape est n\u00e9cessaire pour appliquer imm\u00e9diatement les modifications et rafra\u00eechir les ic\u00f4nes du bureau associ\u00e9es aux types de fichiers concern\u00e9s.<\/li>\n<\/ul>\n<h2>Cas d&rsquo;utilisation potentiels<\/h2>\n<p>Imaginez un administrateur informatique g\u00e9rant un grand r\u00e9seau d&rsquo;entreprise avec des centaines d&rsquo;utilisateurs. L&rsquo;entreprise a r\u00e9cemment adopt\u00e9 Firefox comme navigateur par d\u00e9faut en raison de ses fonctions de s\u00e9curit\u00e9 am\u00e9lior\u00e9es.<\/p>\n<p>Plut\u00f4t que de d\u00e9finir manuellement Firefox comme navigateur par d\u00e9faut sur le profil de chaque utilisateur, l&rsquo;administrateur peut ex\u00e9cuter ce script sur l&rsquo;ensemble du r\u00e9seau, en veillant \u00e0 ce que chaque utilisateur, quelle que soit la fr\u00e9quence de ses connexions ou l&rsquo;\u00e9tat de son profil, utilise Firefox par d\u00e9faut. Cela permet non seulement de gagner du temps, mais aussi de r\u00e9duire la probabilit\u00e9 d&rsquo;erreurs de la part des utilisateurs ou de non-conformit\u00e9 avec les politiques de l&rsquo;entreprise.<\/p>\n<h2>Comparaisons<\/h2>\n<p>Bien que ce script PowerShell offre une approche simplifi\u00e9e, il existe d&rsquo;autres m\u00e9thodes pour parvenir au m\u00eame r\u00e9sultat, comme l&rsquo;utilisation de la strat\u00e9gie de groupe ou le d\u00e9ploiement d&rsquo;un outil de gestion des logiciels. La strat\u00e9gie de groupe offre un moyen plus centralis\u00e9 d&rsquo;appliquer les param\u00e8tres du navigateur, mais elle peut \u00eatre complexe \u00e0 configurer et ne pas couvrir tous les sc\u00e9narios, en particulier avec certains profils utilisateur.<\/p>\n<p>Les outils de gestion de logiciels, quant \u00e0 eux, s&rsquo;accompagnent souvent de co\u00fbts suppl\u00e9mentaires et d&rsquo;une courbe d&rsquo;apprentissage. Ce script trouve un \u00e9quilibre en offrant une solution personnalisable et gratuite qui s&rsquo;int\u00e8gre directement dans l&rsquo;environnement Windows existant.<\/p>\n<h2>FAQ<\/h2>\n<h3>Q\u00a0: Ce script peut-il \u00eatre utilis\u00e9 sur des syst\u00e8mes ex\u00e9cutant des versions de Windows ant\u00e9rieures \u00e0 Windows 10 ?<\/h3>\n<p>R\u00a0: Le script est con\u00e7u pour Windows 10 et les versions plus r\u00e9centes. Il exploite des structures de registre et des protocoles sp\u00e9cifiques qui peuvent ne pas \u00eatre disponibles sur les anciennes versions de Windows.<\/p>\n<h3>Q\u00a0: Que se passe-t-il si un utilisateur installe un nouveau navigateur apr\u00e8s l&rsquo;ex\u00e9cution du script ?<\/h3>\n<p>R\u00a0: Si un nouveau navigateur est install\u00e9 apr\u00e8s l&rsquo;ex\u00e9cution du script, il peut tenter de se d\u00e9finir comme navigateur par d\u00e9faut. Dans ce cas, il suffit de r\u00e9ex\u00e9cuter le script pour r\u00e9appliquer les param\u00e8tres souhait\u00e9s.<\/p>\n<h3>Q\u00a0: Le script peut-il \u00eatre modifi\u00e9 pour inclure d&rsquo;autres navigateurs qui ne figurent pas dans les param\u00e8tres ?<\/h3>\n<p>R\u00a0: Oui, le script peut \u00eatre adapt\u00e9 pour prendre en charge d&rsquo;autres navigateurs en ajoutant leur protocole respectif et les identificateurs de gestionnaire de fichier.<\/p>\n<h2>Implications<\/h2>\n<p>En utilisant ce script, les professionnels de l&rsquo;informatique peuvent imposer la coh\u00e9rence du navigateur \u00e0 tous les profils d&rsquo;utilisateurs, ce qui est essentiel pour la s\u00e9curit\u00e9 et la conformit\u00e9. Toutefois, les administrateurs doivent \u00eatre conscients des implications potentielles, telles que l&rsquo;annulation des pr\u00e9f\u00e9rences de l&rsquo;utilisateur et la n\u00e9cessit\u00e9 de s&rsquo;assurer que tous les navigateurs n\u00e9cessaires sont install\u00e9s sur l&rsquo;ensemble du syst\u00e8me avant d&rsquo;ex\u00e9cuter le script.<\/p>\n<h2>Recommandations<\/h2>\n<ul>\n<li><strong>Test dans un environnement contr\u00f4l\u00e9<\/strong>: Avant de d\u00e9ployer ce script sur l&rsquo;ensemble d&rsquo;un r\u00e9seau, il est conseill\u00e9 de le tester dans un environnement contr\u00f4l\u00e9 afin de s&rsquo;assurer qu&rsquo;il se comporte comme pr\u00e9vu.<\/li>\n<li><strong>S&rsquo;assurer que tous les navigateurs sont install\u00e9s<\/strong>: V\u00e9rifiez que le navigateur par d\u00e9faut s\u00e9lectionn\u00e9 est install\u00e9 sur tous les syst\u00e8mes o\u00f9 le script sera ex\u00e9cut\u00e9.<\/li>\n<li><strong>Tenir compte de la communication avec les utilisateurs<\/strong>: Informez les utilisateurs du changement, en particulier si les pr\u00e9f\u00e9rences par d\u00e9faut de leur navigateur sont modifi\u00e9es.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Pour les professionnels de l&rsquo;informatique et les MSP, il est essentiel de g\u00e9rer efficacement les environnements des utilisateurs. Ce script PowerShell offre une solution performante pour standardiser le navigateur par d\u00e9faut \u00e0 travers tous les profils d&rsquo;utilisateurs sur un syst\u00e8me Windows. <a href=\"https:\/\/www.ninjaone.com\/fr\/\" target=\"_blank\" rel=\"noopener\">NinjaOne<\/a> fournit des outils complets pour la gestion des terminaux, y compris le d\u00e9ploiement de logiciels et la gestion des profils d&rsquo;utilisateurs, et ce script peut \u00eatre un excellent compl\u00e9ment, offrant un contr\u00f4le fin sur les param\u00e8tres du navigateur.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":""},"operating_system":[4212],"use_cases":[4281],"class_list":["post-353684","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows","use_cases-configuration-generale"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub\/353684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/comments?post=353684"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media?parent=353684"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/operating_system?post=353684"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/use_cases?post=353684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}