如何在powershell中解析SQL结果

如何在powershell中解析SQL结果,powershell,Powershell,我使用下面的SQL查询来获取数据库备份文件的逻辑文件名 $sqlcmd = "RESTORE FILELISTONLY FROM DISK = N'E:\backup\OnePDM\DBEmpty.bak'" & sqlcmd -Q $sqlcmd 现在我尝试使用下面的命令从上面的结果中只过滤LogicalName列。但所有行的值都是空的 & sqlcmd -Q $sqlcmd | Select-Object -Property LogicalName 有没有办法从Po

我使用下面的SQL查询来获取数据库备份文件的逻辑文件名

$sqlcmd = "RESTORE FILELISTONLY FROM DISK = N'E:\backup\OnePDM\DBEmpty.bak'"
& sqlcmd -Q $sqlcmd 
现在我尝试使用下面的命令从上面的结果中只过滤LogicalName列。但所有行的值都是空的

& sqlcmd -Q $sqlcmd   | Select-Object -Property LogicalName

有没有办法从Powershell命令获取此信息?

您的命令将无法工作,因为
sqlcmd
不是Cmdlet。这意味着
sqlcmd
将只返回文本,而不是PowerShell对象

要解决此问题,您应该改为使用来自Microsoft官方
sqlserver
或社区自制的
dbatools
等模块的Cmdlet

sqlserver
dbatools
: 免责声明:我过去曾对
dbatools
做出过非代码贡献,但我没有正式加入他们


您的命令将不起作用,因为
sqlcmd
不是Cmdlet。这意味着
sqlcmd
将只返回文本,而不是PowerShell对象

要解决此问题,您应该改为使用来自Microsoft官方
sqlserver
或社区自制的
dbatools
等模块的Cmdlet

sqlserver
dbatools
: 免责声明:我过去曾对
dbatools
做出过非代码贡献,但我没有正式加入他们


我在
sqlcmd
中遇到了问题,因为它返回的数据很难处理。我从
sqlserver
powershell模块切换到
Invoke sqlcmd
。将DOS命令与PowerShell混合使用通常是一种不好的做法。您可以从<代码> SQLServer < /COD>或<代码>中调用<代码> >代码> >调用DBAQuase<代码> >代码> dBooOLs/COD> >(我个人建议<代码> dBATOOL</代码>),我遇到了<代码> SQLCMD</代码>的麻烦,作为它返回的数据,我发现它很难处理。我从
sqlserver
powershell模块切换到
Invoke sqlcmd
。将DOS命令与PowerShell混合使用通常是一种不好的做法。您可以从<代码> SQLServer < /COD>或<代码>中调用<代码> >代码> >调用DBAQuase<代码> >代码> dBaoOLs/COD> >(我个人建议<代码> dBATOOL)
# Run this once to get the module if you don't already have it (requires PowerShell Get)
Install-Module sqlserver

# Invoke this every time you begin a new instance (new terminal window or new script)
Import-Module sqlserver

Invoke-SqlCmd -ServerInstance 'yourserver\instance' -Query 'SELECT * FROM whatever' |
    Select-Object -Property ColumnNameHere
# Run this once to get the module if you don't already have it (requires PowerShell Get)
Install-Module dbatools

# Invoke this every time you begin a new instance (new terminal window or new script)
Import-Module dbatools

Invoke-DbaQuery -SqlInstance 'yourserver\instance' -Query 'SELECT * FROM whatever' |
    Select-Object -Property ColumnNameHere