Skip to content
David Kittell
David Kittell

Application & System: Development / Integration / Orchestration

  • Services
    • Application Development
    • Online Application Integration
  • Code
  • Online Tools
  • Tech Support
David Kittell

Application & System: Development / Integration / Orchestration

PowerShell – Prevent Kids From Installing/Running Specific Programs

Posted on January 1, 2019January 11, 2019 By David Kittell

If you use the Microsoft Family settings for your kids and can’t figure out how to prevent them from installing Chrome or Chromium this will help.

This PowerShell script (ran as Administrator) will create/modify the user folders to prevent users from accessing the needed folders to run the two programs.

# List all users and last time used
#gwmi win32_userprofile | select @{LABEL="last used";EXPRESSION={$_.ConvertToDateTime($_.lastusetime)}}, LocalPath, SID,  Status, Disabled, AccountType, Lockout, special, PasswordRequired | ft -a

# List all users capable of logging in
Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" | Where-Object { $_.Disabled -ne 'False' -and $_.PasswordRequired -eq 'True' } | Select-Object PSComputername,Fullname,Name,Status,Disabled,AccountType,Lockout,PasswordRequired,PasswordChangeable,SID | Format-Table
$users = $(Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" | Where-Object { $_.Disabled -ne 'False' -and $_.PasswordRequired -eq 'True' })

foreach ($user in $users)
{
  $user.Name

  $user1 = $(gwmi win32_userprofile | Where-Object { $_.SID -like "$($user.SID.SubString(0,8))*" } | Select-Object @{ LABEL = "last used"; EXPRESSION = { $_.ConvertToDateTime($_.lastusetime) } },LocalPath,SID,Status,Disabled,AccountType,Lockout,special,PasswordRequired)

  if ($(Test-Path $user1.LocalPath) -eq $True) {
    $userpaths = $user1.LocalPath
  }

}

foreach ($userpath in $userpaths | Get-Unique)
{
  Write-Output "Looking for $userpath\AppData\Local\Google"
  $path = "$userpath\AppData\Local\Google"
  if ($(Test-Path $path) -eq $True) {
    # Google is installed
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }
  else
  {
    # Google is not installed
    mkdir -Force $path
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }

  Write-Output "Looking for $userpath\AppData\Local\Chromium"
  $path = "$userpath\AppData\Local\Chromium"
  if ($(Test-Path $path) -eq $True) {
    # Chromium is installed
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }
  else
  {
    # Chromium is not installed
    mkdir -Force $path
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }

  Write-Output "Looking for $userpath\AppData\Local\Roblox"
  $path = "$userpath\AppData\Local\Roblox"
  if ($(Test-Path $path) -eq $True) {
    # Roblox is installed
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }
  else
  {
    # Roblox is not installed
    mkdir -Force $path
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }


  Write-Output "Looking for $userpath\AppData\Local\Steam"
  $path = "$userpath\AppData\Local\Steam"
  if ($(Test-Path $path) -eq $True) {
    # Steam is installed
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }
  else
  {
    # Steam is not installed
    mkdir -Force $path
    #Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
    Get-Item "$path" | Disable-NTFSAccessInheritance
    Get-Item "$path" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl

    Get-Item "$path\*" | Disable-NTFSAccessInheritance
    Get-Item "$path\*" | Get-NTFSAccess | Remove-NTFSAccess
    Get-Item "$path\*" | Add-NTFSAccess -Account 'builtin\administrators' -AccessRights FullControl
  }

}

<#
#Install-Module -Name NTFSSecurity
Get-Item $path | Get-NTFSAccess –ExcludeInherited | Out-File c:\temp\OriginalPermissions.txt -Append
Get-Item "$path\*" | Disable-NTFSAccessInheritance
 
Get-Item "$path\*" | Get-NTFSAccess -ExcludeExplicit builtin\administrators | Remove-NTFSAccess
Get-Item "$path\*" | Set-NTFSOwner -Account builtin\administrators
#>
# Block Microsoft Store (within Windows) - Run as Administrator
# NOTE This block is for all users of the computer.
Write-Output "0.0.0.0 livetileedge.dsx.mp.microsoft.com" | Add-Content "C:\Windows\System32\drivers\etc\hosts"
Write-Output "0.0.0.0 store-images.s-microsoft.com" | Add-Content "C:\Windows\System32\drivers\etc\hosts"
Write-Output "0.0.0.0 storeedgefd.dsx.mp.microsoft.com" | Add-Content "C:\Windows\System32\drivers\etc\hosts"
Write-Output "0.0.0.0 vrv.colivetileedge.dsx.mp.microsoft.com" | Add-Content "C:\Windows\System32\drivers\etc\hosts"

Originally Posted on January 1, 2019
Last Updated on January 11, 2019
All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility for any damage you may do with this code.

Related

Azure CLI Functions

Post navigation

Previous post
Next post

Related Posts

Mac OSX – Install PHP

Posted on April 9, 2018

All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility…

Read More

Azure – CLI – Build Windows/UNIX VM Function (With or without public IP)

Posted on December 19, 2017

In the functions below the VM name is used in all of the pieces to build the VM to simplify documentation. Important Items: As I use a Firewall appliance in Azure I do not set Network Security Groups (NSG). I have a predefined virtual network (VN) and predefined network subnet…

Read More

Azure CLI – Convert VM Dynamic IP to Static IP

Posted on April 5, 2018

If you create your VM with Dynamic IPs DHCP will grab the first available IP but some VMs are best on a static IP. This script below will get the existing IP of the ipconfig and reassign it to the same ipconfig as a static IP. All information on this…

Read More

Code

Top Posts & Pages

  • PowerShell - Rename Pictures to Image Taken
  • Front Page
  • C# - Start/Stop/Restart Services
  • MacPorts / HomeBrew - Rip CD tracks from terminal
  • PowerShell - Show File Extensions

Recent Posts

  • Javascript – Digital Clock with Style
  • BASH – Web Ping Log
  • BASH – Picture / Video File Name Manipulation
  • Mac OSX Terminal – Create SSH Key
  • Bash – Rename Picture

Top Posts

  • PowerShell - Rename Pictures to Image Taken
  • C# - Start/Stop/Restart Services
  • MacPorts / HomeBrew - Rip CD tracks from terminal
  • PowerShell - Show File Extensions
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID
©2025 David Kittell | WordPress Theme by SuperbThemes