AZ模块中没有任何小工具可以从Azure应用配置中获取键值对。除了AZ CLI,还有其他选择吗?有没有一种方法可以与PowerShell的服务交互?
vsnjm48y1#
目前没有PowerShell支持从应用程序配置中获取键值。在PowerShell中调用Azure CLI是正确的方法。Az.AppConfiguration模块只支持管理操作(例如,创建应用程序配置存储等)。请求在GitHub https://github.com/Azure/AppConfiguration/issues/267中跟踪。
dgenwo3n2#
嘿,我有点迟到了,但我一直在寻找同样的东西,我最终创建了自己的解决方案,因为给定的答案只涵盖了管理任务,而不是数据检索。看看这个repo它可以获取密钥值并解析秘密。它还可以解析值中引用的键。它在后台使用Aztek,所以你需要先安装它。
35g0bw713#
下面是我的解决方案,使用应用程序配置连接字符串进行身份验证。您对返回对象的.items属性感兴趣。在分页的情况下,也会有一个next链接。有关详细信息,请参阅https://learn.microsoft.com/azure/azure-app-configuration/rest-api-key-value上的文档键可以包含斜杠字符,因此在构建$RequestUri时需要使用[System.Net.WebUtility]::UrlEncode($Key)对其进行URL编码。
.items
next
$RequestUri
[System.Net.WebUtility]::UrlEncode($Key)
function Invoke-AppConfigRequest { param( [Parameter(Mandatory = $true)] [string] $ConnectionString, # 'Endpoint=...;Id=...;Secret=...' [Parameter(Mandatory = $true)] [string] $RequestUri, # '/kv?api-version=1.0&key=some-url-encoded-key&label=*' [Parameter(Mandatory = $false)] [string] $Method = 'GET', # 'GET', 'POST' [Parameter(Mandatory = $false)] [object] $Body = $null # Accepts [object] to avoid implicit conversion of $null to empty string ) $ConnectionStringValues = $ConnectionString -split ';' | ForEach-Object { $Tokens = $_ -split '=',2; @{ Key = $Tokens[0]; Value = $Tokens[1] } } $Endpoint = ($ConnectionStringValues | Where-Object { $_.Key -eq 'Endpoint' }).Value $Credential = ($ConnectionStringValues | Where-Object { $_.Key -eq 'Id' }).Value $Secret = ($ConnectionStringValues | Where-Object { $_.Key -eq 'Secret' }).Value if ([string]::IsNullOrWhitespace($Endpoint) -or [string]::IsNullOrWhitespace($Credential) -or [string]::IsNullOrWhitespace($Secret)) { throw "Invalid App Configuration connection string" } $UtcNow = (Get-Date).ToUniversalTime().ToString('ddd, d MMM yyyy HH:mm:ss \G\M\T') $EndpointHost = $Endpoint -replace '^https?://(.*)$','$1' $ContentHash = [Convert]::ToBase64String( [System.Security.Cryptography.HashAlgorithm]::Create('sha256').ComputeHash( [System.Text.Encoding]::UTF8.GetBytes($(if ($Body -ne $null) { "$Body" } else { '' })) ) ) $StringToSign = "$Method`n$RequestUri`n$UtcNow;$EndpointHost;$ContentHash" $HmacSha256 = New-Object System.Security.Cryptography.HMACSHA256 $HmacSha256.Key = [Convert]::FromBase64String($Secret) $Signature = [Convert]::ToBase64String( $HmacSha256.ComputeHash( [System.Text.Encoding]::UTF8.GetBytes($StringToSign) ) ) $Headers = @{ 'Host' = $EndpointHost; 'x-ms-date' = $UtcNow; 'x-ms-content-sha256' = $ContentHash; 'Accept' = 'application/vnd.microsoft.appconfig.kv+json, application/json, application/problem+json'; 'Authorization' = "HMAC-SHA256 Credential=$Credential&SignedHeaders=x-ms-date;host;x-ms-content-sha256&Signature=$Signature"; } $Uri = "$Endpoint$RequestUri" $Response = Invoke-WebRequest -Method $Method -Uri $Uri -Headers $Headers -Body $Body if ($Response.StatusCode -eq 200) { [System.Text.Encoding]::UTF8.GetString($Response.Content) | ConvertFrom-Json } }
示例调用:
function Get-AppConfigKeyValue { param( [Parameter(Mandatory = $true)] [string] $ConnectionString, [Parameter(Mandatory = $true)] [string] $Key, [Parameter(Mandatory = $false)] [string] $Label = '' ) $UrlEncodedKey = [System.Net.WebUtility]::UrlEncode($Key) $UrlEncodedLabel = [System.Net.WebUtility]::UrlEncode($Label) # https://learn.microsoft.com/azure/azure-app-configuration/rest-api-key-value $Method = 'GET' $ApiVersion = '1.0' $RequestUri = '/kv' #if (![string]::IsNullOrWhitespace($UrlEncodedKey)) { # $RequestUri += "/$UrlEncodedKey" # Strict key/label matching, no support for wildcards like *. #} $RequestUri += "?api-version=$ApiVersion" if (![string]::IsNullOrWhitespace($UrlEncodedKey)) { $RequestUri += "&key=$UrlEncodedKey" # Key filter, accepts "*" to match all keys. } if (![string]::IsNullOrWhitespace($UrlEncodedLabel)) { $RequestUri += "&label=$UrlEncodedLabel" # Label filter, accepts "*" to match all labels. } else { $RequestUri += "&label=%00" # Matches KV without a label. } (Invoke-AppConfigRequest -ConnectionString $ConnectionString -RequestUri $RequestUri).items }
qybjjes14#
Azure CLI有一个命令az appconfig kv list,可用于列出应用程序配置中的所有键值。关于用法和示例的更多细节可以在这里找到。
az appconfig kv list
e4yzc0pl5#
新版本的az.appconfiguration模块提供了此功能。首先安装模块,如果您已经安装了它,请使用-Force开关:
install-module -name az.appconfiguration -Force
接下来,您可以使用端点查询应用配置存储:
Get-AzAppConfigurationKeyValue -Endpoint "https://appconfigname.azconfig.io"
您还可以使用标签和通配符:
Get-AzAppConfigurationKeyValue -Endpoint "https://appconfigname.azconfig.io" -Label "dev" -key "serverWeb*"
注意:当我试图获取所有KeyValues时,我遇到了一些错误,我怀疑它检索的值有一个最大值。使用标签和关键字过滤器,它工作得很好。
ki0zmccv6#
查看Az.AppConfiguration模块。我不能保证它的质量或多么完整,但它就在那里。Az模块看起来不像是作为依赖项包含的。您可以从PowerShell Gallery下载:
Install-Module -Name Az.AppConfiguration -Repository PSGallery -Scope CurrentUser
6条答案
按热度按时间vsnjm48y1#
目前没有PowerShell支持从应用程序配置中获取键值。在PowerShell中调用Azure CLI是正确的方法。Az.AppConfiguration模块只支持管理操作(例如,创建应用程序配置存储等)。
请求在GitHub https://github.com/Azure/AppConfiguration/issues/267中跟踪。
dgenwo3n2#
嘿,我有点迟到了,但我一直在寻找同样的东西,我最终创建了自己的解决方案,因为给定的答案只涵盖了管理任务,而不是数据检索。
看看这个repo
它可以获取密钥值并解析秘密。
它还可以解析值中引用的键。
它在后台使用Aztek,所以你需要先安装它。
35g0bw713#
下面是我的解决方案,使用应用程序配置连接字符串进行身份验证。您对返回对象的
.items
属性感兴趣。在分页的情况下,也会有一个next
链接。有关详细信息,请参阅https://learn.microsoft.com/azure/azure-app-configuration/rest-api-key-value上的文档键可以包含斜杠字符,因此在构建
$RequestUri
时需要使用[System.Net.WebUtility]::UrlEncode($Key)
对其进行URL编码。示例调用:
qybjjes14#
Azure CLI有一个命令
az appconfig kv list
,可用于列出应用程序配置中的所有键值。关于用法和示例的更多细节可以在这里找到。e4yzc0pl5#
新版本的az.appconfiguration模块提供了此功能。首先安装模块,如果您已经安装了它,请使用-Force开关:
接下来,您可以使用端点查询应用配置存储:
您还可以使用标签和通配符:
注意:当我试图获取所有KeyValues时,我遇到了一些错误,我怀疑它检索的值有一个最大值。使用标签和关键字过滤器,它工作得很好。
ki0zmccv6#
查看Az.AppConfiguration模块。我不能保证它的质量或多么完整,但它就在那里。Az模块看起来不像是作为依赖项包含的。
您可以从PowerShell Gallery下载: