Public/Invoke-SfQuery.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<# .SYNOPSIS Execute a SOQL statement in the configured Salesforce org .DESCRIPTION Execute a SOQL statement in the configured Salesforce org .INPUTS None. You cannot pipe objects to Invoke-SfQuery. .OUTPUTS An array of PSCustomObjects that are the result of the SOQL query. .PARAMETER Query The SOQL statement to execute .EXAMPLE PS> $AccountNames = Invoke-SfQuery "SELECT Name FROM Account" | Select Name .LINK Set-Config .NOTES Assumes config is initialized for org access. #> function Invoke-SfQuery { [CmdletBinding()] [OutputType([PSCustomObject[]])] param( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline)] [ValidateNotNullOrEmpty()] [String]$Query ) begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" } end { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } process { Write-Debug "[$($MyInvocation.MyCommand.Name)] PSBoundParameters: $($PSBoundParameters | Out-String)" $q = $Query -replace " ", "+" $query = "/query?q=$($q)" $records = @() do { $response = Invoke-SfApi $query $records += $response.records if ($response.nextRecordsUrl) { $query = "/query/$($response.nextRecordsUrl -replace '.*/')" } } while ($response.done -eq $false) Write-Output $records } } |