{"id":216068,"date":"2024-03-18T10:23:23","date_gmt":"2024-03-18T10:23:23","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=216068"},"modified":"2024-03-18T10:23:23","modified_gmt":"2024-03-18T10:23:23","slug":"comment-forcer-gpupdate-a-distance-avec-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/fr\/script-hub\/comment-forcer-gpupdate-a-distance-avec-powershell\/","title":{"rendered":"Comment forcer GPUpdate \u00e0 distance avec PowerShell : le guide pour les professionnels de l&rsquo;informatique et les entreprises MSP"},"content":{"rendered":"<h2>Principaux points \u00e0 retenir<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Les scripts PowerShell sont essentiels pour une gestion informatique efficace, en particulier pour les mises \u00e0 jour de la strat\u00e9gie de groupe (Group Policy ou GP).<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Le script facilite l&rsquo;ex\u00e9cution \u00e0 distance de &lsquo;gpupdate \/force&rsquo; sur plusieurs syst\u00e8mes.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\">Il garantit une application imm\u00e9diate et uniforme des modifications apport\u00e9es \u00e0 la strat\u00e9gie de groupe.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\">Beaucoup plus efficace que les mises \u00e0 jour manuelles ou l&rsquo;attente de celles planifi\u00e9es.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">Compatible avec toutes les versions de Windows prenant en charge PowerShell et la strat\u00e9gie de groupe.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\">\u00c9volutif, il peut \u00eatre utilis\u00e9 sur des r\u00e9seaux de petite ou de grande taille.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\">N\u00e9cessite une impl\u00e9mentation avec prudence afin d&rsquo;\u00e9viter des probl\u00e8mes de r\u00e9seau g\u00e9n\u00e9ralis\u00e9s.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"8\" data-aria-level=\"1\">Pour une utilisation optimale, il est recommand\u00e9 de proc\u00e9der \u00e0 des tests, de contr\u00f4ler le retour d&rsquo;information et d&rsquo;effectuer des audits r\u00e9guliers.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"9\" data-aria-level=\"1\">Compl\u00e8te la plateforme NinjaOne pour une meilleure gestion de l&rsquo;infrastructure informatique.<\/li>\n<\/ul>\n<h2>Introduction<\/h2>\n<p>La gestion informatique \u00e9tant en constante \u00e9volution, l&rsquo;efficacit\u00e9 et la pr\u00e9cision sont primordiales. Les scripts PowerShell, en particulier pour des t\u00e2ches telles que la mise \u00e0 jour de la strat\u00e9gie de groupe, sont devenus des outils essentiels dans l&rsquo;arsenal des professionnels de l&rsquo;informatique et des <a href=\"https:\/\/www.ninjaone.com\/fr\/quest-ce-quun-msp\/\">fournisseurs de services g\u00e9r\u00e9s (MSP)<\/a>. Leur capacit\u00e9 \u00e0 simplifier des processus complexes est essentielle pour maintenir la sant\u00e9 et la s\u00e9curit\u00e9 des infrastructures informatiques.<\/p>\n<h2>Contexte<\/h2>\n<p>La strat\u00e9gie de groupe est une fonctionnalit\u00e9 de Windows qui permet de centraliser la gestion et la configuration des syst\u00e8mes d&rsquo;exploitation, des applications et des param\u00e8tres des utilisateurs. Le script que nous vous pr\u00e9sentons utilise PowerShell pour <a href=\"https:\/\/www.ninjaone.com\/blog\/gpupdate-how-to-force-a-group-policy-update\/\">ex\u00e9cuter \u00e0 distance &lsquo;gpupdate&rsquo;<\/a>, une commande essentielle pour actualiser les strat\u00e9gies de groupe. Ceci est particuli\u00e8rement important pour les professionnels de l&rsquo;informatique et les MSP qui doivent s&rsquo;assurer que les changements de strat\u00e9gie sont appliqu\u00e9s rapidement et uniform\u00e9ment dans de nombreux syst\u00e8mes.<\/p>\n<h2>Le script :<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Initiates a gpupdate. It will perform a gpupdate \/force, if the script is executed as the system or if either \"Logout All Users\" or \"Reboot\" options are selected.\r\n.DESCRIPTION\r\n    Initiates a gpupdate. It will perform a gpupdate \/force, if the script is executed as the system or if either \"Logout All Users\" or \"Reboot\" options are selected.\r\n.EXAMPLE\r\n    (No Parameters)\r\n  \r\n    Computer Policy updated successfully!\r\n    User Policy updated successfully!\r\n\r\n    ##### Group Policy Result ##### \r\n\r\n    Domain: test.lan \r\n    Site Name: Default-First-Site-Name \r\n    Slow Link?: false \r\n\r\n    Computer Account Used: TESTKYLE-WIN10-TEST$ \r\n    User Account Used: TESTtuser \r\n\r\n    Name                                   Type     Enabled IsValid FilterAllowed AccessDenied\r\n    ----                                   ----     ------- ------- ------------- ------------\r\n    {1ED0F3EF-6E54-4380-8BB3-6683A8D02E59} Computer N\/A     false   false         false       \r\n    {31B2F340-016D-11D2-945F-00C04FB984F9} User     N\/A     false   false         N\/A         \r\n    Default Domain Policy                  Computer true    true    true          false       \r\n    Local Group Policy                     Computer true    true    true          false       \r\n    Local Group Policy                     User     true    true    true          false       \r\n    Test GPO                               User     true    true    true          N\/A         \r\n\r\nPARAMETER: -Timeout \"30\"\r\n    The amount of time in seconds gpupdate should try to update. After that time gpupdate will timeout if no update is received.\r\n    \r\nPARAMETER: -CustomFieldName \"ReplaceMeWithAnyMultilineCustomField\"\r\n\r\n    The name of a multiline customfield to store the results in.\r\n\r\nPARAMETER: -User \"CONTOSOjdoe\"\r\n    The name of a user you'd like to generate a gpresult report with.\r\n\r\nPARAMETER: AllUsers\r\n    When the script is ran as system it will logout all logged in users upon successful gpupdate. If ran as a user it will logout only just that user if required.\r\n.EXAMPLE\r\n    Computer Policy updated successfully!\r\n    User Policy updated successfully!\r\n\r\n    ##### Group Policy Result ##### \r\n\r\n    Domain: test.lan \r\n    Site Name: Default-First-Site-Name \r\n    Slow Link?: false \r\n\r\n    Computer Account Used: TESTKYLE-WIN10-TEST$ \r\n    User Account Used: TESTtuser \r\n\r\n    Name                                   Type     Enabled IsValid FilterAllowed AccessDenied\r\n    ----                                   ----     ------- ------- ------------- ------------\r\n    {1ED0F3EF-6E54-4380-8BB3-6683A8D02E59} Computer N\/A     false   false         false       \r\n    {31B2F340-016D-11D2-945F-00C04FB984F9} User     N\/A     false   false         N\/A         \r\n    Default Domain Policy                  Computer true    true    true          false       \r\n    Local Group Policy                     Computer true    true    true          false       \r\n    Local Group Policy                     User     true    true    true          false       \r\n    Test GPO                               User     true    true    true          N\/A         \r\n\r\n\r\n\r\n    WARNING: -LogoutAllUsers was specified. Logging out all users!\r\n\r\nPARAMETER: -Reboot\r\n    Will schedule a reboot for 15 minutes after script completion (if gpupdate was successful).\r\n.EXAMPLE\r\n    Computer Policy updated successfully!\r\n    User Policy updated successfully!\r\n\r\n    ##### Group Policy Result ##### \r\n\r\n    Domain: test.lan \r\n    Site Name: Default-First-Site-Name \r\n    Slow Link?: false \r\n\r\n    Computer Account Used: TESTKYLE-WIN10-TEST$ \r\n    User Account Used: TESTtuser \r\n\r\n    Name                                   Type     Enabled IsValid FilterAllowed AccessDenied\r\n    ----                                   ----     ------- ------- ------------- ------------\r\n    {1ED0F3EF-6E54-4380-8BB3-6683A8D02E59} Computer N\/A     false   false         false       \r\n    {31B2F340-016D-11D2-945F-00C04FB984F9} User     N\/A     false   false         N\/A         \r\n    Default Domain Policy                  Computer true    true    true          false       \r\n    Local Group Policy                     Computer true    true    true          false       \r\n    Local Group Policy                     User     true    true    true          false       \r\n    Test GPO                               User     true    true    true          N\/A         \r\n\r\n\r\n\r\n    WARNING: -Reboot was specified. Scheduling a reboot for 06\/22\/2023 13:24:16!\r\n.OUTPUTS\r\n  None\r\n.NOTES\r\n  Minimum OS Architecture Supported: Windows 10, Windows Server 2016\r\n  Release Notes: Renamed script and added Script Variable support\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]$CustomFieldName = \"groupPolicy\",\r\n    [Parameter()]\r\n    [Int]$Timeout = 120,\r\n    [Parameter()]\r\n    [String]$User,\r\n    [Parameter()]\r\n    [Switch]$Reboot = [System.Convert]::ToBoolean($env:reboot),\r\n    [Parameter()]\r\n    [Switch]$LogoutAllUsers = [System.Convert]::ToBoolean($env:logoutAllUsers)\r\n)\r\n\r\nbegin {\r\n    # If script variables are used overwrite their parameter\r\n    if ($env:customFieldName -and $env:customFieldName -notlike \"null\") { $CustomFieldName = $env:customFieldName }\r\n    if ($env:groupPolicyTimeout -and $env:groupPolicyTimeout -notlike \"null\") { $Timeout = $env:groupPolicyTimeout }\r\n    if ($env:user -and $env:user -notlike \"null\") { $User = $env:user }\r\n\r\n    # Checks if script is running with elevated permissions\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    # Checks if script is 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    # Check if the computer is domain joined (group policy is still a thing on non-domain joined machine just not normally used)\r\n    function Test-IsDomainJoined {\r\n        return $(Get-CimInstance -Class Win32_ComputerSystem).PartOfDomain\r\n    }\r\n\r\n    # Check if its a domain controller running this\r\n    function Test-IsDomainController {\r\n        return $(Get-CimInstance -ClassName Win32_OperatingSystem).ProductType -eq 2\r\n    }\r\n\r\n    # Outputs the currently logged in users in a more powershell friendly format\r\n    function Get-QUser {\r\n        $quser = quser.exe\r\n        $quser -replace 's{2,}', ',' -replace '&gt;' | ConvertFrom-Csv\r\n    }\r\n\r\n    # Simply checks if gpupdate threw any errors\r\n    function Test-GroupPolicyResults {\r\n        param(\r\n            [string]$Type,\r\n            [string]$Result\r\n        )\r\n\r\n        if ($Result | Select-String \"errors\") {\r\n            Write-Error \"[Error] $Type Policy was not updated successfully!\"\r\n            $False\r\n        }\r\n        else {\r\n            Write-Host \"$Type Policy updated successfully!\"\r\n            $True\r\n        }\r\n    }\r\n\r\n}\r\nprocess {\r\n    # We don't want to exit the script for most errors as the gpresult report might still be helpful\r\n    $Success = $True\r\n\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Warning \"This script is not running with Administrator priveledges. The end report will not contain Computer GPO data.\"\r\n        if ($User) {\r\n            Write-Warning \"Not elevated unable to create group policy result report for specified user. Will create a report for the current user instead.\"\r\n        }\r\n    }\r\n\r\n    # Warns the end user if the computer is not-domain joined. I don't consider this a failure though just something to keep in mind.\r\n    if (-not (Test-IsDomainJoined)) {\r\n        Write-Warning \"This computer is not joined to the domain!\"\r\n    }\r\n\r\n    # If a secure connection to the domain cannot be established group policy will fail to update. \r\n    if ((Test-IsDomainJoined) -and -not (Test-IsDomainController) -and -not (Test-ComputerSecureChannel -ErrorAction Ignore)) {\r\n        Write-Warning \"This device does not have a secure connection to the Domain Controller! Is the domain controller reachable?\"\r\n        $Success = $False\r\n    }\r\n\r\n    # Updates group policy. We only use \/force when Logoff is specified due to gpupdate stalling the script if a logoff is needed.\r\n    $gpupdate = if (-not (Test-IsSystem) -and $LogoutAllUsers) {\r\n        Invoke-Command { gpupdate.exe \/force \/Logoff \/wait:$Timeout }\r\n    }\r\n    elseif ((Test-IsSystem)) {\r\n        Invoke-Command { gpupdate.exe \/force \/wait:$Timeout }\r\n    }\r\n    else {\r\n        Invoke-Command { gpupdate.exe \/wait:$Timeout }\r\n    }\r\n\r\n    # Split up the results between Computer Policy and User Policy\r\n    $computerResult = $gpupdate | Select-String \"Computer Policy\"\r\n    $userResult = $gpupdate | Select-String \"User Policy\"\r\n\r\n    # Testing them to confirm gpupdate worked\r\n    $ComputerTest = Test-GroupPolicyResults -Type \"Computer\" -Result $computerResult\r\n    $UserTest = Test-GroupPolicyResults -Type \"User\" -Result $userResult\r\n\r\n    # If either of them are unsuccessful we'll want to exit with a status code of 1 but we'll want the result report first.\r\n    if (-not $UserTest -or -not $ComputerTest) {\r\n        $Success = $False\r\n    }\r\n\r\n    # If the script somehow got interupted before it had a chance to clean up its results we'll want to remove the previous results\r\n    if (Test-Path \"$env:TEMPgpresult.xml\" -ErrorAction Ignore) { Remove-Item \"$env:TEMPgpresult.xml\" -Force }\r\n\r\n    # We can't generate results with gpresult as the SYSTEM user so we'll attempt to generate results for the last logged in user.\r\n    if ((Test-IsSystem) -and -not $User) {\r\n        $LastLoggedInUser = Get-ItemPropertyValue -Path \"Registry::HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAuthenticationLogonUI\" -Name \"LastLoggedOnUser\" -ErrorAction Ignore \r\n        if ($LastLoggedInUser) {\r\n            Invoke-Command { gpresult.exe \/USER $LastLoggedInUser \/X \"$env:TEMPgpresult.xml\" }\r\n        }\r\n        else {\r\n            Write-Error \"[Error] Couldn't determine the last logged on user. We cannot generate a report as System please either specify a user using -User or have one sign in. :)\"\r\n        }\r\n    }\r\n    elseif ($User -and (Test-IsElevated)) {\r\n        # Of course if we were given a user to generate results for we'll want to do that instead.\r\n        Invoke-Command { gpresult.exe \/USER $User \/X \"$env:TEMPgpresult.xml\" }\r\n    }\r\n    else {\r\n        # All other cases we'll want to generate the results as the same user the script is running as.\r\n        Invoke-Command { gpresult.exe \/X \"$env:TEMPgpresult.xml\" }\r\n    }\r\n\r\n    # If we failed to generate the results that's not a big deal but we'll want to alert whoever ran it that that's what happened.\r\n    if (-not (Test-Path \"$env:TEMPgpresult.xml\" -ErrorAction Ignore) ) {\r\n        Write-Error \"Failed to generate report with gpresult!\"\r\n        exit 0\r\n    }\r\n\r\n    # Cast the xml to an xml type\r\n    [xml]$resultXML = Get-Content \"$env:TEMPgpresult.xml\"\r\n\r\n    # Cleaning up after ourself\r\n    if (Test-Path \"$env:TEMPgpresult.xml\" -ErrorAction Ignore) { Remove-Item \"$env:TEMPgpresult.xml\" -Force }\r\n\r\n    # Lets construct an object for the active gpo's that we can format into a table later\r\n    $GPOs = $resultXML.DocumentElement | ForEach-Object {\r\n        ForEach ($GPO in $_.ComputerResults.GPO.Name) {\r\n            $ComputerGPO = [PSCustomObject]@{\r\n                Name          = $GPO\r\n                Type          = \"Computer\"\r\n                Enabled       = $resultXML.DocumentElement.ComputerResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object Enabled -ExpandProperty Enabled -ErrorAction Ignore\r\n                IsValid       = $resultXML.DocumentElement.ComputerResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object IsValid -ExpandProperty IsValid -ErrorAction Ignore\r\n                FilterAllowed = $resultXML.DocumentElement.ComputerResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object FilterAllowed -ExpandProperty FilterAllowed -ErrorAction Ignore\r\n            }\r\n\r\n            # If any values are blank we'll want to replace it with N\/A\r\n            if (-not $ComputerGPO.Enabled) { $ComputerGPO.Enabled = \"N\/A\" }\r\n            if (-not $ComputerGPO.IsValid) { $ComputerGPO.IsValid = \"N\/A\" }\r\n            if (-not $ComputerGPO.FilterAllowed) { $ComputerGPO.FilterAllowed = \"N\/A\" }\r\n\r\n            $ComputerGPO\r\n        }\r\n\r\n        ForEach ($GPO in $_.UserResults.GPO.Name) {\r\n            $UserGPO = [PSCustomObject]@{\r\n                Name          = $GPO\r\n                Type          = \"User\"\r\n                Enabled       = $resultXML.DocumentElement.UserResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object Enabled -ExpandProperty Enabled -ErrorAction Ignore\r\n                IsValid       = $resultXML.DocumentElement.UserResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object IsValid -ExpandProperty IsValid -ErrorAction Ignore\r\n                FilterAllowed = $resultXML.DocumentElement.UserResults.GPO | Where-Object { $_.Name -like $GPO } | Select-Object FilterAllowed -ExpandProperty FilterAllowed -ErrorAction Ignore\r\n            }\r\n\r\n            # If any values are blank we'll want to replace it with N\/A\r\n            if (-not $UserGPO.Enabled) { $UserGPO.Enabled = \"N\/A\" }\r\n            if (-not $UserGPO.IsValid) { $UserGPO.IsValid = \"N\/A\" }\r\n            if (-not $UserGPO.FilterAllowed) { $UserGPO.FilterAllowed = \"N\/A\" }\r\n\r\n            $UserGPO\r\n        }\r\n    }\r\n\r\n    # Construct report\r\n    $Report = New-Object System.Collections.Generic.List[string]\r\n    $Report.Add(\"`n##### Group Policy Result #####\")\r\n    $Report.Add(\"`n`nDomain: $($resultXML.DocumentElement.UserResults.Domain)\")\r\n    $Report.Add(\"`nSite Name: $($resultXML.DocumentElement.UserResults.Site)\")\r\n    $Report.Add(\"`nSlow Link?: $($resultXML.DocumentElement.UserResults.SlowLink)\")\r\n    $Report.Add(\"`n`nComputer Account Used: $($resultXML.DocumentElement.ComputerResults.Name)\")\r\n    $Report.Add(\"`nUser Account Used: $($resultXML.DocumentElement.UserResults.Name)\")\r\n    $Report.Add(\"`n$($GPOs | Sort-Object -Property Name | Format-Table | Out-String)\")\r\n\r\n    # Output Report\r\n    Write-Host $Report\r\n    if ($CustomFieldName) { Ninja-Property-Set -Name $CustomFieldName -Value $Report }\r\n\r\n\r\n    # If we had any kind of failures its best to not reboot the system or logoff any users\r\n    if (-not $Success) {\r\n        exit 1\r\n    }\r\n    elseif ($LogoutAllUsers -and (Test-IsSystem)) {\r\n        Write-Warning \"-LogoutAllUsers was specified. Logging out all users!\"\r\n        (Get-QUser).ID | ForEach-Object {\r\n            Invoke-Command { logoff.exe $_ }\r\n        }\r\n    }\r\n    elseif ($Reboot) {\r\n        $RebootTime = (Get-Date).AddMinutes(15)\r\n        Write-Warning \"-Reboot was specified. Scheduling a reboot for $RebootTime!\"\r\n        Invoke-Command { shutdown.exe \/r \/t 900 }\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\"><p>&nbsp;<\/p>\n<p style=\"text-align: center;\">Acc\u00e9dez \u00e0 plus de 700\u00a0scripts dans le Dojo NinjaOne<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.ninjaone.com\/fr\/phase-de-test-gratuit\/\">Obtenir l&rsquo;acc\u00e8s<\/a><\/p>\n<\/div>\n<h2>Description d\u00e9taill\u00e9e<\/h2>\n<p>Le script repose sur une base simple mais performante. Voici une description d\u00e9taill\u00e9e de son fonctionnement\u00a0:<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Ouverture d&rsquo;une session PowerShell<\/strong>: Le script commence par cr\u00e9er une session PowerShell \u00e0 distance sur la machine cible. Cette \u00e9tape est cruciale pour l&rsquo;ex\u00e9cution de commandes \u00e0 distance.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Ex\u00e9cution de &lsquo;gpupdate&rsquo;<\/strong>: Une fois la session \u00e9tablie, le script ex\u00e9cute &lsquo;gpupdate \/force&rsquo;. Cette commande permet d&rsquo;actualiser imm\u00e9diatement les param\u00e8tres de la strat\u00e9gie de groupe, ce qui garantit l&rsquo;application de toutes les modifications r\u00e9centes.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>V\u00e9rification et retour d&rsquo;information<\/strong>: Apr\u00e8s avoir ex\u00e9cut\u00e9 la commande, le script v\u00e9rifie sa r\u00e9ussite et fournit un retour d&rsquo;information. Ce retour d&rsquo;information est essentiel pour que les administrateurs informatiques sachent o\u00f9 en est la mise \u00e0 jour de la strat\u00e9gie.<\/li>\n<\/ul>\n<h2>Cas d&rsquo;utilisation potentiels<\/h2>\n<p>Imaginez un administrateur informatique g\u00e9rant un r\u00e9seau de 500 ordinateurs. Une mise \u00e0 jour de s\u00e9curit\u00e9 critique n\u00e9cessite une mise \u00e0 jour imm\u00e9diate de la strat\u00e9gie de groupe. Gr\u00e2ce \u00e0 ce script PowerShell, l&rsquo;administrateur peut d\u00e9clencher \u00e0 distance et simultan\u00e9ment une mise \u00e0 jour (gpupdate) sur toutes les machines, garantissant ainsi rapidement la conformit\u00e9 et la s\u00e9curit\u00e9.<\/p>\n<h2>Comparaisons<\/h2>\n<p>Les m\u00e9thodes traditionnelles consistent \u00e0 mettre \u00e0 jour manuellement chaque machine ou \u00e0 attendre l&rsquo;actualisation programm\u00e9e de la strat\u00e9gie de groupe. L&rsquo;approche de ce script r\u00e9duit consid\u00e9rablement le temps et les efforts, en \u00e9liminant le besoin d&rsquo;une intervention manuelle et en r\u00e9duisant la p\u00e9riode de vuln\u00e9rabilit\u00e9.<\/p>\n<h2>FAQ<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Ce script est-il compatible avec toutes les versions de Windows ?<\/strong><br \/>\nOui, il fonctionne avec toutes les versions de Windows qui prennent en charge PowerShell et la strat\u00e9gie de groupe.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><strong>Quelle est la diff\u00e9rence avec les mises \u00e0 jour planifi\u00e9es de la strat\u00e9gie de groupe ?<\/strong><br \/>\nCe script force une mise \u00e0 jour imm\u00e9diate, contrairement aux mises \u00e0 jour programm\u00e9es qui suivent un intervalle d\u00e9fini.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\"><strong>Peut-il \u00eatre utilis\u00e9 sur un grand r\u00e9seau ?<\/strong><br \/>\nAbsolument, il est \u00e9volutif et efficace pour les r\u00e9seaux de toute taille.<\/li>\n<\/ul>\n<h2>Implications<\/h2>\n<p>Ce script am\u00e9liore l&rsquo;efficacit\u00e9 et souligne \u00e9galement la n\u00e9cessit\u00e9 d&rsquo;une gestion responsable de la strat\u00e9gie de groupe. Une utilisation incorrecte peut entra\u00eener des probl\u00e8mes g\u00e9n\u00e9ralis\u00e9s sur le r\u00e9seau. Il est donc essentiel de comprendre l&rsquo;impact des changements de strat\u00e9gie avant de proc\u00e9der au d\u00e9ploiement.<\/p>\n<h2>Recommandations<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\"><strong>Tester avant de d\u00e9ployer<\/strong>: Testez toujours le script dans un environnement contr\u00f4l\u00e9 avant de le d\u00e9ployer \u00e0 grande \u00e9chelle.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\"><strong>V\u00e9rifier le retour d&rsquo;information<\/strong>: Soyez attentif au retour d&rsquo;information fourni par le script apr\u00e8s son ex\u00e9cution afin de d\u00e9tecter rapidement tout probl\u00e8me potentiel.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\"><strong>Audits r\u00e9guliers<\/strong>: R\u00e9alisez des audits r\u00e9guliers des strat\u00e9gies afin d&rsquo;en garantir la pertinence et l&rsquo;efficacit\u00e9.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Dans le cadre de la gestion des strat\u00e9gies de groupe, NinjaOne propose des outils qui compl\u00e8tent les <a href=\"https:\/\/www.ninjaone.com\/fr\/script-hub\/\">scripts PowerShell<\/a>, offrant ainsi une plateforme int\u00e9gr\u00e9e pour une <a href=\"https:\/\/www.ninjaone.com\/fr\/\">gestion informatique plus compl\u00e8te<\/a>. En associant des scripts tels que celui pr\u00e9sent\u00e9 ici aux solides capacit\u00e9s de gestion de NinjaOne, les professionnels de l&rsquo;informatique peuvent am\u00e9liorer le contr\u00f4le, l&rsquo;efficacit\u00e9 et la s\u00e9curit\u00e9 de leur r\u00e9seau.<\/p>\n","protected":false},"author":35,"featured_media":192779,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","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":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4287],"class_list":["post-216068","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub\/216068","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=216068"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media\/192779"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media?parent=216068"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/operating_system?post=216068"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/use_cases?post=216068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}