Powershell -将值从哈希表保存到@{}

ih99xse1  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(91)

我有一些Azure应用程序服务,每个服务都有自己配置。我想获取该设置并将其存储到变量@{}中。因此,当我运行:

$srcapp = Get-AzWebApp -ResourceGroupName "myrg" -Name "myapp"
    $srcapp.SiteConfig.AppSettings

我在Hashtable中获得了配置:

Name   Value
----   -----
Tetst3 78910
Test2  4567
Test   1234

然后我想把它放在一个@{}中来定义哈希表:

@{"Test"='1234';"Test2"='4567';"Tetst3"='78910'}

这可能吗?
谢谢

5ktev3wc

5ktev3wc1#

$srcapp.SiteConfig.AppSettings返回System.Collections.Generic.IList[Microsoft.Azure.Management.WebSites.Models.NameValuePair]类型的对象:

$webapp = Get-AzWebApp -ResourceGroupName "myrg" -Name "myapp";

write-host ($webapp.SiteConfig | gm -Name "AppSettings").Definition;
# System.Collections.Generic.IList[
#    Microsoft.Azure.Management.WebSites.Models.NameValuePair
# ] AppSettings {get;set;}

$appsettings = $webapp.SiteConfig.AppSettings

$appsettings
# Name   Value
# ----   -----
# Tetst3 78910
# Test2  4567
# Test   1234

注意,您也可以创建一个用于测试,如下所示:

$appsettings = [System.Collections.Generic.List[Microsoft.Azure.Management.WebSites.Models.NameValuePair]] @(
    [Microsoft.Azure.Management.WebSites.Models.NameValuePair]::new("Tetst3", "78910"),
    [Microsoft.Azure.Management.WebSites.Models.NameValuePair]::new("Test2",  "4567"),
    [Microsoft.Azure.Management.WebSites.Models.NameValuePair]::new("Test",   "1234")
);

$appsettings
# Name   Value
# ----   -----
# Tetst3 78910
# Test2  4567
# Test   1234

要将其转换为System.Collections.Hashtable,可以执行以下操作:

$hashtable = $appsettings | foreach-object `
    -Begin   { $tmp = @{}; } `
    -Process { $tmp.Add($_.Name, $_.Value); } `
    -End     { return $tmp; }

$hashtable | Format-Table -AutoSize;
# Name   Value
# ----   -----
# Tetst3 78910
# Test2  4567
# Test   1234

当然,当它为输出而序列化时,它看起来是一样的,但是它们在内存中是完全不同的底层类型...
如果你 * 特别 * 想要哈希表的字符串化版本,你可以这样做:

$psobject = new-object pscustomobject -Property $hashtable;
$output = "$psobject";
$output
# @{Tetst3=78910; Test2=4567; Test=1234}
  • 或 *,如果需要将其字符串化为与示例 * 完全 * 一样,可以执行以下操作:
$result = "@{" + `
    (($hashtable.GetEnumerator() | foreach-object {
         "`"$($_.Name)`"=`"$($_.Value)`""
    }) -join ";") + `
"}";

$result
# @{"Tetst3"="78910";"Test2"="4567";"Test"="1234"}

但要注意,如果数据中包含引号等特殊字符,它可能会中断。

相关问题