如何使用PowerShell中的哈希表中的多个键进行搜索

时间:2011-08-02 16:20:15

标签: scripting powershell

我正在编写一个Powershell脚本,在其中我使用哈希表来存储有关数据库检查的信息。该表有5个键(主机,检查,上次执行时间,最后一个代表,状态),我想在我的表中搜索以下值:

$s = $table where $host -eq $hostname -and check -eq $check

有谁知道这是怎么做到的?如果它有任何区别,脚本不能依赖高于2.0的.NET框架

我是Powershell的新手和一般的脚本,所以这可能非常明显,但我似乎无法在Google上找到答案。此外,如果有人知道Powershell脚本编写的好参考页面,我将非常感谢链接。

Gísli

编辑:不要看它是如何重要但这是我用来创建哈希表的函数:

function read_saved_state{
    $state = @{}
    $logpos = @{}
    $last_log_rotate = 0
    foreach($s in Get-Content $saved_state_file){
        $x = $s.split('|')
        if($x[0] -eq 'check'){
            $state.host = $x[1]
            $state.check = $x[2]
            $state.lastexec = $x[3]
            $state.lastrep = $x[4]
            $state.status = $x[5]
        }
        elseif($x[0] -eq 'lastrotate'){
            $last_log_rotate = $x[1]
        }
        elseif($x[0] -eq 'log'){
            $logpos.lastpos = $x[3]
        }
    }

$ saved_state_file每次检查运行都有一行,也可以有一行用于上次日志轮换和最后一次日志位置。一个主机可以有多达12个检查。

我正在尝试提取特定检查,在特定主机上运行,​​以及更改lastexec_time,last_rep和status。     return $ state,$ logpos,$ last_log_rotate }

1 个答案:

答案 0 :(得分:2)

假设你有一个数组或哈希表列表(问题中不完全清楚),你的语法非常接近:

$s = $tables | where {($_.host -eq $hostname) -and ($_.check -eq $check)}