title: Disabling Startup programs
body: <p>I am looking to disable a list of startup programs using PowerShell. I have gotten so far but then hit a wall. Currently I cannot get a second listing of startup programs to list nicely like my first.</p>
  
  <pre class="lang-cs prettyprint-override"><code>function Disable-Startups {
      [CmdletBinding()]
      Param(
          [parameter(DontShow = $true)]
          $32bit = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
          [parameter(DontShow = $true)]
          $32bitRunOnce = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
          [parameter(DontShow = $true)]
          $64bit = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run",
          [parameter(DontShow = $true)]
          $64bitRunOnce = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce",
          [parameter(DontShow = $true)]
          $currentLOU = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
          [parameter(DontShow = $true)]
          $currentLOURunOnce = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
      )
  
      Begin {
          $disableList = @(
              "iTunesHelper",
              "Cisco AnyConnect Secure Mobility Agent for Windows",
              "Ccleaner Monitoring",
              #"SunJavaUpdateSched",
              "Steam",
              "Discord"
          )
          New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS | Out-Null
          $startups = Get-CimInstance Win32_StartupCommand | Select-Object Name,Location
      }
      Process {
          foreach ($startUp in $startUps){
              if ($startUp.Name -in $disableList){
                  $number = ($startUp.Location).IndexOf("\")
                  $location = ($startUp.Location).Insert("$number",":")
                  Write-Output "Disabling $($startUp.Name) from $location)"
                  #Remove-ItemProperty -Path "$location" -Name "$($startUp.name)" 
              }
          }
  
          $regStartList = Get-ItemProperty -Path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce | Format-List
      }
      End {}
  }
  </code></pre>
  
  <p>So basically when <code>$regStartList</code> starts I want the the display name and location of each item for each registry and I want to put all of that into one variable. but I cannot get a nice list like this to be listed</p>
  
  <pre>
  Name                Location
  ----                --------
  OneDriveSetup       HKU\S-1-5-19\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  OneDriveSetup       HKU\S-1-5-20\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  Send to OneNote     Startup
  OneDrive            HKU\S-1-5-21-3687383513-804626811-2257261628-1001\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  CCleaner Monitoring HKU\S-1-5-21-3687383513-804626811-2257261628-1001\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  </pre>
  
  <p>But instead get this, even if I run.</p>
  
  <pre><code>$regStartList = Get-ItemProperty -Path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce | Select-Object name,location
  
  name location
  ---- --------
  </code></pre>
  
  <p>Some reason there is not a location or name/displayname that gets grabbed.</p>
  
  <p>EDIT:
  I answered my own question but if someone has a better one let me know.</p>
  
  <pre><code>$regStartList = Get-Item -path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce |
      Where-Object {$_.ValueCount -ne 0} | Select-Object  property,name
  
  foreach ($regName in $regStartList.name) {
     $regNumber = ($regName).IndexOf("\")
     $regLocation = ($regName).Insert("$regNumber",":")
     if ($regLocation -like "*HKEY_LOCAL_MACHINE*"){
      $regLocation = $regLocation.Replace("HKEY_LOCAL_MACHINE","HKLM")
      write-host $regLocation
     }
     if ($regLocation -like "*HKEY_CURRENT_USER*"){
      $regLocation = $regLocation.Replace("HKEY_CURRENT_USER","HKCU")
      write-host $regLocation
     }
      foreach($disable in $disableList) {
         if (Get-ItemProperty -Path "$reglocation" -name "$Disable"-ErrorAction SilentlyContinue) {
              Write-host "yeah i exist"
              #Remove-ItemProperty -Path "$location" -Name "$($startUp.name)" -whatif
         }else {write-host "no exist"}
      }   
  
  }
  </code></pre>