/psPAS

PowerShell module for CyberArk Privileged Access Security REST API

Primary LanguagePowerShellMIT LicenseMIT

psPAS

psPAS: PowerShell Module for the CyberArk API

Use PowerShell to manage CyberArk via the PVWA REST API.

Contains all published methods of the API up to CyberArk v12.2.

Docs: https://pspas.pspete.dev


Module Status

Master Branch Latest Build CodeFactor Coverage PowerShell Gallery License
appveyor tests codefactor codecov psgallery license
release github coveralls downloads

Usage

Logo

Authenticate

It all starts with a Logon

New-PASSession is used to send a logon request to the CyberArk API.

On successful authentication psPAS uses the data which was provided for the request & also returned from the API for all subsequent operations.

CyberArk Authentication

  • Use a PowerShell credential object containing a valid vault username and password.
$cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: safeadmin
Password for user safeadmin: **********


New-PASSession -Credential $cred -BaseURI https://pvwa.somedomain.com

LDAP Authentication

  • Specify LDAP credentials allowed to authenticate to the vault.
$cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: xApprover_1
Password for user xApprover_1: **********


New-PASSession -Credential $cred -BaseURI https://pvwa.somedomain.com -type LDAP

Get-PASLoggedOnUser

UserName    Source UserTypeName AgentUser Expired Disabled Suspended
--------    ------ ------------ --------- ------- -------- ---------
xApprover_1 LDAP   EPVUser      False     False   False    False

RADIUS Authentication

Challenge Mode
$cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: DuoUser
Password for user DuoUser: **********


New-PASSession -Credential $cred -BaseURI https://pvwa.somedomain.com -type RADIUS -OTP 123456

Get-PASLoggedOnUser

UserName Source UserTypeName AgentUser Expired Disabled Suspended
-------- ------ ------------ --------- ------- -------- ---------
DuoUser  LDAP   EPVUser      False     False   False    False
Append Mode
  • Some 2FA solutions allow a One Time Passcode to be sent with the password.

    • If an OTP is provided, it is sent to the API with the password, separated by a delimiter: "$Password,$OTP"
$cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: DuoUser
Password for user DuoUser: **********


New-PASSession -Credential $cred -BaseURI https://pvwa.somedomain.com -type RADIUS -OTP 738458 -OTPMode Append

Get-PASLoggedOnUser

UserName Source UserTypeName AgentUser Expired Disabled Suspended
-------- ------ ------------ --------- ------- -------- ---------
DuoUser  LDAP   EPVUser      False     False   False    False

SAML Authentication

SAML SSO authentication using IWA and ADFS can be performed

New-PASSession -BaseURI $url -SAMLAuth

Where IWA SSO is not possible, the PS-SAML-Interactive module can be used to obtain the SAMLResponse from an authentication service.

SAMLResponse is then used to perform saml authentication.

import-module -name 'C:\PS-SAML-Interactive.psm1'

$loginURL = 'https://company.okta.com/home/app1/0oa11xddwdzhvlbiZ5d7/aln1k2HsUl5d7'
$baseURL = 'https://pvwa.mycompany.com'

$loginResponse = New-SAMLInteractive -LoginIDP $loginURL

New-PASSession -SAMLAuth -concurrentSession $true -BaseURI $baseURL -SAMLResponse $loginResponse

Shared Authentication with Client Certificate

  • If IIS is configured to require client certificates, psPAS will use any provided certificate details for the duration of the session.
$Cert = "0E199489C57E666115666D6E9990C2ACABDB6EDB"
New-PASSession -UseSharedAuthentication -BaseURI https://pvwa.somedomain.com -CertificateThumbprint $Cert

Basic Operations

Logo

Search

Safes
  • Get information relating to Safes you have access to:
Get-PASSafe -search _YZO

SafeName           ManagingCPM     NumberOfDaysRetention NumberOfVersionsRetention Description
--------           -----------     --------------------- ------------------------- -----------
1_TestSafe_096_YZO PasswordManager                       3                         TestSafe: 1_TestSafe_096_YZO
1_TestSafe_100_YZO PasswordManager                       3                         TestSafe: 1_TestSafe_100_YZO
3_TestSafe_058_YZO PasswordManager                       3                         TestSafe: 3_TestSafe_058_YZO
3_TestSafe_068_YZO PasswordManager                       3                         TestSafe: 3_TestSafe_068_YZO
3_TestSafe_069_YZO PasswordManager                       3                         TestSafe: 3_TestSafe_069_YZO
2_TestSafe_090_YZO PasswordManager                       3                         TestSafe: 2_TestSafe_090_YZO
1_TestSafe_067_YZO PasswordManager                       3                         TestSafe: 1_TestSafe_067_YZO

Safe Members

  • Find Safe Members:
Get-PASSafeMember -SafeName 1_TestSafe_067_YZO -search Usr

UserName                     SafeName           Permissions
--------                     --------           -----------
ACC-G-1_TestSafe_067_YZO-Usr 1_TestSafe_067_YZO @{useAccounts=True; retrieveAccounts=True; listAccounts=True; addAccounts=False;.....
Users
  • Query for Vault Users:
Get-PASUser -Search xap

ID  UserName    Source UserType ComponentUser Location
--  --------    ------ -------- ------------- --------
657 xApprover_A LDAP   EPVUser  False         \psPETE\Users
658 xApprover_1 LDAP   EPVUser  False         \psPETE\Users
659 xApprover_B LDAP   EPVUser  False         \psPETE\Users
660 xApprover_2 LDAP   EPVUser  False         \psPETE\Users
661 xApprover_C LDAP   EPVUser  False         \psPETE\Users
662 xApprover_3 LDAP   EPVUser  False         \psPETE\Users
Accounts
  • Return Account data:
Get-PASAccount -SafeName "3_TestSafe_028_XYJ" -search sbwudlov

AccountID                 : 286_4
Safe                      : 3_TestSafe_028_XYJ
address                   : SOMEDOMAIN.COM
userName                  : sbwudlov
name                      : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-sbwudlov
platformId                : Z_WINDOMAIN_OFF
secretType                : password
platformAccountProperties : @{LogonDomain = SOMEDOMAIN }
secretManagement          : @{automaticManagementEnabled = True; lastModifiedTime = 1559864222 }
createdTime               : 06/06/2019 23:37:02
1st Gen API
  • The keywords & safe parameters of Get-PASAccount force use of the 1st gen API:
Get-PASAccount -Safe 3_TestSafe_028_XYJ
WARNING: 2 matching accounts found. Only the first result will be returned

AccountID          : 286_3
Safe               : 3_TestSafe_028_XYJ
Folder             : Root
Name               : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-kmgrsebf
UserName           : kmgrsebf
PlatformID         : Z_WINDOMAIN_OFF
DeviceType         : Operating System
Address            : SOMEDOMAIN.COM
InternalProperties : @{CreationMethod = PVWA }
  • Only details of the first found account will be returned.
  • More results can be returned by specifying alternative parameters to avoid sending the request via the 1st gen API
PS>Get-PASAccount -SafeName "3_TestSafe_028_XYJ"

AccountID                 : 286_3
Safe                      : 3_TestSafe_028_XYJ
address                   : SOMEDOMAIN.COM
userName                  : kmgrsebf
name                      : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-kmgrsebf
platformId                : Z_WINDOMAIN_OFF
secretType                : password
platformAccountProperties : @{LogonDomain = SOMEDOMAIN }
secretManagement          : @{automaticManagementEnabled = True; lastModifiedTime = 1559864221 }
createdTime               : 06/06/2019 23:37:01

AccountID                 : 286_4
Safe                      : 3_TestSafe_028_XYJ
address                   : SOMEDOMAIN.COM
userName                  : sbwudlov
name                      : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-sbwudlov
platformId                : Z_WINDOMAIN_OFF
secretType                : password
platformAccountProperties : @{LogonDomain = SOMEDOMAIN }
secretManagement          : @{automaticManagementEnabled = True; lastModifiedTime = 1559864222 }
createdTime               : 06/06/2019 23:37:02

Logo

Administration

Add An Account
  • Add an account to manage:
#Convert Password to SecureString
$Password = ConvertTo-SecureString -String "Secret1337$" -AsPlainText -Force

#Additional account details
$platformAccountProperties = @{
  "LOGONDOMAIN"="domain.com"
  "Notes"="Demo Account. Owner:psPete"
  "Classification"="1F"
}

#Add Account
Add-PASAccount -secretType Password -secret $Password -SafeName "YourSafe" -PlatformID "YourPlatform" `
-Address "domain" -Username SomeUsername -platformAccountProperties $platformAccountProperties
Create Safes
  • Simple safe creation:
Add-PASSafe -SafeName NewSafe -Description "New Safe" -ManagingCPM PasswordManager -NumberOfVersionsRetention 10

SafeName ManagingCPM     NumberOfDaysRetention NumberOfVersionsRetention Description
-------- -----------     --------------------- ------------------------- -----------
NewSafe  PasswordManager                       10                        New Safe
Add Safe Members
  • Consistent safe membership:
Add-PASSafeMember -SafeName NewSafe -MemberName NewMember -UseAccounts $false -ListAccounts $true `
	-RetrieveAccounts $false -ViewAuditLog $true -ViewSafeMembers $true

UserName  SafeName Permissions
--------  -------- -----------
NewMember NewSafe  @{useAccounts=False; retrieveAccounts=False; listAccounts=True; addAccounts=False;...
Update Accounts
  • Update values for individual account properties:
Set-PASAccount -AccountID 286_4 -op replace -path /address -value NEWDOMAIN.COM

AccountID                 : 286_4
Safe                      : 3_TestSafe_028_XYJ
address                   : NEWDOMAIN.COM
userName                  : sbwudlov
name                      : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-sbwudlov
platformId                : Z_WINDOMAIN_OFF
secretType                : password
platformAccountProperties : @{LogonDomain=SOMEDOMAIN}
secretManagement          : @{automaticManagementEnabled=True; lastModifiedTime=1559864222}
createdTime               : 06/06/2019 23:37:02

Set-PASAccount -AccountID 286_4 -op replace -path /platformAccountProperties/LogonDomain -value NEWDOMAIN

AccountID                 : 286_4
Safe                      : 3_TestSafe_028_XYJ
address                   : NEWDOMAIN.COM
userName                  : sbwudlov
name                      : Operating System-Z_WINDOMAIN_OFF-SOMEDOMAIN.COM-sbwudlov
platformId                : Z_WINDOMAIN_OFF
secretType                : password
platformAccountProperties : @{LogonDomain=NEWDOMAIN}
secretManagement          : @{automaticManagementEnabled=True; lastModifiedTime=1559864222}
createdTime               : 06/06/2019 23:37:02

Logo

CPM Operations
Verify
  • Verify passwords
# immediate verification
Invoke-PASCPMOperation -AccountID $ID -VerifyTask
Change
  • Change passwords for accounts or account groups
# immediate change
Invoke-PASCPMOperation -AccountID $ID -ChangeTask

# immediate change to a specific password value
Invoke-PASCPMOperation -AccountID $ID -ChangeTask -ChangeImmediately $true -NewCredentials $SecureString

# change password in the Vault only
Invoke-PASCPMOperation -AccountID $ID -ChangeTask -NewCredentials $SecureString

# change password for account group
Invoke-PASCPMOperation -AccountID $ID -ChangeTask -ChangeEntireGroup $true

# change password for account group to a specific password value
Invoke-PASCPMOperation -AccountID $ID -ChangeTask -ChangeEntireGroup $true -NewCredentials $SecureString
Reconcile
  • Reconcile passwords
# immediate reconcile
Invoke-PASCPMOperation -AccountID $ID -ReconcileTask
Import a Connection Component
  • Import Custom Connection Components:
Import-PASConnectionComponent -ImportFile C:\Temp\ConnectionComponent.zip
Platforms
  • Import & Export of CPM Platforms:
#Import a Platform
Import-PASPlatform -ImportFile C:\Temp\Platform.zip

#Export a Platform
Export-PASPlatform -PlatformID "Some-SSH-Platform" -Path C:\Temp

Logo

Pipeline Operations

  • Work with the PowerShell pipeline:
#Find directory groups assigned to safes
Get-PASSafe -search YZO | Get-PASSafeMember -memberType group -includePredefinedUsers $false |
    Where-Object { Get-PASGroup -search $_.UserName -groupType Directory }

UserName                     SafeName           Permissions
--------                     --------           -----------
ACC-G-1_TestSafe_096_YZO-Usr 1_TestSafe_096_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-1_TestSafe_096_YZO-Adm 1_TestSafe_096_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-1_TestSafe_100_YZO-Usr 1_TestSafe_100_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-1_TestSafe_100_YZO-Adm 1_TestSafe_100_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_058_YZO-Usr 3_TestSafe_058_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_058_YZO-Adm 3_TestSafe_058_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_068_YZO-Usr 3_TestSafe_068_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_068_YZO-Adm 3_TestSafe_068_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_069_YZO-Usr 3_TestSafe_069_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_069_YZO-Adm 3_TestSafe_069_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-2_TestSafe_090_YZO-Usr 2_TestSafe_090_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-2_TestSafe_090_YZO-Adm 2_TestSafe_090_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-1_TestSafe_067_YZO-Usr 1_TestSafe_067_YZO @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-1_TestSafe_067_YZO-Adm 1_TestSafe_067_YZO @{useAccounts=True; retrieveAccounts=True; lis...
  • Multiple psPAS commands can be used together, along with standard PowerShell CmdLets:
#Add all "admin" users in the root location to the PVWAMonitor group
Get-PASUser -UserType EPVUser -Search Admin | Where-Object { $_.location -eq "\" } |
Add-PASGroupMember -GroupName PVWAMonitor

#Find an account, then find the members of the account's safe.
Get-PASAccount -id 283_3 | Get-PASSafeMember

UserName                     SafeName           Permissions
--------                     --------           -----------
SafeAdmin                    3_TestSafe_100_OWZ @{useAccounts=True; retrieveAccounts=True; lis...
PSMAppUsers                  3_TestSafe_100_OWZ @{useAccounts=False; retrieveAccounts=False; lis...
PasswordManager              3_TestSafe_100_OWZ @{useAccounts=True; retrieveAccounts=True; lis...
SafeAdmin3                   3_TestSafe_100_OWZ @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_100_OWZ-Usr 3_TestSafe_100_OWZ @{useAccounts=True; retrieveAccounts=True; lis...
ACC-G-3_TestSafe_100_OWZ-Adm 3_TestSafe_100_OWZ @{useAccounts=True; retrieveAccounts=True; lis...
Prov_ZZSRV01                 3_TestSafe_100_OWZ @{useAccounts=False; retrieveAccounts=True; lis...
psPAS                        3_TestSafe_100_OWZ @{useAccounts=False; retrieveAccounts=True; lis...

Advanced Examples

Logo

Bulk Operations

The standard features of PowerShell which allow creation of and iterations through collections of objects, can be used to perform bulk operations:

Example 1 - On-board Multiple Accounts
$Accounts = Import-Csv -Path C:\Temp\Accounts.csv

New-PASSession -Credential $creds -BaseURI https://your.pvwa.url

foreach($Account in $Accounts){

    $Password = ConvertTo-SecureString -String $Account.Password -AsPlainText -Force

    Add-PASAccount -secretType Password `
    -secret $Password `
    -platformAccountProperties @{"LOGONDOMAIN"=$Account.LogonDomain} `
    -SafeName $Account.SafeName `
    -PlatformID $Account.PlatformID `
    -Address $Account.Address `
    -Username $Account.Username

}

Close-PASSession
Example 2 - Delete Multiple Safes
#Specify Vault Logon Credentials
$LogonCredential = Get-Credential

#Logon
New-PASSession -Credential $LogonCredential -BaseURI https://your.pvwa.url

$Safes = Get-PASSafe -search TestSafe

#Delete Safes
foreach ($Safe in $Safes){

  Remove-PASSafe -SafeName $Safe.SafeName -WhatIf

}

#Logoff
Close-PASSession
Example 3 - Move a List of Users to a New Location
#Vault Logon Credentials
$LogonCredential = Get-Credential

#Logon
New-PASSession -Credential $LogonCredential -BaseURI https://your.pvwa.url

#get list of users
$users = Get-Content .\userlist.txt

#move users
$users | foreach{

  Set-PASUser -UserName $_ -Location "\New\Location\Path" -WhatIf

}

#Logoff
Close-PASSession

Logo

Safe Permissions

  • Define Safe Roles and assign to safe members:
$Role1 = [PSCustomObject]@{
  UseAccounts                            = $true
  ListAccounts                           = $true
  ViewAuditLog                           = $false
  ViewSafeMembers                        = $false
}

$Role2 = [PSCustomObject]@{
  UseAccounts                            = $false
  ListAccounts                           = $true
  RetrieveAccounts                       = $false
  AddAccounts                            = $true
  UpdateAccountContent                   = $true
  UpdateAccountProperties                = $true
  InitiateCPMAccountManagementOperations = $true
  SpecifyNextAccountContent              = $false
  RenameAccounts                         = $true
  DeleteAccounts                         = $true
  UnlockAccounts                         = $true
  ManageSafe                             = $true
  ManageSafeMembers                      = $true
  BackupSafe                             = $false
  ViewAuditLog                           = $true
  ViewSafeMembers                        = $true
  requestsAuthorizationLevel1            = $false
  requestsAuthorizationLevel2            = $false
  AccessWithoutConfirmation              = $true
  CreateFolders                          = $true
  DeleteFolders                          = $true
  MoveAccountsAndFolders                 = $true
}

$Role1 | Add-PASSafeMember -SafeName NewSafe -MemberName a032485 -SearchIn Vault

UserName SafeName Permissions
-------- -------- -----------
a032485  NewSafe  @{useAccounts=True; retrieveAccounts=False; listAccounts=True;...

$Role2 | Add-PASSafeMember -SafeName NewSafe -MemberName SafeAdmin1 -SearchIn Vault

UserName   SafeName Permissions
--------   -------- -----------
SafeAdmin1 NewSafe  @{useAccounts=False; retrieveAccounts=False; listAccounts=Tr...

Logo

PSM Sessions

Terminate all Active PSM Sessions on a PSM Server
#Find Active Sessions for a PSM Server IP
#Terminate the Sessions
Get-PASPSMSession | Where-Object{
  ($_.RawProperties.ProviderID -eq $(Get-PASComponentDetail -ComponentID SessionManagement |
    Where-Object{$_.ComponentIP -eq "192.168.60.20"} |
    Select -ExpandProperty ComponentUserName))
  -and ($_.IsLive) -and ($_.CanTerminate)} | Stop-PASPSMSession

Logo

Updating Multiple Properties of an Account

  • Multiple updates can be performed in a single request:
[array]$operations += @{"op"="remove";"path"="/platformAccountProperties/LogonDomain"}
[array]$operations += @{"op"="replace";"path"="/name";"value"="SomeNewName"}
[array]$operations += @{"op"="replace";"path"="/address";"value"="domain.co.uk"}

Set-PASAccount -AccountID 286_4 -operations $operations

AccountID        : 286_4
Safe             : 3_TestSafe_028_XYJ
address          : domain.co.uk
userName         : sbwudlov
name             : SomeNewName
platformId       : Z_WINDOMAIN_OFF
secretType       : password
secretManagement : @{automaticManagementEnabled=True; lastModifiedTime=1559864222}
createdTime      : 06/06/2019 23:37:02

Logo

Using Methods

Methods present on objects returned from psPAS functions can be leveraged to get the data you need with ease.

  • The psPAS.CyberArk.Vault.Safe object returned by Get-PASSafe has a ScriptMethod (SafeMembers()), which will run a query for the members of the safe:
#List all safes where AppUser is not a member
Get-PASSafe | Where-Object{ ($_.safemembers() | Select-Object -ExpandProperty UserName) -notcontains "AppUser"}
  • Retrieved credentials can be immediately converted into Secure Strings or into a PsCredential object:
#Returns a Secure String
(Get-PASAccount -id 330_5 | Get-PASAccountPassword).ToSecureString()

#Returns a PsCredential Object
(Get-PASAccount -id 330_5 | Get-PASAccountPassword).ToPsCredential()

#Returns a PsCredential Object with a custom username (to include a domain for example)
(Get-PASAccount -id 330_5 | Get-PASAccountPassword).ToPsCredential("MyDomain\MyAccount")

Logo

API Sessions

  • If actions are required to be performed under the context of different user accounts, it is possible to work with different authenticated sessions:
#Start first session
$VaultAdmin = Get-Credential

PowerShell credential request
Enter your credentials.
User: VaultAdmin
Password for user VaultAdmin: **********


New-PASSession -Credential $VaultAdmin -BaseURI https://pvwa.somedomain.com

Get-PASLoggedOnUser

UserName   Source   UserTypeName AgentUser Expired Disabled Suspended
--------   ------   ------------ --------- ------- -------- ---------
VaultAdmin Internal EPVUser      False     False   False    False

#Save first session data
$FirstSession = Get-PASSession

#Start second session
$SafeAdmin = Get-Credential

PowerShell credential request
Enter your credentials.
User: SafeAdmin
Password for user SafeAdmin: **********


New-PASSession -Credential $SafeAdmin -BaseURI https://pvwa.somedomain.com

Get-PASLoggedOnUser

UserName  Source   UserTypeName AgentUser Expired Disabled Suspended
--------  ------   ------------ --------- ------- -------- ---------
SafeAdmin Internal EPVUser      False     False   False    False

#Save second session data
$SecondSession = Get-PASSession

#Switch back to first session
Use-PASSession -Session $FirstSession

Get-PASLoggedOnUser

UserName   Source   UserTypeName AgentUser Expired Disabled Suspended
--------   ------   ------------ --------- ------- -------- ---------
VaultAdmin Internal EPVUser      False     False   False    False

#End first session
Close-PASSession

#Switch to second session
Use-PASSession -Session $SecondSession

Get-PASLoggedOnUser

UserName  Source   UserTypeName AgentUser Expired Disabled Suspended
--------  ------   ------------ --------- ------- -------- ---------
SafeAdmin Internal EPVUser      False     False   False    False

#End second session
Close-PASSession

Sample Scripts

A selection of psPAS sample scripts can be found in the psPAS-Examples repository.

Logo

psPAS Functions

Your version of CyberArk determines which functions of psPAS will be supported.

Check the below table to determine what is available for you to use.

The CyberArk Version listed is the minimum required to use the function.

The module will attempt to confirm that your version of CyberArk meets the minimum

version requirement (if you are using version 9.7+, and the function being invoked

requires version 9.8+).

Check the output of Get-Help for the psPAS functions for further details of available parameters and version requirements.

Click the below dropdown to view the current list of psPAS functions and their minimum version requirements:

List of Functions
Function Name CyberArk Version Description
New-PASSession 9.0 Authenticates a user to CyberArk Vault
Close-PASSession 9.0 Logoff from CyberArk Vault.
Get-PASSession --- Get psPAS Session Data.
Use-PASSession --- Set psPAS Session Data.
Add-PASPublicSSHKey 9.6 Adds an authorised public SSH key for a user.
Get-PASPublicSSHKey 9.6 Retrieves a user's SSH Keys.
Remove-PASPublicSSHKey 9.6 Deletes a Public SSH Key from a user
Add-PASAccountACL 9.0 Adds a new privileged command rule to an account.
Get-PASAccountACL 9.0 Lists privileged commands rule for an account
Remove-PASAccountACL 9.0 Deletes privileged commands rule from an account
Add-PASAccountGroupMember 9.95 Adds an account as a member of an account group.
Get-PASAccountGroup 9.10 Returns account groups in a Safe.
Get-PASAccountGroupMember 9.10 Returns members of an account group.
New-PASAccountGroup 9.95 Adds a new account group
Remove-PASAccountGroupMember 9.10 Deletes a member of an account group
Add-PASAccount 9.0 Adds a new account.
Add-PASPendingAccount 9.7 Adds discovered account or SSH key as a pending account.
Get-PASAccount 9.3 Returns information about accounts.
Get-PASAccountActivity 9.7 Returns activities for an account.
Get-PASAccountPassword 9.7 Returns password for an account.
Remove-PASAccount 9.3 Deletes an account
Set-PASAccount 9.5 Updates details of an account.
Invoke-PASCPMOperation 9.7 Invoke CPM verify, change & reconcile tasks.
Unlock-PASAccount 9.10 Checks in an exclusive-use account.
Add-PASApplication 9.1 Adds a new application
Add-PASApplicationAuthenticationMethod 9.1 Add authentication method to an application
Get-PASApplication 9.1 Returns details of applications
Get-PASApplicationAuthenticationMethod 9.1 Returns application authentication methods
Remove-PASApplication 9.1 Deletes an application
Remove-PASApplicationAuthenticationMethod 9.1 Delete auth method from an application
Import-PASConnectionComponent 10.3 Imports a Connection Component
New-PASPSMSession 9.10 Get required parameters to connect through PSM
Get-PASPSMRecording 9.10 Get details of PSM Recording
Get-PASPSMSession 9.10 Get details of PSM Sessions
Resume-PASPSMSession 10.2 Resumes a Suspended PSM Session.
Stop-PASPSMSession 10.1 Terminates a PSM Session.
Suspend-PASPSMSession 10.2 Suspends a PSM Session.
Get-PASOnboardingRule 9.7 Gets automatic on-boarding rules
New-PASOnboardingRule 9.7 Adds a new on-boarding rule
Remove-PASOnboardingRule 9.7 Deletes an automatic on-boarding rule
Get-PASPlatform 9.10 Retrieves details of a specified platform.
Import-PASPlatform 10.2 Import a new platform
Export-PASPlatform 10.4 Export a platform
Add-PASPolicyACL 9.0 Adds a new privileged command rule
Get-PASPolicyACL 9.0 Lists OPM Rules for a policy
Remove-PASPolicyACL 9.0 Delete privileged commands from policy
Approve-PASRequest 9.10 Confirm a single request
Deny-PASRequest 9.10 Reject a single request
Get-PASRequest 9.10 List requests
Get-PASRequestDetail 9.10 Get request details
New-PASRequest 9.10 Creates an access request for an account
Remove-PASRequest 9.10 Deletes a request
Add-PASSafeMember 9.3 Adds a Safe Member to a safe
Get-PASSafeMember 9.7 Lists the members of a Safe
Remove-PASSafeMember 9.3 Removes a member from a safe
Set-PASSafeMember 9.3 Updates a Safe Member's Permissions
Add-PASSafe 9.2 Adds a new safe
Get-PASSafe 9.7 Returns safe details
Remove-PASSafe 9.3 Deletes a safe
Set-PASSafe 9.3 Updates a safe
Get-PASSafeShareLogo 9.7 Returns details of SafeShare Logo
Get-PASServer 9.7 Returns details of the Web Service Server
Get-PASServerWebService 9.7 Returns details of the Web Service
Get-PASComponentDetail 10.1 Returns details about component instances.
Get-PASComponentSummary 10.1 Returns consolidated information about components.
Add-PASGroupMember 9.7 Adds a user as a group member
Get-PASLoggedOnUser 9.7 Returns details of the logged on user
Get-PASUserLoginInfo 10.4 Returns login details of the current user
Get-PASUser 9.7 Returns details of a user
New-PASUser 9.7 Creates a new user
Remove-PASUser 9.7 Deletes a user
Set-PASUser 9.7 Updates a user
Unblock-PASUser 9.7 Activates a suspended user
Get-PASDirectory 10.4 Get configured LDAP directories
Add-PASDirectory 10.4 Add a new LDAP directory
New-PASDirectoryMapping 10.4 Create a new LDAP directory mapping
Add-PASPTARule 10.4 Add a new Risky Commandrule to PTA
Get-PASPTAEvent 10.3 Get security events from PTA
Set-PASPTAEvent 11.3 Set PTA security event status
Get-PASPTARemediation 10.4 Get automatic response config from PTA
Get-PASPTARule 10.4 List Risky Command rules from PTA
Set-PASPTARemediation 10.4 Update automaticresponse config in PTA
Set-PASPTARule 10.4 Update a Risky Commandrule in PTA
Get-PASAccountDetail 10.4 Returns information about accounts.
Get-PASGroup 10.5 Return group information
Remove-PASGroupMember 10.5 Remove group members
Set-PASOnboardingRule 10.5 Update Onboarding Rules
Add-PASDiscoveredAccount 10.5 Add discovered accounts to the Accounts Feed
Connect-PASPSMSession 10.5 Get required parameters to connect to a PSM Session
Get-PASPSMSessionActivity 10.6 Get activity details from an active PSM Session.
Get-PASPSMSessionProperty 10.6 Get property details from an active PSM Session.
Get-PASPSMRecordingActivity 10.6 Get activity details from a PSM Recording.
Get-PASPSMRecordingProperty 10.6 Get property details from a PSM Recording.
Export-PASPSMRecording 10.6 Save PSM Session Recording to a file.
Request-PASJustInTimeAccess 10.6 Request temporary access to a server.
Revoke-PASJustInTimeAccess 12.0 Revoke temporary server access.
Get-PASDirectoryMapping 10.7 Get details of configured directory mappings.
Set-PASDirectoryMapping 10.7 Update a configured directory mapping.
Remove-PASDirectory 10.7 Delete a directory configuration.
Find-PASSafe 10.1 - 11.7 List or Search Safes by name.
Set-PASDirectoryMappingOrder 10.10 Reorder Directory Mappings
Set-PASUserPassword 10.10 Reset a User's Password
New-PASGroup 11.1 Create a new CyberArk group
Get-PASPlatformSafe 11.1 List details for all platforms
Remove-PASDirectoryMapping 11.1 Deletes a Directory Mapping
Enable-PASCPMAutoManagement 10.4 Enables Automatic CPM Management for an account
Disable-PASCPMAutoManagement 10.4 Disables Automatic CPM Management for an account
Test-PASPSMRecording 11.2 Determine validity of PSM Session Recording
Copy-PASPlatform 11.4 Duplicate a platform
Enable-PASPlatform 11.4 Enable a platform
Disable-PASPlatform 11.4 Disable a platform
Remove-PASPlatform 11.4 Delete a platform
Remove-PASGroup 11.5 Delete a user group
Get-PASAllowedReferrer 11.5 List PVWA Allowed Referrer
Add-PASAllowedReferrer 11.5 Add PVWA Allowed Referrer
Get-PASAccountSSHKey 11.5 Get Private SSH Key value of Account
Get-PASAuthenticationMethod 11.5 List authentication methods
Add-PASAuthenticationMethod 11.5 Add authentication method
Set-PASAuthenticationMethod 11.5 Update authentication method
Get-PASConnectionComponent 11.5 List configured connection components
Get-PASPSMServer 11.5 List configured PSM Servers
Get-PASPlatformPSMConfig 11.5 List Platform PSM configuration
Set-PASPlatformPSMConfig 11.5 Update Platform PSM configuration
Start-PASAccountImportJob 11.6 Add multiple accounts to existing Safes.
Get-PASAccountImportJob 11.6 Get status of account import
New-PASAccountObject --- Format an object to include in an import list
Get-PASDiscoveredAccount 11.6 List discovered accounts
Add-PASOpenIDConnectProvider 11.7 Adds an OIDC Authentication Provider
Get-PASOpenIDConnectProvider 11.7 Gets details of configured OIDC Authentication Providers
Remove-PASOpenIDConnectProvider 11.7 Deletes an OIDC Authentication Provider
Set-PASOpenIDConnectProvider 11.7 Updates an OIDC Authentication Provider
Remove-PASAuthenticationMethod 11.7 Delete an authentication method
Clear-PASDiscoveredAccountList 12.1 Clear all discovered accounts from the pending account list
Get-PASAccountPasswordVersion 12.1 Get details of previous password versions
New-PASAccountPassword 12.0 Generate new password values based on platform policy
Set-PASLinkedAccount 12.1 Associate logon and reconcile accounts
Clear-PASLinkedAccount 12.2 Clear associated linked accounts
Clear-PASPrivateSSHKey 12.1 Remove all MFA caching SSH Keys
New-PASPrivateSSHKey 12.1 Generate MFA caching SSH Keys
Remove-PASPrivateSSHKey 12.1 Delete MFA caching SSH Keys
Set-PASGroup 12.0 Update CyberArk groups
Get-PASPlatformSummary 12.2 Get information on platform system types

Installation

Logo

Prerequisites

  • Powershell v5 (minimum), or PowerShell Core
  • CyberArk PAS REST API/Web Service
  • A user with which to authenticate, with appropriate Vault/Safe permissions.

Install Options

Use one of the following methods:

Option 1: Install from PowerShell Gallery

PowerShell 5.0 or above must be used

This is the simplest & preferred method for installation of the module.

To install the module from the PowerShell Gallery,
from a PowerShell prompt, run:

Install-Module -Name psPAS -Scope CurrentUser

Option 2: Manual Install

You can manually copy the module files to one of your powershell module folders.

Find your PowerShell Module Paths with the following command:

$env:PSModulePath.split(';')

The module files should be placed in a folder named psPAS in one of the listed locations.

More: about_PSModulePath

There are multiple options for downloading the module files:

PowerShell Gallery
  • Download from the module PowerShell Gallery:
    • Run the PowerShell command Save-Module -Name psPAS -Path C:\temp
    • Copy the C:\temp\psPAS folder to your "Powershell Modules" directory of choice.
psPAS Release
  • Download the latest release
    • Unblock & Extract the archive
    • Rename the extracted psPAS-v#.#.# folder to psPAS
    • Copy the psPAS folder to your "Powershell Modules" directory of choice.
psPAS Branch
  • Download the master branch
    • Unblock & Extract the archive
    • Copy the psPAS (\<Archive Root>\psPAS-master\psPAS) folder to your "Powershell Modules" directory of choice.

Verification

Validate Install:

Get-Module -ListAvailable psPAS

Import the module:

Import-Module psPAS

List Module Commands:

Get-Command -Module psPAS

Get detailed information on specific commands:

Get-Help New-PASUser -Full

Logo

Sponsorship

Please support continued psPAS development; consider sponsoring @pspete on GitHub Sponsors

Changelog

All notable changes to this project will be documented in the Changelog

Author

License

This project is licensed under the MIT License.

Contributing

Any and all contributions to this project are appreciated.

See the CONTRIBUTING.md for a few more details.

Support

psPAS is neither developed nor supported by CyberArk; any official support channels offered by the vendor are not appropriate for seeking help with the psPAS module.

Help and support should be sought by opening an issue, or emailing pspas@pspete.dev.

Priority support could be considered for sponsors of @pspete, contact us to discuss options.

Acknowledgements

Hat Tips:

Allyn Lindsay (allynl93) for PS-SAML-Interactive

Assaf Miron (AssafMiron) For the JSON formatting assistance.

Warren Frame (RamblingCookieMonster) for Add-ObjectDetail.ps1.

Joe Garcia (infamousjoeg) for the unofficial API documentation.

Chapeau!

Logo