首页 > 解决方案 > 使用 PowerShell 将服务总线队列消息内容转换为字符串

问题描述

我使用带有 powershell 的 rest api 从服务总线队列消息中获取详细信息。我不确定它何时发生,但现在内容以字节为单位,例如:内容:{64、6、115、116…}。如何将其转换为带有数据的普通字符串?

function Get-SAStoken {
    param (
      $QueueName,
      $Access_Policy_Name,
      $Access_Policy_Key
    )
    $expireInSeconds = 300
  
    [Reflection.Assembly]::LoadWithPartialName("System.Web")| out-null
      $uri="my.servicebus.windows.net/$QueueName"
      #Token expires now+300
      $expires=([DateTimeOffset]::Now.ToUnixTimeSeconds())+ $expireInSeconds
      $signatureString=[System.Web.HttpUtility]::UrlEncode($uri)+ "`n" + [string]$expires
      $HMAC = New-Object System.Security.Cryptography.HMACSHA256
      $HMAC.key = [Text.Encoding]::ASCII.GetBytes($Access_Policy_Key)
      $signature = $HMAC.ComputeHash([Text.Encoding]::ASCII.GetBytes($signatureString))
      $signature = [Convert]::ToBase64String($signature)
     
      $sasToken = "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}" -f  [System.Web.HttpUtility]::UrlEncode($uri), 
                                                                            [System.Web.HttpUtility]::UrlEncode($signature), 
                                                                            [System.Web.HttpUtility]::UrlEncode($expires), 
                                                                            [System.Web.HttpUtility]::UrlEncode($Access_Policy_Name)
          
    return $sasToken 
}

function Get-SBmessage {
    param (
      $SASToken,
      $Queue
    )  
    $queue = $Queue
    $header = @{ Authorization = $SASToken } 
    $postService = Invoke-WebRequest -Uri "https://my.servicebus.windows.net/$queue/messages/head" `
                                   -Headers $header `
                                   -Method Post 
                                
      
      return $postService
      
}

$Queue = "capacity-checker"
$SAStokenRunningTest = Get-SAStoken -QueueName $Queue  -Access_Policy_Name "pipeline" -Access_Policy_Key "key-for-sb-queue"

$SBmessage = Get-SBmessage -SASToken $SAStokenRunningTest -Queue $Queue
$SBmessage

标签: powershellazureservicebus

解决方案


所以我的解决方案是

[byte[]]$bytes = $SBmessage.Content
$msContent = [System.Text.Encoding]::ASCII.GetString($bytes)

谢谢@MathiasR.Jessen 的帮助


推荐阅读