首页 > 解决方案 > 使用 Powershell 从变量中搜索字符串

问题描述

我正在尝试从变量中搜索字符串。

我将 Azure 活动日志转储到一个变量中,并尝试为该日志找到特定的行。下面是我的代码。

$log=Get-AzLog -ResourceId "/subscriptions/SubscriptionID/resourceGroups/ResourceGroupName/providers/Microsoft.Sql/servers/qcsqldw/databases/DatabaseName" -StartTime 2020-04-01T00:30 
$find=$log | Select-String  -Pattern 'Microsoft.Sql/servers/databases/resume/action' 
Write-Output $find

我正在尝试从日志中搜索这一行“操作:Microsoft.Sql/servers/databases/resume/action ”

运行上述脚本时,我没有得到任何输出。

请帮助我。

标签: powershellpowershell-3.0azure-powershell

解决方案


您似乎正在从 Azure 活动资源日志中搜索授权操作属性。如果是这种情况,那么您不需要进行任何字符串搜索,只需引用该Authorization.Action属性即可。Get-AzLog会给你一个System.Object[],它可以正常地用Foreach-Objector查询Where-Object。您可以使用 找到此类型信息(Get-AzLog).GetType().FullName

您可以运行此查询以获取所有结果Foreach-Object

Get-AzLog -ResourceId $id -StartTime 2020-04-01T00:30 | ForEach-Object {$_.Authorization.Action}

这将为您提供Authorization.Action从开始时间运行的所有日志中的属性2020-04-01T00:30

如果要修改此查询以搜索特定操作,可以使用 过滤Where-Object,然后Authorization.Action从结果中选择:

(Get-AzLog -ResourceId $id -StartTime 2020-04-01T00:30 | Where-Object {$_.Authorization.Action -eq "Microsoft.Sql/servers/databases/resume/action"}).Authorization.Action

推荐阅读