【问题标题】:Select values from Array based on name根据名称从数组中选择值
【发布时间】:2021-05-23 00:59:10
【问题描述】:

我使用以下方法提取了 SQL 实例的一些详细信息:

$SQLInstance1 = Get-DbaInstanceProperty -SqlInstance SQL | Select-Object ComputerName, Name, Value  | Where-Object Name -In ("FullyQualifiedNetName", "Edition", "PhysicalMemory", "Processors", "VersionString", "Collation", "IsClustered", "ResourceLastUpdateDateTime")

从这样的数组输出中将这些值分配给变量的最佳方法是什么:

计算机名名称值


SQL 版企业版(64 位) SQL 物理内存 1571485
SQL 处理器 40
SQL 版本字符串 11.0.7493.4
SQL 排序规则 Latin1_General_CI_AS
SQL IsClustered True
SQL ResourceLastUpdateDateTime 2019 年 12 月 24 日晚上 9:58:55
SQLfullyQualifiedNetName PTHSQL13.FMG.local

所以我想从上面分配$ComputerName = ComputerName$Edition = Edition 等,然后我可以使用它们来更新 SQL 表 $ComputerName

【问题讨论】:

    标签: sql-server powershell dbatools


    【解决方案1】:

    好的。首先,您需要将结果转换为字典,然后使用该属性字典创建一个新对象。

    例如:

    $dict = @{ }
    
    (Get-DbaInstanceProperty -SqlInstance localhost | Select-Object ComputerName, Name, Value | Where-Object Name -In ("FullyQualifiedNetName", "Edition", "PhysicalMemory", "Processors", "VersionString", "Collation", "IsClustered", "ResourceLastUpdateDateTime")).GetEnumerator() | % { $dict.Add($_.Name, $_.Value) }
    
    New-Object -TypeName PSObject -Property $dict
    
    $result = New-Object -TypeName PSObject -Property $dict
    
    $result.FullyQualifiedNetName
    
    $result.Processors
    

    上面的代码应该打印出FullyQualifiedNetName 值和Processors 计数。

    【讨论】:

      【解决方案2】:

      点符号是您的朋友。由于您存储的是一个已序列化的实际对象,因此您可以使用 .propertiesname 引用存储值的属性。

      [array]SQLInstance1 = Get-DbaInstanceProperty -SqlInstance SQL | Select-Object ComputerName, Name, Value  | Where-Object Name -In ("FullyQualifiedNetName", "Edition", "PhysicalMemory", "Processors", "VersionString", "Collation", "IsClustered", "ResourceLastUpdateDateTime")
      
      ($SQLInstance1.ComputerName.Count + $SQLInstance1.Name.Count + $SQLInstance1.Value.Count); $i++){
      [pscustomobject]@{
                  ComputerName = $($SQLInstance1.ComputerName[$i])
                  Name = $($SQLInstance1.Name[$i])
                  Value = $($SQLInstance1.Value[$i])
      
                      }
              }
      

      【讨论】:

      • 这样存储数据: Name Value ComputerName {SQL, SQL, SQL, SQL...} Name {Edition, PhysicalMemory, Processors, VersionString...} Value {Enterprise Edition (64 -bit), 1571485, 40, 11.0.7493.4...} 从中提取值的最佳方法是什么?
      • for 循环,刚刚编辑,但由于没有任何东西可以测试它,所以没有测试它。只需使用for 循环对列表进行索引。
      猜你喜欢
      • 2019-04-12
      • 2018-02-08
      • 1970-01-01
      • 2021-06-30
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 2023-02-08
      相关资源
      最近更新 更多