【问题标题】:PowerShell script to list items in collection用于列出集合中的项目的 PowerShell 脚本
【发布时间】:2011-01-25 23:52:13
【问题描述】:

我是 PowerShell 新手,正在尝试查询我的 SQL 服务器。我想到创建一个新的 psdrive,然后导航到数据库等,并有一行代码作为

$dbs = (get-childitem sqlserver:\sql\SERVER\INSTANCE\databases)

当我通过管道将 $dbs 传输到 foreach 时,我将如何获得数据库对象集合的结果?我正在尝试读取我的测试数据库的扩展属性。

这个单一查询给出了我想要为每个数据库重复的结果。

设置位置 驱动器名:\databases\beagle_test\extendedproperties 获取子项 |选择显示名称, 价值

非常感谢任何帮助。

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    所以,多年后,我正在查看我的 SO 统计数据,并看到这个老问题,并认为我的 powershell 技能自 2010 年以来有所增长。

    用例早已不复存在,但我认为我想要实现的是:

    foreach ($db in $SMOServer.databases | Where-Object status -eq 'normal') {
        $db.ExtendedProperties | Select-Object @{name = "DBName"; expression = {$db.Name}}, name, value
    }
    

    结果如下:

    DBName                 Name                                 Value
    ------                 ----                                 -----
    AdventureWorks2014     MS_Description                       AdventureWorks 2014 Sample OLTP Database
    AdventureWorks2016     MS_Description                       AdventureWorks 2016 Sample OLTP Database
    

    【讨论】:

      【解决方案2】:

      怎么样:

      dir sqlserver:\sql\ServerName\InstanceName\Databases\*\ExtendedProperties\* | 
        select @{Name="Database";Expression={$_.Parent.Name}}, Name, Value
      

      【讨论】:

      • (我应该提到......我在一个系统上测试了这个,其中一些但不是所有数据库具有扩展属性)
      • 这太疯狂了,我仍然得到一个错误 ::>> Get-ChildItem : 长度不能小于零。参数名称:length At line:5 char:4 + dir
      • 你漏掉了一个斜线。 Databases*\ExtendedProperties - 在 Databases 之后,星号之前有一个斜杠。
      • 哦...所以可能正在删除它。它也从我的评论中删除了。
      • 之前没有注意到。根据您的回答(复制/粘贴),我有斜线。我的错误有相同的斜杠,但我认为 SO 已将它们作为转义字符删除
      【解决方案3】:

      怎么样:

      dir SQLSERVER:\SQL\Server\Instance\databases\*\extendedproperties\* | % {select $_.displayname, $_.value}
      

      【讨论】:

      • 嗨,罗伯。并非所有数据库都有扩展属性 :: Get-ChildItem :长度不能小于零。参数名称:length At line:12 char:4 + dir
      【解决方案4】:

      试试这个

      Set-Location DRIVENAME:\Databases

      获取子项 | foreach-object { if (Test-Path $("$.Name\extendedproperties")) { Get-ChildItem $("$.Name\extendedproperties") |选择显示名称,值 } }

      这里的第二行是一个语句。我正在做的是检查 Extendedproperties 是否存在,然后获取子项。

      【讨论】:

      • 在 line:6 char:47 + Get-ChildItem | foreach-object { if (Test-Path
      • 尝试添加“显示名称”(见上文),但原始对每个数据库都给出了相同的错误
      • 我也迷路了..我现在需要查看属性..是否可以粘贴 Get-ChildItem DRIVERNAME:\Databases 的输出?
      • 有没有办法只获取一组,而不是每个数据库?
      • 很抱歉我没看懂您的最后评论
      【解决方案5】:

      我没有方便的 SQL 服务器来尝试这个。让我知道结果

      Set-Location DRIVENAME:\Databases

      获取子项 | % { Get-ChildItem $("$_.Name\extendedproperties") |选择显示名称、值}

      【讨论】:

      • 非常接近,每个数据库的此错误:Get-ChildItem:长度不能小于零。参数名称:length At line:6 char:34 + Get-ChildItem | % { 获取子项
      • 你能解释一下吗? % 请?我的帮助文件在搜索时没有返回任何结果...
      • 啊...所以,$_.Name 不存在。当您在 DRIVENAME:\Databases 运行 Get-ChildItem 时,您会看到什么?显示您的数据库名称的列的名称是什么?顺便说一句, % 是 foreach 对象。这只是一个简写符号
      • 是的,得到了​​ |就其本身而言,它后面的 % 是什么?不是所有的数据库都会有扩展属性,我认为这就是问题所在......
      • gci 在 sl 之后为每个数据库提供每个属性。 gci |选择名称给出每个数据库的名称
      猜你喜欢
      • 2019-09-08
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2018-08-27
      相关资源
      最近更新 更多