increasing speed of 'Sources using Powershell Remote Sessions
TLDR: don't load session profiles when using Powershell Remote. Use an explicit pssession with the -nomachineprofile flag present.
Several LM provided 'Sources use it. Many of the 'Sources I've written in the past use it as well. Here's the find/replace for the LM provided ones (find & replace are separated into comment regions):
<span class="com">#region FIND</span><span class="pln">
</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">#-----Determin the type of query to make-----</span><span class="pln">
</span><span class="com"># check to see if this is monitoring the localhost collector, as we will not need to authenticate.</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$hostname </span><span class="pun">-</span><span class="pln">like $collectorName</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Invoke</span><span class="pun">-</span><span class="typ">Command</span><span class="pln"> </span><span class="pun">-</span><span class="typ">ScriptBlock</span><span class="pln"> $scriptBlock
</span><span class="pun">}</span><span class="pln">
</span><span class="com"># are wmi user/pass set -- e.g. are these device props either not substiuted or blank</span><span class="pln">
elseif </span><span class="pun">(([</span><span class="pln">string</span><span class="pun">]::</span><span class="typ">IsNullOrWhiteSpace</span><span class="pun">(</span><span class="pln">$wmi_user</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">and </span><span class="pun">[</span><span class="pln">string</span><span class="pun">]::</span><span class="typ">IsNullOrWhiteSpace</span><span class="pun">(</span><span class="pln">$wmi_pass</span><span class="pun">))</span><span class="pln"> </span><span class="pun">-</span><span class="pln">or </span><span class="pun">((</span><span class="pln">$wmi_user </span><span class="pun">-</span><span class="pln">like </span><span class="str">'*WMI.USER*'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">and </span><span class="pun">(</span><span class="pln">$wmi_pass </span><span class="pun">-</span><span class="pln">like </span><span class="str">'*WMI.PASS*'</span><span class="pun">)))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># no</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Invoke</span><span class="pun">-</span><span class="typ">Command</span><span class="pln"> </span><span class="pun">-</span><span class="typ">ComputerName</span><span class="pln"> $hostname </span><span class="pun">-</span><span class="typ">ScriptBlock</span><span class="pln"> $scriptBlock
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># yes. convert user/password into a credential string</span><span class="pln">
$remote_pass </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ConvertTo</span><span class="pun">-</span><span class="typ">SecureString</span><span class="pln"> </span><span class="pun">-</span><span class="typ">String</span><span class="pln"> $wmi_pass </span><span class="pun">-</span><span class="typ">AsPlainText</span><span class="pln"> </span><span class="pun">-</span><span class="typ">Force</span><span class="pun">;</span><span class="pln">
$remote_credential </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pun">-</span><span class="typ">Object</span><span class="pln"> </span><span class="pun">-</span><span class="kwd">typename</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Management</span><span class="pun">.</span><span class="typ">Automation</span><span class="pun">.</span><span class="typ">PSCredential</span><span class="pln"> </span><span class="pun">-</span><span class="pln">argumentlist $wmi_user</span><span class="pun">,</span><span class="pln"> $remote_pass</span><span class="pun">;</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Invoke</span><span class="pun">-</span><span class="typ">Command</span><span class="pln"> </span><span class="pun">-</span><span class="typ">ComputerName</span><span class="pln"> $hostname </span><span class="pun">-</span><span class="typ">Credential</span><span class="pln"> $remote_credential </span><span class="pun">-</span><span class="typ">ScriptBlock</span><span class="pln"> $scriptBlock
</span><span class="pun">}</span><span class="pln">
exit </span><span class="lit">0</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># exit code of non 0 will mean the script failed and not overwrite the instances that have already been found</span><span class="pln">
</span><span class="kwd">throw</span><span class="pln"> $Error</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="typ">Exception</span><span class="pln">
exit </span><span class="lit">1</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">#endregion</span><span class="pln">
</span><span class="com">#region REPLACE</span><span class="pln">
</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$option </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pun">-</span><span class="typ">PSSessionOption</span><span class="pln"> </span><span class="pun">-</span><span class="typ">NoMachineProfile</span><span class="pln">
</span><span class="com">#-----Determin the type of query to make-----</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$hostname </span><span class="pun">-</span><span class="pln">like $collectorName</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># check to see if this is monitoring the localhost collector,</span><span class="pln">
</span><span class="com"># as we will not need to authenticate.</span><span class="pln">
$session </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pun">-</span><span class="pln">pssession </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">SessionOption</span><span class="pln"> $option
</span><span class="pun">}</span><span class="pln"> elseif </span><span class="pun">(</span><span class="pln">
</span><span class="pun">([</span><span class="pln">string</span><span class="pun">]::</span><span class="typ">IsNullOrWhiteSpace</span><span class="pun">(</span><span class="pln">$wmi_user</span><span class="pun">)</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">and </span><span class="pun">[</span><span class="pln">string</span><span class="pun">]::</span><span class="typ">IsNullOrWhiteSpace</span><span class="pun">(</span><span class="pln">$wmi_pass</span><span class="pun">))</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">or </span><span class="pun">(</span><span class="pln">
</span><span class="pun">(</span><span class="pln">$wmi_user </span><span class="pun">-</span><span class="pln">like </span><span class="str">'*WMI.USER*'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">and </span><span class="pun">(</span><span class="pln">$wmi_pass </span><span class="pun">-</span><span class="pln">like </span><span class="str">'*WMI.PASS*'</span><span class="pun">)</span><span class="pln">
</span><span class="pun">)</span><span class="pln">
</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># are wmi user/pass set</span><span class="pln">
</span><span class="com"># -- e.g. are these device props either not substiuted or blank</span><span class="pln">
</span><span class="com"># no</span><span class="pln">
$session </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pun">-</span><span class="pln">pssession </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">computername $hostname </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">SessionOption</span><span class="pln"> $option
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># yes. convert user/password into a credential string</span><span class="pln">
$remote_pass </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ConvertTo</span><span class="pun">-</span><span class="typ">SecureString</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">String</span><span class="pln"> $wmi_pass </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">AsPlainText</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">Force</span><span class="pun">;</span><span class="pln">
$remote_credential </span><span class="pun">=</span><span class="pln"> </span><span class="typ">New</span><span class="pun">-</span><span class="typ">Object</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="kwd">typename</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Management</span><span class="pun">.</span><span class="typ">Automation</span><span class="pun">.</span><span class="typ">PSCredential</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">argumentlist $wmi_user</span><span class="pun">,</span><span class="pln"> $remote_pass</span><span class="pun">;</span><span class="pln">
$session </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pun">-</span><span class="pln">pssession </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">computername $hostname </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">credential $remote_credential </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">SessionOption</span><span class="pln"> $option
</span><span class="pun">}</span><span class="pln">
$response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Invoke</span><span class="pun">-</span><span class="typ">Command</span><span class="pln"> </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="pln">session $session </span><span class="pun">`</span><span class="pln">
</span><span class="pun">-</span><span class="typ">ScriptBlock</span><span class="pln"> $scriptBlock
exit </span><span class="lit">0</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com"># exit code of non 0 will mean the script failed and not overwrite the instances</span><span class="pln">
</span><span class="com"># that have already been found</span><span class="pln">
</span><span class="kwd">throw</span><span class="pln"> $Error</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="typ">Exception</span><span class="pln">
exit </span><span class="lit">1</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">#endregion</span>p.s. the replacement code has the formatting I prefer. Feel free to change it to suit your whitespace/line length needs. Mine is a blend of every language I've ever used as I traditionally have been the only one looking at my code. I call my formatting method the "I have to fix this 2 years from now and have a half an hour to figure it out" format. generally, 1 specific function per line, sections that collapse into a single line to make it easier to work through the code. The first character of each line should inform how it relates to the line above it. spaces added to make neat functional columns of similar parts of the line (parameter name, variable). Most programmers hate the formatting I use, but it works for me. There are line continuation characters " `" to make it all fall into place.