-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPeek-Messages.ps1
61 lines (50 loc) · 1.89 KB
/
Peek-Messages.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
60
61
param(
[string]$Namespace,
[string]$Queue,
[string]$Topic,
[string]$Subscription,
[bool]$DeadLeterQueue = $false,
[int]$MaxMessages = 5
)
if ($Queue.Length -gt 0) {
$entityPath = $Queue
}
elseif ($Topic.Length -gt 0 -and $Subscription.Length -gt 0) {
$entityPath = "$($Topic)/subscriptions/$($Subscription)"
}
else {
throw "Either Queue or Topic and Subscription parameters must be provided."
}
if ($DeadLeterQueue) {
$entityPath += "/`$DeadLetterQueue"
}
$messageUri = "https://$($Namespace).servicebus.windows.net/$($entityPath)/messages/head?api-version=2015-01"
$token = Get-AzAccessToken -ResourceUrl "https://servicebus.azure.net"
$headers = @{ Authorization = "Bearer $($token.Token)" }
$receivedMessages = 0
$messages = [pscustomobject]@()
do {
$req = Invoke-WebRequest -Uri $messageUri -Headers $headers
if ($req.StatusCode -eq 204) {
Write-Warning "Entity contains no messages."
exit
}
$messageProperties = $req. Headers['BrokerProperties'] | ConvertFrom-Json
Write-Host "Retrieved Message ID: $($messageProperties.MessageId)"
$messages += [pscustomobject]@{
Message = $req.Content
MessageId = $messageProperties.MessageId
EnqueuedTimeUtc = $messageProperties.EnqueuedTimeUtc
DeliveryCount = $messageProperties.DeliveryCount
State = $messageProperties.State
Label = $messageProperties.Label
}
if ($null -ne $req.Headers['Next-Message']) {
$messageUri = $req.Headers['Next-Message'][0]
}
$receivedMessages++
} while (($receivedMessages -lt $MaxMessages) -and ($null -ne $req.Headers['Next-Message']))
if ($null -ne $req.Headers['Next-Message']) {
Write-Warning "Message limit of $($MaxMessages) exceeded but more messages are present."
}
$messages | Out-GridView