【发布时间】:2018-03-14 08:25:08
【问题描述】:
如何从 PowerShell v1 中的 SQLCMD 输出中选择列?我正在尝试在 PowerShell v1 中使用 Write-Output 进行 JSON 输出。
查询最后的输出。
$_ 返回两列。如果我们可以使用$_.name 和$_.jobid,但它们都返回空行。解决此问题将是首选解决方案。
这是 PowerShell 命令:
Write-Output '{"data":[';
(SQLCMD -S 'x.x.x.x' -U 'user' -P 'passwors' -i "C:\query.sql" -W) | %{
try {
($coma + '{"{#JOBID}":"' + $_ + '",' + '"{#JOBNAME}":"' + $_ + '"}');
$coma=',';
} catch {}
};
Write-Output "]}"
它返回什么:
{"data":[
,{"{#JOBID}":"12345-aaaa-1234-5678-000000000000000 Clear DB entries","{#JOBNAME}":"12345-aaaa-1234-5678-000000000000000 Clear DB entries"}
,{"{#JOBID}":"12345-bbbb-1234-5678-000000000000000 TempLog DB","{#JOBNAME}":"12345-bbbb-1234-5678-000000000000000 TempLog DB"}
]}
我的期望:
{"data":[
,{"{#JOBID}":"12345-aaaa-1234-5678-000000000000000","{#JOBNAME}":"Clear DB entries"}
,{"{#JOBID}":"12345-bbbb-1234-5678-000000000000000","{#JOBNAME}":"TempLog DB"}
]}
我不确定如何对job_id 和name 使用带有制表符分隔符($_ -split "t") 的拆分。我的尝试要么将两个列名都返回为1,在某些情况下返回空。
这是查询及其在命令行上的输出:
PS C:\> SQLCMD -S 'x.x.x.x' -U '用户' -P '密码' -i "C:\query.sql" -W job_id 名称 12345-aaaa-1234-5678-000000000000000 清除数据库条目 12345-bbbb-1234-5678-000000000000000 TempLog DB (受影响的 2 行)我知道 ConvertTo-Json 在第 3 版上,但我想让它在 PowerShell v1 上运行,以便对那些因任何原因无法升级的人有所帮助。
【问题讨论】:
-
你试过
$_.name而不是$_["name"]吗? -
也返回空
-
$_ | Get-Member返回什么? -
如果我将 sqlcmd 输出分配给`$var1`,然后运行
$var1 | select $_ | get-member,我会得到这个输出。 imgur.com/a/McJ1U 似乎整个 sqlcmd 输出都保存为基于文本的表,所以可能是它的属性?我不确定 -
绝对没有使用 PowerShell v1 的正当理由。当前支持的所有 Windows 版本至少可以运行 PowerShell v3。甚至 Windows XP 和 Server 2003 至少也可以运行 PowerShell v2。立即升级。
标签: json powershell sqlcmd powershell-1.0