<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://pspas.pspete.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pspas.pspete.dev/" rel="alternate" type="text/html" /><updated>2025-10-01T21:14:54+00:00</updated><id>https://pspas.pspete.dev/feed.xml</id><title type="html">psPAS</title><subtitle>psPAS.</subtitle><author><name>Pete Maan</name></author><entry><title type="html">psPAS Release 7.0</title><link href="https://pspas.pspete.dev/articles/pspas-release-7-0/" rel="alternate" type="text/html" title="psPAS Release 7.0" /><published>2025-09-15T00:00:00+00:00</published><updated>2025-09-15T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-7-0</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-7-0/"><![CDATA[<h2 id="70232">[7.0.232]</h2>

<h3 id="added">Added</h3>

<ul>
  <li>N/A</li>
</ul>

<h3 id="updated">Updated</h3>

<ul>
  <li>Tests updated for latest module commands</li>
  <li>Applies a general code format update across module functions ensuring consistency.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Add-PASSafeMember</code> &amp; <code class="language-plaintext highlighter-rouge">Set-PASSafeMember</code>
    <ul>
      <li>Resolves issue introduced in previous release where, when adding or setting safe permissions in a loop, the loop could break preventing completion fo the task.</li>
      <li>Thanks <a href="https://github.com/Slasky86">Slasky86</a>!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASDependentAccount</code>
    <ul>
      <li>Fixes result pagination to ensure all results are returned on command execution.</li>
      <li>Fixes incorrect filter string being used for request in certain circumstances.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPTASMTP</code>
    <ul>
      <li>Fixes validation logic when specifying parameter values from the pipeline</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
    <ul>
      <li>Ensures dynamic parameters are only presented for Self-Hosted users.</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountSearchProperty</code>
    <ul>
      <li>Enforces command to only be able to be run against self-hosted solutions.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPTASecurityConfigurationCategory</code>
    <ul>
      <li>Fixes issue where URI for request may not be set on command execution.</li>
    </ul>
  </li>
</ul>

<h2 id="70209"><strong>7.0.209</strong></h2>

<p><strong>Special shout out to <a href="https://github.com/johannesconsulting">JP-Consulting</a> for the help on this release</strong></p>

<p><em>Update includes almost all updates for the 14.2, 14.4 &amp; 14.6 CyberArk Self-Hosted Releases</em></p>

<h3 id="added-1">Added</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Enable-PASTheme</code>
    <ul>
      <li>New 14.6 command to activate a custom UI theme</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASTheme</code>
    <ul>
      <li>New 14.6 command to delete a custom UI theme</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Import-PASThemeImage</code>
    <ul>
      <li>New 14.6 command to import an image to use in a custom UI theme</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Export-PASThemeImage</code>
    <ul>
      <li>New 14.6 command to export an image used in a custom UI theme</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Reset-PASTheme</code>
    <ul>
      <li>New 14.6 command to reset the UI theme to default</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Publish-PASTheme</code>
    <ul>
      <li>New 14.6 command to change the draft status of a custom UI theme</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASTheme</code>
    <ul>
      <li>New 14.6 command to return details of custom UI themes</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASTheme</code>
    <ul>
      <li>New 14.6 command to create a new custom UI theme</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASTheme</code>
    <ul>
      <li>New 14.6 command to update a custom UI theme</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASStoredPlatform</code>
    <ul>
      <li>New 14.6 command to get details of platforms stored in memory for import</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASStoredPlatform</code>
    <ul>
      <li>New 14.6 command to delete a stored platform from memory</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASUserLicenseReport</code>
    <ul>
      <li>Returns information about usage of Privilege Cloud user licenses</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASReport</code>
    <ul>
      <li>New 14.6 command to list reports available to your user</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASReportSchedule</code>
    <ul>
      <li>New 14.6 command to list report schedules</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASReportSchedule</code>
    <ul>
      <li>New 14.6 command to create a scheduled report</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Export-PASReport</code>
    <ul>
      <li>New 14.6 command to export an available report</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASUserAllowedAuthenticationMethod</code>
    <ul>
      <li>New 14.4 command to remove allowed authentication methods from multiple users in a single request</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASUserAllowedAuthenticationMethod</code>
    <ul>
      <li>New 14.4 command to add allowed authentication methods to multiple users in a single request</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASFIDO2Device</code>
    <ul>
      <li>New 14.6 command to remove a configured FIDO2 device from a user</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASMasterPolicy</code>
    <ul>
      <li>New 14.6 command to list Master Policy settings</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASMasterPolicy</code>
    <ul>
      <li>New 14.6 command to update Master Policy settings</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to delete dependent accounts</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Resume-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to resume password management of dependent accounts</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to list details of dependent accounts</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Sync-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to synchronise the password of a dependent account with its master account</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to update a dependent account</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASDependentAccount</code>
    <ul>
      <li>New 14.6 command to add a new dependent account</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASPTASecurityConfigurationProperty</code>
    <ul>
      <li>New 14.6 command to delete PTA security configuration properties</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Reset-PASPTASecurityConfigurationProperty</code>
    <ul>
      <li>New 14.6 command to reset PTA security configuration properties</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Reset-PASPTASecurityConfigurationCategory</code>
    <ul>
      <li>New 14.6 command to reset PTA security configuration categories</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPTASecurityConfigurationCategory</code>
    <ul>
      <li>New 14.6 command to return PTA security configuration categories</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASPTASyslog</code>
    <ul>
      <li>New 14.6 command to add a new syslog configuration to PTA</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASPTASyslog</code>
    <ul>
      <li>New 14.6 command to remove a syslog configuration from PTA</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPTASMTP</code>
    <ul>
      <li>New 14.4 command to add a new SMTP configuration to PTA</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountSearchProperty</code>
    <ul>
      <li>New 14.6 command to list configured search properties</li>
    </ul>
  </li>
</ul>

<h3 id="updated-1">Updated</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Add-PASSafeMember</code>
    <ul>
      <li>Updated to include permission pre-sets to match functionality available via PVWA</li>
      <li>Thanks <a href="https://github.com/Slasky86">Slasky86</a>!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASSafeMember</code>
    <ul>
      <li>Updated to include permission pre-sets to match functionality available via PVWA</li>
      <li>Thanks <a href="https://github.com/Slasky86">Slasky86</a>!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
    <ul>
      <li>Updated to handle new quoting model for filter operations in version 14.6</li>
      <li>Adds dynamic search properties to the filter parameters list</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASAccount</code>
    <ul>
      <li>Added <code class="language-plaintext highlighter-rouge">AllowAccountDuplications</code> parameter, which works in conjunction with the 14.6 <code class="language-plaintext highlighter-rouge">AccountDuplicationEnforcementLevel</code> setting</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Import-PASPlatform</code>
    <ul>
      <li>New parameter sets added to support updating existing platforms and side-by-side imports</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASDirectoryMapping</code>, <code class="language-plaintext highlighter-rouge">Set-PASDirectoryMapping</code>
    <ul>
      <li>Added the <code class="language-plaintext highlighter-rouge">allowedAuthenticationMethods</code> parameter</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASUser</code>, <code class="language-plaintext highlighter-rouge">Set-PASUser</code>
    <ul>
      <li>Added the <code class="language-plaintext highlighter-rouge">allowedAuthenticationMethods</code> parameter</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASComponentSummary</code>
    <ul>
      <li>Now includes vault replication data in command output</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Approve-PASRequest</code>
    <ul>
      <li>Adds support for bulk approvals using a single request</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Deny-PASRequest</code>
    <ul>
      <li>Adds support for bulk rejections using a single request</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASAccountPassword</code>
    <ul>
      <li>Updated to include additional error checking</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASAccountObject</code>
    <ul>
      <li>Updated to create formatted objects for Dependent Account operations</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASSafe</code>
    <ul>
      <li>Fixed issue with incorrectly defined <code class="language-plaintext highlighter-rouge">sort</code> parameter</li>
      <li>Adds sortDirection parameter to enable ascending or descending sort of safes by SafeName or Managing CPM</li>
    </ul>
  </li>
  <li>Script Methods
    <ul>
      <li><code class="language-plaintext highlighter-rouge">ToCredential()</code>
        <ul>
          <li>Available on password objects</li>
          <li>Allows password values returned from the API to be converted to Credential objects</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">GetPermissions()</code>
        <ul>
          <li>Available on Safe Member objects</li>
          <li>Enables conversion of safe ACL to hashtable which can be used to splat against Add-PASSafeMember &amp; Set-PASSafeMember</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">ToHashtable()</code>
        <ul>
          <li>Available on Account objects.</li>
          <li>Converts an Account object to a hashtable so that it can be splatted against Add-PASAccount</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Various corrections to help file contents</li>
</ul>

<h3 id="fixed-1">Fixed</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASSAMLResponse</code>
    <ul>
      <li>Fixes a responsibly disclosed security vulnerability where TLS 1.2 was not enforced when a value for the SAMLResponse parameter was not provided to the New-PASSession command when using the Gen2SAML ParameterSet.</li>
      <li>Much Respect to <a href="https://cgaber.com">Cristian Gaber</a> for highlighting this to us.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountPassword</code>
    <ul>
      <li>Fixes a parsing issue that could affect password values returned from the command.</li>
      <li>Thanks <a href="https://github.com/ChristopherRanney">ChristopherRanney</a>!!</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASPublicSSHKey</code>, <code class="language-plaintext highlighter-rouge">Get-PASPublicSSHKey</code>, <code class="language-plaintext highlighter-rouge">Remove-PASPublicSSHKey</code>
    <ul>
      <li>Corrects the URLs used by the commands</li>
      <li>Thanks <a href="https://github.com/johannesconsulting">JP-Consulting</a>!!!</li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Remove-PASPublicSSHKey" /><category term="Get-PASPublicSSHKey" /><category term="Add-PASPublicSSHKey" /><category term="Get-PASAccountPassword" /><category term="Get-PASSAMLResponse" /><category term="Get-PASSafe" /><category term="New-PASAccountObject" /><category term="New-PASAccountPassword" /><category term="Enable-PASTheme" /><category term="Remove-PASTheme" /><category term="Import-PASThemeImage" /><category term="Export-PASThemeImage" /><category term="Reset-PASTheme" /><category term="Publish-PASTheme" /><category term="Get-PASTheme" /><category term="New-PASTheme" /><category term="Set-PASTheme" /><category term="Get-PASStoredPlatform" /><category term="Remove-PASStoredPlatform" /><category term="Get-PASUserLicenseReport" /><category term="Get-PASReport" /><category term="Get-PASReportSchedule" /><category term="New-PASReportSchedule" /><category term="Export-PASReport" /><category term="Remove-PASUserAllowedAuthenticationMethod" /><category term="Add-PASUserAllowedAuthenticationMethod" /><category term="Remove-PASFIDO2Device" /><category term="Get-PASMasterPolicy" /><category term="Set-PASMasterPolicy" /><category term="Remove-PASDependentAccount" /><category term="Resume-PASDependentAccount" /><category term="Get-PASDependentAccount" /><category term="Sync-PASDependentAccount" /><category term="Set-PASDependentAccount" /><category term="Add-PASDependentAccount" /><category term="Remove-PASPTASecurityConfigurationProperty" /><category term="Reset-PASPTASecurityConfigurationProperty" /><category term="Reset-PASPTASecurityConfigurationCategory" /><category term="Get-PASPTASecurityConfigurationCategory" /><category term="Add-PASPTASyslog" /><category term="Remove-PASPTASyslog" /><category term="Set-PASPTASMTP" /><category term="Get-PASAccountSearchProperty" /><category term="Add-PASSafeMember" /><category term="Set-PASSafeMember" /><category term="Get-PASAccount" /><category term="Add-PASAccount" /><category term="Import-PASPlatform" /><category term="New-PASDirectoryMapping" /><category term="Set-PASDirectoryMapping" /><category term="New-PASUser" /><category term="Set-PASUser" /><category term="Get-PASComponentSummary" /><category term="Approve-PASRequest" /><category term="Deny-PASRequest" /><summary type="html"><![CDATA[[7.0.232]]]></summary></entry><entry><title type="html">psPAS Release 6.4</title><link href="https://pspas.pspete.dev/articles/pspas-release-6-4/" rel="alternate" type="text/html" title="psPAS Release 6.4" /><published>2024-06-04T00:00:00+00:00</published><updated>2024-06-04T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-6-4</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-6-4/"><![CDATA[<h2 id="6485"><strong>6.4.85</strong></h2>

<h3 id="added">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="updated">Updated</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="fixed">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Set-PASUser</code>
    <ul>
      <li>Adds logic to not attempt conversion to unix time if expiry date is not a valid datetime object, this resolves an issue where an error was raised when updating an account with an existing value for the <code class="language-plaintext highlighter-rouge">expirydate</code> property</li>
      <li>Adds logic to not apply time zone offset when specifying Unix epoch time to remove an expiry date from an account which could previously result in an invalid time value in non-GMT time zones.</li>
    </ul>
  </li>
</ul>

<h2 id="6480"><strong>6.4.80</strong></h2>

<p>Includes a general update across multiple module commands to ensure commands which are specific to self-hosted implementations are not able to be run against Privilege Cloud, and any commands which are specific to Privilege Cloud are not able to be run against a Self-Hosted solution.</p>

<h3 id="added-1">Added</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASIPAllowList</code>
    <ul>
      <li>Privilege Cloud only command to show IP Allow List</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASIPAllowList</code>
    <ul>
      <li>Privilege Cloud only command to set IP Allow List</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASBYOKConfig</code>
    <ul>
      <li>Privilege Cloud only command to show BYOK Config</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Publish-PASDiscoveredLocalAccount</code>
    <ul>
      <li>Privilege Cloud only command to publish discovered local account</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASDiscoveredLocalAccountActivity</code>
    <ul>
      <li>Privilege Cloud only command to show discovered local account activity</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASDiscoveredLocalAccount</code>
    <ul>
      <li>Privilege Cloud only command to show local discovered account details</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Clear-PASDiscoveredLocalAccount</code>
    <ul>
      <li>Privilege Cloud only command to delete all discovered local accounts from the Pending Accounts list.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASDiscoveredLocalAccount</code>
    <ul>
      <li>Privilege Cloud only command to add a specific local account to the Discovered Accounts list</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASDiscoveredLocalAccount</code>
    <ul>
      <li>Privilege Cloud only command to remove a local account from the Discovered Accounts list</li>
    </ul>
  </li>
</ul>

<h3 id="updated-1">Updated</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code>
    <ul>
      <li>Improvements to error handling</li>
    </ul>
  </li>
</ul>

<h3 id="fixed-1">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPSMRecording</code>
    <ul>
      <li>Fixes result paging issue</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPSMSession</code>
    <ul>
      <li>Fixes result paging issue</li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Get-PASPSMRecording" /><category term="Get-PASIPAllowList" /><category term="Set-PASIPAllowList" /><category term="Get-PASBYOKConfig" /><category term="Publish-PASDiscoveredLocalAccount" /><category term="Get-PASDiscoveredLocalAccountActivity" /><category term="Get-PASDiscoveredLocalAccount" /><category term="Clear-PASDiscoveredLocalAccount" /><category term="Add-PASDiscoveredLocalAccount" /><category term="Remove-PASDiscoveredLocalAccount" /><category term="Invoke-PASRestMethod" /><category term="Get-PASPSMSession" /><category term="Set-PASUser" /><summary type="html"><![CDATA[6.4.85]]></summary></entry><entry><title type="html">psPAS Release 6.3</title><link href="https://pspas.pspete.dev/articles/pspas-release-6-3/" rel="alternate" type="text/html" title="psPAS Release 6.3" /><published>2024-03-21T00:00:00+00:00</published><updated>2024-03-21T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-6-3</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-6-3/"><![CDATA[<h2 id="6378"><strong>6.3.78</strong></h2>

<h3 id="added">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="updated">Updated</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPSMRecording</code>
    <ul>
      <li>In-line with PVWA default operation:
        <ul>
          <li>Changed the default limit for each page of results to 100, in-line with PVWA default values</li>
          <li>Updated to return recordings from the last 48 hours by default when <code class="language-plaintext highlighter-rouge">FromTime</code> &amp; <code class="language-plaintext highlighter-rouge">ToTime</code> parameters are not specified.</li>
        </ul>
      </li>
      <li>When specifying <code class="language-plaintext highlighter-rouge">ToTime</code> without <code class="language-plaintext highlighter-rouge">FromTime</code>, recordings from the 48 hours before <code class="language-plaintext highlighter-rouge">ToTime</code> are returned.
        <ul>
          <li>This avoids potential for unintentionally long running queries which return details of many recording from the vault.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASUser</code>
    <ul>
      <li>Updated to query for, and send, any existing user properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the user object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
        </ul>
      </li>
      <li>Allows Empty argument for <code class="language-plaintext highlighter-rouge">unAuthorizedInterfaces</code> &amp; <code class="language-plaintext highlighter-rouge">vaultAuthorization</code> parameters to enable set values to be cleared.</li>
      <li>Corrects ValidateSet for <code class="language-plaintext highlighter-rouge">unAuthorizedInterfaces</code> parameter.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASSafe</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASOpenIDConnectProvider</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
          <li>Number of mandatory parameters required to be specified has been reduced</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPTARule</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
          <li>Number of mandatory parameters required to be specified has been reduced</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASDirectoryMapping</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
          <li>Number of mandatory parameters required to be specified has been reduced</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASOnboardingRule</code>
    <ul>
      <li>Reordered parameters to simplify tab completion options</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASOnboardingRule</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
          <li>Number of mandatory parameters required to be specified has been reduced</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPlatformPSMConfig</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
          <li>Number of mandatory parameters required to be specified has been reduced</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASSafeMember</code>
    <ul>
      <li>Updated to query for, and send, any existing properties, which are not being specifically updated, with the request.
        <ul>
          <li>Previously, due to the PUT operation used by the API, any properties not specified in a request would be cleared on the object.</li>
          <li>This update allows single properties to be updated without having to specify all properties.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASUser</code>
    <ul>
      <li>In-line with update to <code class="language-plaintext highlighter-rouge">Set-PASUser</code>
        <ul>
          <li>Allows Empty argument for <code class="language-plaintext highlighter-rouge">unAuthorizedInterfaces</code> &amp; <code class="language-plaintext highlighter-rouge">vaultAuthorization</code> parameters.</li>
          <li>Corrects ValidateSet for <code class="language-plaintext highlighter-rouge">unAuthorizedInterfaces</code> parameter.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASComponentDetail</code>
    <ul>
      <li>Adds assertion that command specifying <code class="language-plaintext highlighter-rouge">PTA</code> component  must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASAccountACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASAccountACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Invoke-PASCPMOperation</code>
    <ul>
      <li>Adds assertion that Gen1 verify task must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASAccount</code>
    <ul>
      <li>Adds assertion that Gen1 task must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Close-PASSession</code>
    <ul>
      <li>Adds assertion that Shared Authentication logoff request is executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
    <ul>
      <li>Adds assertion that Shared Authentication logon request is executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASPolicyACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPolicyACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASPolicyACL</code>
    <ul>
      <li>Adds assertion that command must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Remove-PASSafeMember</code>
    <ul>
      <li>Adds assertion that command using Gen1 parameters must be executed against a self hosted implementation as invocation against privilege cloud is not supported.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Assert-VersionRequirement</code>
    <ul>
      <li>Updates helper function to provide ability to assert if command is being run against self-hosted or privilege cloud implementation.</li>
    </ul>
  </li>
</ul>

<h3 id="fixed">Fixed</h3>
<ul>
  <li>N/A</li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Get-PASPSMRecording" /><category term="Set-PASUser" /><category term="Set-PASSafe" /><category term="Set-PASOpenIDConnectProvider" /><category term="Set-PASPTARule" /><category term="Set-PASDirectoryMapping" /><category term="New-PASOnboardingRule" /><category term="Set-PASOnboardingRule" /><category term="Set-PASPlatformPSMConfig" /><category term="Set-PASSafeMember" /><category term="New-PASUser" /><category term="Get-PASComponentDetail" /><category term="Add-PASAccountACL" /><category term="Get-PASAccountACL" /><category term="Remove-PASAccountACL" /><category term="Invoke-PASCPMOperation" /><category term="Set-PASAccount" /><category term="Close-PASSession" /><category term="New-PASSession" /><category term="Add-PASPolicyACL" /><category term="Get-PASPolicyACL" /><category term="Remove-PASPolicyACL" /><category term="Remove-PASSafeMember" /><category term="Assert-VersionRequirement" /><summary type="html"><![CDATA[6.3.78]]></summary></entry><entry><title type="html">psPAS Release 6.2</title><link href="https://pspas.pspete.dev/articles/pspas-release-6-2/" rel="alternate" type="text/html" title="psPAS Release 6.2" /><published>2024-02-20T00:00:00+00:00</published><updated>2024-02-20T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-6-2</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-6-2/"><![CDATA[<h2 id="6268"><strong>6.2.68</strong></h2>

<p>Introducing enhancements to psPAS session related data.</p>

<p>Using the <code class="language-plaintext highlighter-rouge">Get-PASSession</code> command, users of the module can now get data on session start time, elapsed time since authentication as well as details of the last command run, the raw results returned from the api, as well as any detail of the last error which may have been received during the session.</p>

<p>This update makes troubleshooting API commands and expected results much easier from both an end user and module support perspective.</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">PS</span><span class="err">&gt;</span><span class="w"> </span><span class="nx">Get-PASSession</span><span class="w">

</span><span class="n">Name</span><span class="w">                           </span><span class="nx">Value</span><span class="w">
</span><span class="o">----</span><span class="w">                           </span><span class="o">-----</span><span class="w">
</span><span class="n">BaseURI</span><span class="w">                        </span><span class="nx">https://sometenant.privilegecloud.cyberark.cloud/PasswordVault</span><span class="w">
</span><span class="n">User</span><span class="w">                           </span><span class="nx">someuser</span><span class="err">@</span><span class="nx">cyberark.cloud.1312</span><span class="w">
</span><span class="n">ExternalVersion</span><span class="w">                </span><span class="nx">14.0.0</span><span class="w">
</span><span class="n">WebSession</span><span class="w">                     </span><span class="nx">Microsoft.PowerShell.Commands.WebRequestSession</span><span class="w">
</span><span class="n">StartTime</span><span class="w">                      </span><span class="nx">20/02/2024</span><span class="w"> </span><span class="nx">18:14:01</span><span class="w">
</span><span class="n">ElapsedTime</span><span class="w">                    </span><span class="nx">00:04:03</span><span class="w">
</span><span class="n">LastCommand</span><span class="w">                    </span><span class="nx">System.Management.Automation.InvocationInfo</span><span class="w">
</span><span class="n">LastCommandTime</span><span class="w">                </span><span class="nx">20/02/2024</span><span class="w"> </span><span class="nx">18:18:03</span><span class="w">
</span><span class="n">LastCommandResults</span><span class="w">             </span><span class="p">{</span><span class="s2">"Users"</span><span class="p">:[{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">26</span><span class="p">,</span><span class="s2">"username"</span><span class="p">:</span><span class="s2">"someuser@somedomain.com"</span><span class="p">,</span><span class="s2">"source"</span><span class="p">:</span><span class="s2">"CyberArk"</span><span class="p">,</span><span class="s2">"userType"</span><span class="p">:</span><span class="s2">"SomeType"</span><span class="p">,</span><span class="o">...</span><span class="w">
</span><span class="n">LastError</span><span class="w">                      </span><span class="p">{</span><span class="s2">"ErrorCode"</span><span class="p">:</span><span class="s2">"PASWS041E"</span><span class="p">,</span><span class="s2">"ErrorMessage"</span><span class="p">:</span><span class="s2">"You are not authorized to perform this action."</span><span class="p">}</span><span class="w">
</span><span class="n">LastErrorTime</span><span class="w">                  </span><span class="mi">20</span><span class="n">/02/2024</span><span class="w"> </span><span class="nx">18:13:12</span><span class="w">
</span></code></pre></div></div>

<p>To realise this update, lots of module wide changes to all module commands have been required; while no change to the general operation of the psPAS module should be noticed - do raise an issue if something does not appear correct.</p>

<h3 id="added">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="updated">Updated</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASSession</code>
    <ul>
      <li>makes additional information available to users running the command
        <ul>
          <li>authentication time</li>
          <li>session length</li>
          <li>last command and result data</li>
          <li>last error details</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASPSMSession</code>
    <ul>
      <li>RDP and PSMGW connections will be automatically opened when issuing  connection request.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
    <ul>
      <li>Adds logic around getting the logged on user name for either self-hosted or privilege cloud deployments</li>
    </ul>
  </li>
  <li>PSM Session Data Formats
    <ul>
      <li>Adds <code class="language-plaintext highlighter-rouge">Start</code> &amp; <code class="language-plaintext highlighter-rouge">End</code> to standard table view output</li>
      <li>Formats <code class="language-plaintext highlighter-rouge">Start</code> &amp; <code class="language-plaintext highlighter-rouge">End</code> as standard datetime instead of unixtime.</li>
    </ul>
  </li>
</ul>

<h3 id="fixed">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Add-PASGroupMember</code>,<code class="language-plaintext highlighter-rouge">Remove-PASGroup</code>,<code class="language-plaintext highlighter-rouge">Set-PASGroup</code>
    <ul>
      <li>Standardises name of <code class="language-plaintext highlighter-rouge">ID</code> parameter.</li>
      <li>Adds <code class="language-plaintext highlighter-rouge">GroupID</code> alias to <code class="language-plaintext highlighter-rouge">ID</code> parameter.</li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Invoke-PASRestMethod" /><category term="Get-PASSession" /><category term="Add-PASGroupMember" /><category term="Remove-PASGroup" /><category term="Set-PASGroup" /><category term="New-PASPSMSession" /><category term="New-PASSession" /><summary type="html"><![CDATA[6.2.68]]></summary></entry><entry><title type="html">psPAS Release 6.1</title><link href="https://pspas.pspete.dev/articles/pspas-release-6-1/" rel="alternate" type="text/html" title="psPAS Release 6.1" /><published>2024-02-07T00:00:00+00:00</published><updated>2024-02-07T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-6-1</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-6-1/"><![CDATA[<h2 id="6162"><strong>6.1.62</strong></h2>

<h3 id="added">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="updated">Updated</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPSMRecording</code>
    <ul>
      <li>Removes <code class="language-plaintext highlighter-rouge">Offset</code> Parameter</li>
      <li>Updates <code class="language-plaintext highlighter-rouge">FromTime</code> &amp; <code class="language-plaintext highlighter-rouge">ToTime</code> parameters to <code class="language-plaintext highlighter-rouge">[datetime]</code> types</li>
      <li>Returns all pages of results instead of only the first page of results</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPSMSession</code>
    <ul>
      <li>Removes <code class="language-plaintext highlighter-rouge">Offset</code> Parameter</li>
      <li>Updates <code class="language-plaintext highlighter-rouge">FromTime</code> &amp; <code class="language-plaintext highlighter-rouge">ToTime</code> parameters to <code class="language-plaintext highlighter-rouge">[datetime]</code> types</li>
      <li>Returns all pages of results instead of only the first page of results</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
    <ul>
      <li>Removes <code class="language-plaintext highlighter-rouge">Offset</code> Parameter</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASDiscoveredAccount</code>
    <ul>
      <li>Removes <code class="language-plaintext highlighter-rouge">Offset</code> Parameter</li>
    </ul>
  </li>
</ul>

<h3 id="fixed">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASSession</code>
    <ul>
      <li>Removes <code class="language-plaintext highlighter-rouge">UserName</code> from command output, avoiding error condition on expired session.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPlatform</code>
    <ul>
      <li>Adds <code class="language-plaintext highlighter-rouge">search</code> parameter to the default <code class="language-plaintext highlighter-rouge">targets</code> parameterset</li>
    </ul>
  </li>
  <li>ISPSS Error Handling
    <ul>
      <li>Fixes issue where error returned from ISPSS solution may not be handled properly</li>
    </ul>
  </li>
</ul>

<h2 id="6150"><strong>6.1.50</strong></h2>

<h3 id="module-update-to-cover-all-cyberark-140-api-features">Module update to cover all CyberArk 14.0 API features</h3>

<h3 id="added-1">Added</h3>
<ul>
  <li>New commands supported from 14.0:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">Add-PASPTAExcludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASPTAIncludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASPTAPrivilegedGroup</code></li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASPTAPrivilegedUser</code></li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTAExcludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTAIncludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTAPrivilegedGroup</code></li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTAPrivilegedUser</code></li>
      <li><code class="language-plaintext highlighter-rouge">Remove-PASPTAExcludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Remove-PASPTAIncludedTarget</code></li>
      <li><code class="language-plaintext highlighter-rouge">Remove-PASPTAPrivilegedGroup</code></li>
      <li><code class="language-plaintext highlighter-rouge">Remove-PASPTAPrivilegedUser</code></li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASLinkedGroup</code>
    <ul>
      <li>New experimental command based on undocumented API.</li>
    </ul>
  </li>
</ul>

<h3 id="updated-1">Updated</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountActivity</code>
    <ul>
      <li>Adds Gen2 replacement for deprecated Gen1 API.</li>
      <li>Updates default operation to target Gen2 API.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASPTARiskEvent</code>
    <ul>
      <li>New filter parameters <code class="language-plaintext highlighter-rouge">FromTime</code> &amp; <code class="language-plaintext highlighter-rouge">ToTime</code></li>
      <li>Fixes output and result paging</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPTARiskEvent</code>
    <ul>
      <li>New parameters <code class="language-plaintext highlighter-rouge">closeReason</code> &amp; <code class="language-plaintext highlighter-rouge">reasonText</code></li>
      <li>General Fixes</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">New-PASDirectoryMapping</code>
    <ul>
      <li>New parameters <code class="language-plaintext highlighter-rouge">UsedQuota</code>, <code class="language-plaintext highlighter-rouge">AuthorizedInterfaces</code> &amp; <code class="language-plaintext highlighter-rouge">EnableENEWhenDisconnected</code></li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASDirectoryMapping</code>
    <ul>
      <li>New parameters <code class="language-plaintext highlighter-rouge">UsedQuota</code>, <code class="language-plaintext highlighter-rouge">AuthorizedInterfaces</code> &amp; <code class="language-plaintext highlighter-rouge">EnableENEWhenDisconnected</code></li>
    </ul>
  </li>
</ul>

<h3 id="fixed-1">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code>
    <ul>
      <li>Avoids potential error condition when handling errors in ISPSS environments</li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Add-PASPTAExcludedTarget" /><category term="Add-PASPTAIncludedTarget" /><category term="Add-PASPTAPrivilegedGroup" /><category term="Add-PASPTAPrivilegedUser" /><category term="Get-PASPTAExcludedTarget" /><category term="Get-PASPTAIncludedTarget" /><category term="Get-PASPTAPrivilegedGroup" /><category term="Get-PASPTAPrivilegedUser" /><category term="Remove-PASPTAExcludedTarget" /><category term="Remove-PASPTAIncludedTarget" /><category term="Remove-PASPTAPrivilegedGroup" /><category term="Remove-PASPTAPrivilegedUser" /><category term="Get-PASLinkedGroup" /><category term="Get-PASAccountActivity" /><category term="Get-PASPTARiskEvent" /><category term="New-PASDirectoryMapping" /><category term="Set-PASDirectoryMapping" /><category term="Invoke-PASRestMethod" /><category term="Get-PASPSMRecording" /><category term="Get-PASPSMSession" /><category term="Get-PASAccount" /><category term="Get-PASDiscoveredAccount" /><category term="Get-PASSession" /><category term="Get-PASPlatform" /><summary type="html"><![CDATA[6.1.62]]></summary></entry><entry><title type="html">psPAS Release 6.0</title><link href="https://pspas.pspete.dev/articles/pspas-release-6-0/" rel="alternate" type="text/html" title="psPAS Release 6.0" /><published>2023-11-14T00:00:00+00:00</published><updated>2023-11-14T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-6-0</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-6-0/"><![CDATA[<h2 id="6030"><strong>6.0.30</strong></h2>

<h3 id="added">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<p>### Updated</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Add-PASPTARule</code> &amp; <code class="language-plaintext highlighter-rouge">Set-PASPTARule</code>
    <ul>
      <li>Adds scope parameters <code class="language-plaintext highlighter-rouge">vaultUsersMode</code>, <code class="language-plaintext highlighter-rouge">vaultUsersList</code>, <code class="language-plaintext highlighter-rouge">machinesMode</code> &amp; <code class="language-plaintext highlighter-rouge">machinesList</code></li>
      <li>Includes scope property in output by default</li>
    </ul>
  </li>
</ul>

<p>### Fixed</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Add-PASApplication</code>
    <ul>
      <li>Updates date format of <code class="language-plaintext highlighter-rouge">ExpirationDate</code> to <code class="language-plaintext highlighter-rouge">MM/dd/yyyy</code>. Resolves issue observed when sending date format of <code class="language-plaintext highlighter-rouge">MM-dd-yyyy</code></li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Set-PASPTAEvent</code> &amp; <code class="language-plaintext highlighter-rouge">Set-PASPTARiskEvent</code>
    <ul>
      <li>Fixes issue where websession object and auth header were not being sent with the request</li>
    </ul>
  </li>
</ul>

<h2 id="6021"><strong>6.0.21</strong></h2>

<h3 id="added-1">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<p>### Updated</p>
<ul>
  <li>N/A</li>
</ul>

<p>### Fixed</p>
<ul>
  <li>Debug Trace Output
    <ul>
      <li>Resolves condition where authentication password value might be revealed in debug trace output in a scenario where  <code class="language-plaintext highlighter-rouge">Set-PSDebug -Trace 2</code> is active in the console host.</li>
    </ul>
  </li>
</ul>

<h2 id="6018"><strong>6.0.18</strong></h2>

<h3 id="added-2">Added</h3>
<ul>
  <li>N/A</li>
</ul>

<h3 id="changed">Changed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Set-PASSafe</code>
    <ul>
      <li>Allows <code class="language-plaintext highlighter-rouge">0</code> as valid value for parameter <code class="language-plaintext highlighter-rouge">NumberOfDaysRetention</code></li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASServerWebService</code>
    <ul>
      <li>Deprecates Gen1 endpoint from 13.2. Adds Gen2 endpoint as default.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASSafeShareLogo</code>
    <ul>
      <li>Deprecates command from 13.2.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Invoke-PASCPMOperation</code>
    <ul>
      <li>Deprecates Gen1 endpoint from 13.2.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccountActivity</code>
    <ul>
      <li>Deprecates command from 13.2.</li>
    </ul>
  </li>
  <li><code class="language-plaintext highlighter-rouge">Add-PASPendingAccount</code>
    <ul>
      <li>Deprecates command from 13.2.</li>
    </ul>
  </li>
</ul>

<h3 id="fixed">Fixed</h3>
<ul>
  <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
    <ul>
      <li>Resolves issue where, if number of results of a <code class="language-plaintext highlighter-rouge">SavedFilter</code> are greater than the page size (either default or set via the <code class="language-plaintext highlighter-rouge">limit</code> parameter), only the URL of the first request sent would include the SavedFilter value.</li>
    </ul>
  </li>
</ul>

<h2 id="604"><strong>6.0.4</strong></h2>

<ul>
  <li>Updated
    <ul>
      <li><code class="language-plaintext highlighter-rouge">Add-PASSafeMember</code>
        <ul>
          <li>Adds ‘Role’ to acceptable values in ParameterSet for <code class="language-plaintext highlighter-rouge">memberType</code> parameter</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<h2 id="600"><strong>6.0.0</strong></h2>

<ul>
  <li>Update &amp; Breaking Change
    <ul>
      <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
        <ul>
          <li><strong>All Privilege Cloud Shared Services Authentication via the CyberArk Identity Platform now depends on the pspete <code class="language-plaintext highlighter-rouge">IdentityCommand</code> module.</strong></li>
          <li>Adds Identity User Authentication, using the <code class="language-plaintext highlighter-rouge">IdentityCommand</code> module to satisfy Identity MFA challenges and obtain required authentication token to use against Privileged Cloud Shared Services.</li>
          <li>Adds logic to determine correct Identity tenant URL based on provided Privileged Cloud Subdomain value.</li>
          <li>Both Privileged Cloud API URL &amp; Identity Portal URL are required to be specified if subdomain value is not provided.</li>
          <li>Service User authentication for Shared Services introduced in recent previous versions requires installation of <code class="language-plaintext highlighter-rouge">IdentityCommand</code> module and specification of additional attribute.</li>
          <li>See <a href="https://pspas.pspete.dev/docs/authentication/#shared-services-authentication">the docs</a> &amp; <a href="https://pspas.pspete.dev/commands/New-PASSession">New-PASSession</a> for full details.</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="New-PASSession" /><category term="IdentityCommand" /><category term="Add-PASSafeMember" /><category term="Set-PASSafe" /><category term="Get-PASServerWebService" /><category term="Get-PASSafeShareLogo" /><category term="Invoke-PASCPMOperation" /><category term="Get-PASAccountActivity" /><category term="Add-PASPendingAccount" /><category term="Get-PASAccount" /><category term="Add-PASPTARule" /><category term="Set-PASPTARule" /><category term="Add-PASApplication" /><category term="Set-PASPTAEvent" /><category term="Set-PASPTARiskEvent" /><summary type="html"><![CDATA[6.0.30]]></summary></entry><entry><title type="html">psPAS Release 5.6</title><link href="https://pspas.pspete.dev/articles/pspas-release-5-6/" rel="alternate" type="text/html" title="psPAS Release 5.6" /><published>2023-07-31T00:00:00+00:00</published><updated>2023-07-31T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-5-6</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-5-6/"><![CDATA[<h2 id="56135-july-31st-2023"><strong>5.6.135 (July 31st 2023)</strong></h2>

<h3 id="module-update-to-cover-all-cyberark-132-api-features">Module update to cover all CyberArk 13.2 API features</h3>

<ul>
  <li>New
    <ul>
      <li><code class="language-plaintext highlighter-rouge">Get-PASUserTypeInfo</code>
        <ul>
          <li>Output information on User Types</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTARiskEvent</code>
        <ul>
          <li>Output PTA Risk Events</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Set-PASPTARiskEvent</code>
        <ul>
          <li>Update PTA Risk Events</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASPTARiskSummary</code>
        <ul>
          <li>Output PTA Risk Summary</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">New-PASRequestObject</code>
        <ul>
          <li>Enables creation of request objects for bulk account access requests using <code class="language-plaintext highlighter-rouge">New-PASRequest</code>.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Updates
    <ul>
      <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
        <ul>
          <li>Adds option for PKIPN authentication.
            <ul>
              <li>Thanks (<a href="https://github.com/JesseMcWilliamss">JesseMcWilliamss</a>)!</li>
            </ul>
          </li>
          <li>Adds options to Shared Services Authentication capability
            <ul>
              <li>Supports different subdomains for Identity &amp; Privilege Cloud tenants</li>
              <li>Supports ability to provide tenant URLs for Identity &amp; Privilege Cloud systems.</li>
            </ul>
          </li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Unlock-PASAccount</code>
        <ul>
          <li>Adds Unlock capability, in addition to the existing check-in capability.
            <ul>
              <li>Thanks &amp; Credit to (<a href="https://github.com/Qrelis">Qrelis</a>) for this!</li>
            </ul>
          </li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASUser</code>
        <ul>
          <li>Adds <code class="language-plaintext highlighter-rouge">source</code> parameter (allows filter by cyberark or ldap source).</li>
          <li>Adds <code class="language-plaintext highlighter-rouge">userStatus</code> parameter (allows filter by active, disabled, or suspended status).</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">New-PASUser</code> &amp; <code class="language-plaintext highlighter-rouge">Set-PASUser</code>
        <ul>
          <li>Adds parameters <code class="language-plaintext highlighter-rouge">userActivityLogRetentionDays</code>, <code class="language-plaintext highlighter-rouge">loginFromHour</code> &amp; <code class="language-plaintext highlighter-rouge">loginToHour</code></li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">New-PASRequest</code>
        <ul>
          <li>Adds new ParameterSets <code class="language-plaintext highlighter-rouge">BulkSearch</code>, <code class="language-plaintext highlighter-rouge">BulkFilter</code> &amp; <code class="language-plaintext highlighter-rouge">BulkItems</code>.</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASRequest</code>
        <ul>
          <li>Adds <code class="language-plaintext highlighter-rouge">id</code> parameter to support get status bulk request actions.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Other</li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="Get-PASUserTypeInfo" /><category term="Get-PASPTARiskEvent" /><category term="Set-PASPTARiskEvent" /><category term="Get-PASPTARiskSummary" /><category term="New-PASRequestObject" /><category term="Unlock-PASAccount" /><category term="Get-PASUser" /><category term="New-PASUser" /><category term="Set-PASUser" /><category term="New-PASRequest" /><category term="Get-PASRequest" /><category term="New-PASSession" /><summary type="html"><![CDATA[5.6.135 (July 31st 2023)]]></summary></entry><entry><title type="html">psPAS Release 5.5</title><link href="https://pspas.pspete.dev/articles/pspas-release-5-5/" rel="alternate" type="text/html" title="psPAS Release 5.5" /><published>2023-03-06T00:00:00+00:00</published><updated>2023-03-06T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-5-5</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-5-5/"><![CDATA[<h2 id="55110-march-7th-2023"><strong>5.5.110 (March 7th 2023)</strong></h2>

<h3 id="module-update-to-cover-all-cyberark-130-api-features">Module update to cover all CyberArk 13.0 API features</h3>

<ul>
  <li>New
    <ul>
      <li>Adds <code class="language-plaintext highlighter-rouge">Get-PASPTAGlobalCatalog</code> &amp; <code class="language-plaintext highlighter-rouge">Add-PASPTAGlobalCatalog</code> commands, available for v13.</li>
    </ul>
  </li>
  <li>Updates
    <ul>
      <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
        <ul>
          <li>Adds Shared Services Auth Support</li>
          <li>Allows null or empty <code class="language-plaintext highlighter-rouge">OTPDelimiter</code> to be specified</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Set-PASPTARule</code>
        <ul>
          <li>Updates validation for parameter <code class="language-plaintext highlighter-rouge">id</code></li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASComponentDetail</code>
        <ul>
          <li>Adds <code class="language-plaintext highlighter-rouge">pta</code> as option for parameter <code class="language-plaintext highlighter-rouge">component</code></li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASSafe</code>
        <ul>
          <li>Allows <code class="language-plaintext highlighter-rouge">0</code> as valid value for parameter <code class="language-plaintext highlighter-rouge">NumberOfDaysRetention</code></li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASSafeMember</code>
        <ul>
          <li>Adds optional <code class="language-plaintext highlighter-rouge">memberType</code> parameter, accepted from 12.6 onward.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Other
    <ul>
      <li>Allow UPN UserName format
        <ul>
          <li>Updates the parameter validation logic of the <code class="language-plaintext highlighter-rouge">*-PASPublicSSHKey</code> functions to allow UPN style usernames to be specified and accepted.</li>
        </ul>
      </li>
      <li>Updates <code class="language-plaintext highlighter-rouge">psPAS.CyberArk.Vault.OnboardingRule</code> format in line with expected output according to product documentation.</li>
      <li>Documentation update
        <ul>
          <li>Correct version requirement information for the <code class="language-plaintext highlighter-rouge">Get-PASAccount</code> <code class="language-plaintext highlighter-rouge">searchType</code> parameter.</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="New-PASSession" /><category term="Get-PASPTAGlobalCatalog" /><category term="Add-PASPTAGlobalCatalog" /><category term="Set-PASPTARule" /><category term="Get-PASComponentDetail" /><category term="Add-PASSafe" /><category term="Add-PASSafeMember" /><category term="Get-PASAccount" /><category term="Add-PASPublicSSHKey" /><category term="Get-PASPublicSSHKey" /><category term="Remove-PASPublicSSHKey" /><summary type="html"><![CDATA[5.5.110 (March 7th 2023)]]></summary></entry><entry><title type="html">psPAS Release 5.4</title><link href="https://pspas.pspete.dev/articles/pspas-release-5-4/" rel="alternate" type="text/html" title="psPAS Release 5.4" /><published>2022-11-20T00:00:00+00:00</published><updated>2022-11-20T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/pspas-release-5-4</id><content type="html" xml:base="https://pspas.pspete.dev/articles/pspas-release-5-4/"><![CDATA[<h2 id="5494-september-26th-2022"><strong>5.4.94 (September 26th 2022)</strong></h2>

<ul>
  <li>Breaking Changes
    <ul>
      <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
        <ul>
          <li>Removes <code class="language-plaintext highlighter-rouge">Gen2Filter</code> ParameterSet.</li>
          <li>Equivalent functionality remains available via other available parameters.</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASGroup</code>
        <ul>
          <li>Removes <code class="language-plaintext highlighter-rouge">filter</code> ParameterSet.</li>
          <li>Equivalent functionality remains available via other available parameters.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>New Commands
    <ul>
      <li><code class="language-plaintext highlighter-rouge">Publish-PASDiscoveredAccount</code>
        <ul>
          <li>Feature Request: Onboards a discovered account.</li>
          <li>Based on swagger documentation</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASLinkedAccount</code>
        <ul>
          <li>Gets details of linked accounts</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Add-PASPersonalAdminAccount</code>
        <ul>
          <li>Specific for Adding Personal Admin Accounts in Privilege Cloud.</li>
          <li>Based on swagger documentation</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Other Updates
    <ul>
      <li><code class="language-plaintext highlighter-rouge">New-PASSession</code>
        <ul>
          <li>Feature Request: Adds support for PKI Authentication.</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASAccount</code>
        <ul>
          <li>Adds <code class="language-plaintext highlighter-rouge">limit</code> &amp; <code class="language-plaintext highlighter-rouge">offset</code> parameters.</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">Get-PASSafe</code>
        <ul>
          <li>Corrects ambiguous invocation options (Gen1).</li>
        </ul>
      </li>
      <li>Documentation
        <ul>
          <li>General updates throughout.</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<h2 id="54101-november-20th-2022"><strong>5.4.101 (November 20th 2022)</strong></h2>

<ul>
  <li>Fix <code class="language-plaintext highlighter-rouge">Get-PASSafeMember</code>
    <ul>
      <li>Corrects format of URL value when returning many safe members
        <ul>
          <li>Thanks <a href="https://github.com/InconstantRO">InconstantRO</a>!</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Documentation
    <ul>
      <li>Additional example added to <code class="language-plaintext highlighter-rouge">Get-PASAccount</code> help file
        <ul>
          <li>Thanks <a href="https://github.com/rorobig">rorobig</a>!</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>]]></content><author><name>Pete Maan</name></author><category term="Release Notes" /><category term="New-PASSession" /><category term="Get-PASGroup" /><category term="Publish-PASDiscoveredAccount" /><category term="Get-PASLinkedAccount" /><category term="Add-PASPersonalAdminAccount" /><category term="Get-PASAccount" /><category term="Get-PASSafe" /><category term="Get-PASSafeMember" /><summary type="html"><![CDATA[5.4.94 (September 26th 2022)]]></summary></entry><entry><title type="html">New-PASSession Deep Dive</title><link href="https://pspas.pspete.dev/articles/new-passession-deep-dive/" rel="alternate" type="text/html" title="New-PASSession Deep Dive" /><published>2022-10-10T00:00:00+00:00</published><updated>2022-10-10T00:00:00+00:00</updated><id>https://pspas.pspete.dev/articles/new-passession-deep-dive</id><content type="html" xml:base="https://pspas.pspete.dev/articles/new-passession-deep-dive/"><![CDATA[<p>Collating some “Deep Dive” content here shedding light on the inner workings of psPAS, starting with <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>, the most important command in psPAS and the first command explored and developed for the module way back in 2017.</p>

<p><em>What makes the <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> command so important?</em></p>

<p>Each and every time any psPAS user needs to use the module to access the API of their CyberArk solution, <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> is the first command they will run, making it by far the most crucial code in the whole module, as well being as one of the most viewed commands in the module documentation, and on the psPAS GitHub repo.</p>

<p>As the aim is for <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> to be compatible with all supported API authentication methods, it is also one of the most complex functions in the entire module.</p>

<p>If you want an understanding of what is going on behind the scenes of the command, this is the right place.</p>

<h2 id="new-passession-internals">New-PASSession Internals</h2>

<p>The invocation flow of New-PASSession to API authentication looks like this (as does any standard psPAS code flow):</p>

<p><img src="https://pspas.pspete.dev/assets/images/New-PASSession/CodeFlow.png" alt="alt" class="half align-center" /></p>

<p>Here, you can see the various abstraction layers that psPAS employs to execute the authentication request with the API, convert the API response into a PowerShell object, and then return the authentication request’s result.</p>

<ul>
  <li><strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>
    <ul>
      <li>The front-end command for all API authentication methods supported by psPAS.</li>
      <li>Formats the API URL into the correct format for this and future request.
        <ul>
          <li>The URL value provided to <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> is used for any other <strong><code class="language-plaintext highlighter-rouge">psPAS</code></strong> commands issued in a session.</li>
        </ul>
      </li>
      <li>Constructs the overall request, setting required values for the chosen authentication type.</li>
      <li>Issues requests to the API, or other functions to complete authentication requirements for the chosen method.</li>
      <li>Extracts the Authorization token value from the LogonResult returned from the API.</li>
      <li>Sets Script/Module Scope Variables for use by all other module commands:
        <ul>
          <li>BaseURI.</li>
          <li>WebSession ‘Authorization’ header.</li>
          <li>API Version.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><strong><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code></strong>
    <ul>
      <li>Receives all psPAS function requests for the API, including <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> requests.</li>
      <li>Enforces module defaults, such as the expected ContentType &amp; use of TLS 1.2.</li>
      <li>Catches and throws any errors that <strong><code class="language-plaintext highlighter-rouge">Invoke-WebRequest</code></strong> produces.</li>
      <li>Assigns the <strong><code class="language-plaintext highlighter-rouge">SessionVariable</code></strong> <strong><code class="language-plaintext highlighter-rouge">WebSession</code></strong> object to a script/module scope variable, this is particularly pertinent to <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>.</li>
    </ul>
  </li>
  <li><strong><code class="language-plaintext highlighter-rouge">Invoke-WebRequest</code></strong>
    <ul>
      <li>Is responsible for receiving requests from <strong><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code></strong> and sending them to the API.</li>
      <li>The <strong><code class="language-plaintext highlighter-rouge">Invoke-WebRequest</code></strong> cmdlet, included in PowerShell since version 3, sends HTTP and HTTPS requests to a web page or web service.</li>
      <li>You can read all about it in the <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.2">Microsoft Docs</a>.</li>
    </ul>
  </li>
  <li><strong><code class="language-plaintext highlighter-rouge">Get-PASResponse</code></strong>
    <ul>
      <li>Receives and returns the <code class="language-plaintext highlighter-rouge">Content</code> property of the API response sent from <strong><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code></strong></li>
      <li>Returns data based on the <code class="language-plaintext highlighter-rouge">Content-Type</code> of the received content.</li>
    </ul>
  </li>
  <li><strong><code class="language-plaintext highlighter-rouge">ConvertFrom-Json</code></strong>
    <ul>
      <li>Creates a custom object from a JSON-formatted string.</li>
      <li>You can read all about it in the <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/ConvertFrom-Json?view=powershell-7.2">Microsoft Docs</a></li>
      <li><strong><code class="language-plaintext highlighter-rouge">application/json</code></strong> content is expected for most API responses, <strong><code class="language-plaintext highlighter-rouge">psPAS</code></strong> converts this into a custom object before returning the data.</li>
    </ul>
  </li>
</ul>

<p>If everything goes according to plan, we will have a login token from the API at the end of the procedure.</p>

<p>In addition to saving the API URL and API version information, <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> also conveniently stores the login token as a header value in a WebSession object variable in the script scope of the module.</p>

<p>As all of these values are saved in the module’s script scope, they are now available to, and able to be referenced by, all other module functions without the values being exposed to, or provided by, module users for ongoing module operations.</p>

<p>All user facing commands in the module which send requests to the API use the variables set in the script scope to authenticate and direct responses to the API. They also follow the same internal pattern seen in <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>, with the API response  passing through the internal functions until any response is returned as a PowerShell object to the context of the originating command.</p>

<h2 id="radius-authentication-flow">RADIUS Authentication Flow</h2>

<p>The following diagram provides a higher-level overview of the module’s RADIUS authentication flow:</p>

<p><img src="https://pspas.pspete.dev/assets/images/New-PASSession/RADIUS.png" alt="alt" class="half align-center" /></p>

<p>We use <strong><code class="language-plaintext highlighter-rouge">Invoke-PASRestMethod</code></strong> as a wrapper around the <strong><code class="language-plaintext highlighter-rouge">Invoke-WebRequest</code></strong> PowerShell CmdLet so that we can catch any errors that might arise while using the API.</p>

<p>If additional authentication steps are needed to access the API using RADIUS authentication after the initial authentication, these are identified as exceptions with the specific Error ID of <strong><code class="language-plaintext highlighter-rouge">ITATS542I</code></strong>.</p>

<p>When <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong> encounters an <strong><code class="language-plaintext highlighter-rouge">ITATS542I</code></strong> exception, we know a RADIUS Challenge is contained within it.</p>

<p>RADIUS Challenge responses are sent using the internal <strong><code class="language-plaintext highlighter-rouge">Send-RADIUSResponse</code></strong> function.</p>

<p>Any required OTP is provided, or prompted for, and is then sent back to the server issuing the challenge.</p>

<p><strong><code class="language-plaintext highlighter-rouge">Send-RADIUSResponse</code></strong> will continue to handle additional <strong><code class="language-plaintext highlighter-rouge">ITATS542I</code></strong> exceptions for additional necessary challenges up until user responses are satisfactory for the authentication attempt or a challenge fails.</p>

<p>The API responds with a Logon Result containing the necessary authentication token upon successful completion of all challenges.</p>

<h2 id="iis--vault-primarysecondary-authentication">IIS + Vault Primary/Secondary Authentication</h2>

<p>Some authentication methods utilise IIS configurations as well as Vault authentication in conjunction with each other.</p>

<p>This necessitates that users must first successfully authenticate against any IIS authentication requirements in addition to the vault authentication. A few examples are:</p>
<ul>
  <li>Windows Authentication using the default credentials for the PowerShell session.</li>
  <li>PKI Authentication and a certificate supplied by the user.</li>
</ul>

<p>In each case, the required authentication factors are passed to <strong><code class="language-plaintext highlighter-rouge">Invoke-WebRequest</code></strong>, allowing IIS authentication to take place before any subsequent attempt to authenticate to the vault.</p>

<p>This flow is shown below:</p>

<p><img src="https://pspas.pspete.dev/assets/images/New-PASSession/IIS.png" alt="alt" class="half align-center" /></p>

<p>Any supplied certificate information or credential values will be stored as a reference in the script scope WebSession object that the module uses for subsequent operations, ensuring that any ongoing IIS authentication requirements are met after the first API authentication , and when other module commands are executed.</p>

<h2 id="saml-authentication">SAML Authentication</h2>

<p>SAML authentication requires a <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> value from your IDP to be passed to the API.</p>

<p>When you supply a <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> value to <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>, the API receives it and returns the necessary API authorization token after successfully accepting and validating the SAML token.</p>

<p>This <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> value must be obtained directly from your IDP and provided to <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>. As an alternative, <strong><code class="language-plaintext highlighter-rouge">psPAS</code></strong> might be able to obtain the <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> value if you’re using an IDP that supports Integrated Windows Authentication SSO (like ADFS) and your environment is set up to support this authentication flow.</p>

<p><img src="https://pspas.pspete.dev/assets/images/New-PASSession/SAML.png" alt="alt" class="half align-center" /></p>

<p>We can see in the SAML authentication flow diagram that if no SAMLResponse value is provided, <strong><code class="language-plaintext highlighter-rouge">psPAS</code></strong> will invoke an internal function called <strong><code class="language-plaintext highlighter-rouge">Get-PASSAMLResponse</code></strong> which will attempt to obtain the <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> value.</p>

<p><strong><code class="language-plaintext highlighter-rouge">Get-PASSAMLResponse</code></strong> obtains the IDP SSO URL from PVWA, and provides the default credentials of the PowerShell Session to the IDP, following a number of web redirects until receiving the required <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong>. Many factors and configurations may influence the success of this command, and a SAMLResponse will not be able to be obtained from all IDPs.</p>

<p>There are many SAML IDPs which may be in use, far too many to incorporate all available options into <strong><code class="language-plaintext highlighter-rouge">psPAS</code></strong> individually. While there are no plans to add capability into psPAS to get a <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> from any other IDPs out in the wild, if you have a method to obtain a SAMLResponse from a particular IDP, consider sharing it - this is a topic we get contacted about regularly; while we’d love to be able to provide answers for all SAML authentication platforms, it is beyond the scope of the core capabilities of the module’s intended purpose.</p>

<p>This is where the power of the CyberArk &amp; PowerShell communities comes into play… Allyn Lyndsay, a fellow CyberArk Guardian, has created a significantly handy tool to interactively authenticate to your SAML IDP, and return the <strong><code class="language-plaintext highlighter-rouge">SAMLResponse</code></strong> for use in other calls, like <strong><code class="language-plaintext highlighter-rouge">New-PASSession</code></strong>.</p>

<p>Find the tool and see it in action on GitHub here: <a href="https://github.com/allynl93/PS-SAML-Interactive"><strong>PS-SAML-Interactive</strong></a></p>

<h2 id="summary">Summary</h2>

<p>Now you understand how New-PASSession functions, and leverages various psPAS internals to successfully authenticate against the API!</p>

<p>Did we forget anything?</p>

<p>Let us know if there is any further information you would want to see or if you have any questions that have not been answered.</p>]]></content><author><name>Pete Maan</name></author><category term="psPAS Article" /><category term="New-PASSession" /><category term="Deep Dive" /><category term="Invoke-PASRestMethod" /><category term="Invoke-WebRequest" /><category term="Get-PASResponse" /><category term="ConvertFrom-Json" /><category term="ITATS542I" /><category term="Send-RADIUSResponse" /><category term="SAMLResponse" /><category term="Get-PASSAMLResponse" /><category term="PS-SAML-Interactive" /><summary type="html"><![CDATA[Collating some “Deep Dive” content here shedding light on the inner workings of psPAS, starting with New-PASSession, the most important command in psPAS and the first command explored and developed for the module way back in 2017.]]></summary></entry></feed>