以下命令运行正常,并使用Powershell给出结果
Invoke-DbaWhoIsActive -SqlInstance prod | Select-object 'dd hh:mm:ss.mss', login_name, wait_info, host_name, sql_text
dd hh:mm:ss.mss : 00 02:36:54.540
login_name : sa
wait_info :
host_name : Prod
sql_text : <?query --
begin tran
--?>
如何将过滤器应用于dd hh:mm:ss.mss-仅显示大于15分钟的结果。
答案 0 :(得分:2)
您可以将dd hh:mm:ss.mss
属性值解析为[timespan]
(System.TimeSpan
)实例,然后可以(通过Where-Object
cmdlet筛选其.TotalMinutes
属性:
Invoke-DbaWhoIsActive -SqlInstance prod | Where-Object {
([timespan] ($_.'dd hh:mm:ss.mss' -replace ' ', '.')).TotalMinutes -gt 15
} | Select-Object 'dd hh:mm:ss.mss', login_name, wait_info, host_name, sql_text
以上内容用句点(00 02:36:54.540
)替换了诸如.
之类的字符串中的空格,这导致您可以将字符串直接转换为[timespan]
。
答案 1 :(得分:0)
尝试一下:
Invoke-DbaWhoIsActive -SqlInstance prod | Select-object @{n='dd hh:mm:ss.mss';e={if(($_.'dd hh:mm:ss.mss'.tostring().split(" ")[1]).split(":")[0])-gt15){$_.'dd hh:mm:ss.mss'}}},login_name, wait_info, host_name, sql_text
答案 2 :(得分:0)
列标题的名字真可怕。也就是说,这应该可以实现您的目标。
Invoke-DbaWhoIsActive -SqlInstance prod |
Where-Object {($_.'dd hh:mm:ss.mss' -split ':')[1] -gt 15} |
Select-object 'dd hh:mm:ss.mss', login_name, wait_info, host_name, sql_text
只需在冒号'dd hh:mm:ss.mss'
处拆分属性:
,抓住第二个元素[1]
,如果它大于15,它将被传递到您的select-object语句。
这里有一个可以运行的小测试
$var = @'
dd hh:mm:ss.mss
00 02:36:54.540
00 02:12:54.540
00 02:44:54.540
00 02:15:54.540
'@ | convertfrom-csv
$var | Where-Object {($_.'dd hh:mm:ss.mss' -split ':')[1] -gt 15}