<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Local-Pc on homelab</title>
    <link>https://homelab.nbkelley.com/tags/local-pc/</link>
    <description>Recent content in Local-Pc on homelab</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 30 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://homelab.nbkelley.com/tags/local-pc/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PowerShell Local PC Scripting Patterns</title>
      <link>https://homelab.nbkelley.com/docs/scripts/powershell-local-pc-troubleshooting/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/scripts/powershell-local-pc-troubleshooting/</guid>
      <description>&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Standardized PowerShell commands for local file operations and MSI package management.&lt;/li&gt;&#xA;&lt;li&gt;A streamlined, linear pattern for automating software installation, execution, and uninstallation on local Windows hosts without over-engineering modular functions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prefer &lt;code&gt;Get-ChildItem&lt;/code&gt; with wildcards (&lt;code&gt;C:\Users\*\Downloads\*.msi&lt;/code&gt;) for rapid file discovery over manual profile loops.&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;Start-Process&lt;/code&gt; with &lt;code&gt;msiexec.exe&lt;/code&gt; for silent MSI installs (&lt;code&gt;/qn&lt;/code&gt;) to keep scripts concise for linear workflows.&lt;/li&gt;&#xA;&lt;li&gt;Simplified error handling and removed verbose logging for basic administrative tasks, reserving complex wrappers for larger automation frameworks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-configuration--patterns&#34;&gt;Current Configuration / Patterns&lt;a class=&#34;anchor&#34; href=&#34;#current-configuration--patterns&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;file-listing--discovery&#34;&gt;File Listing &amp;amp; Discovery&lt;a class=&#34;anchor&#34; href=&#34;#file-listing--discovery&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# List files recursively, sorted newest first&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-ChildItem -Path &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Path&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-File&lt;/span&gt; -Recurse | Sort-Object LastWriteTime -Descending&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Find first matching file across user profiles&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-ChildItem &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\*\Downloads\CleanUpTool.msi&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue | Select-Object -First &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;file-copying&#34;&gt;File Copying&lt;a class=&#34;anchor&#34; href=&#34;#file-copying&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Copy single file, force overwrite&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Copy-Item -Path &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Source\File.ext&amp;#34;&lt;/span&gt; -Destination &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Target\&amp;#34;&lt;/span&gt; -Force&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Copy entire directory tree&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Copy-Item -Path &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Source\*&amp;#34;&lt;/span&gt; -Destination &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\Destination\&amp;#34;&lt;/span&gt; -Recurse&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;msi-install--run--uninstall-pattern&#34;&gt;MSI Install / Run / Uninstall Pattern&lt;a class=&#34;anchor&#34; href=&#34;#msi-install--run--uninstall-pattern&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Requires&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;-RunAsAdministrator&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1. Find and Install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$cleanupPath = Get-ChildItem &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\*\Downloads\CleanUpTool.msi&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue | Select-Object -First &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($cleanupPath) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Start-Process &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;msiexec.exe&amp;#34;&lt;/span&gt; -ArgumentList &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/i &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;`&amp;#34;&lt;/span&gt;$($cleanupPath.FullName)&lt;span style=&#34;color:#ae81ff&#34;&gt;`&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; /qn&amp;#34;&lt;/span&gt; -Wait&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 2. Run (locate executable in Program Files)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $exePath = Get-ChildItem &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files (x86)\&amp;#34;&lt;/span&gt; -Recurse -Filter &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*CleanUpTool*.exe&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue | Select-Object -First &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($exePath) { Start-Process $exePath.FullName -Wait }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 3. Uninstall&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $product = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name &lt;span style=&#34;color:#f92672&#34;&gt;-like&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*CleanUpTool*&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($product) { $product.Uninstall() }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 4. Install Next Package&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$foxitPath = Join-Path $PSScriptRoot &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Foxit.msi&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Test-Path $foxitPath) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Start-Process &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;msiexec.exe&amp;#34;&lt;/span&gt; -ArgumentList &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/i &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;`&amp;#34;&lt;/span&gt;$foxitPath&lt;span style=&#34;color:#ae81ff&#34;&gt;`&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; /qn&amp;#34;&lt;/span&gt; -Wait&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;historical-notes&#34;&gt;Historical Notes&lt;a class=&#34;anchor&#34; href=&#34;#historical-notes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conversation dated 2025-06-11. The simplified linear script approach was explicitly chosen over a modular function-based approach to reduce overhead for routine local PC tasks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Get-WmiObject -Class Win32_Product&lt;/code&gt; is a legacy enumeration method. While functional for basic scripts, it is known to trigger package repairs and is slow on large systems. Consider migrating to &lt;code&gt;Get-CimInstance -Class Win32_Product&lt;/code&gt; or querying &lt;code&gt;HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall&lt;/code&gt; for production use.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;open-questions&#34;&gt;Open Questions&lt;a class=&#34;anchor&#34; href=&#34;#open-questions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does the local PC environment still rely on &lt;code&gt;Get-WmiObject&lt;/code&gt; for software inventory, or has it migrated to &lt;code&gt;Get-CimInstance&lt;/code&gt; / registry queries?&lt;/li&gt;&#xA;&lt;li&gt;Are there standardized locations for MSI installers beyond user Downloads and script root for future automation?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-pages&#34;&gt;Related Pages&lt;a class=&#34;anchor&#34; href=&#34;#related-pages&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/scripts/powershell-cleanup-patterns.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/scripts/bulk-folder-rename-script.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/administration/powershell-administration-commands.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;a class=&#34;anchor&#34; href=&#34;#sources&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ingested/chats/056-List Files in Folder Using PowerShell.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;DeepSeek conversation: &amp;ldquo;List Files in Folder Using PowerShell&amp;rdquo; (2025-06-11)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
