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

Scripting 如何在powershell中使用哈希表中的多个键进行搜索,scripting,powershell,Scripting,Powershell,我正在编写一个Powershell脚本,并在其中使用哈希表存储有关数据库检查的信息。该表有5个键(主机、检查、上次执行时间、上次代表、状态),我想在表中搜索以下值: $s = $table where $host -eq $hostname -and check -eq $check 有人知道这是怎么做到的吗?如果有任何不同,脚本不能依赖高于2.0的.NET framework 我不熟悉Powershell和脚本,所以这可能非常明显,但我似乎仍然无法在Google上找到答案。另外,如果有人知道

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

$s = $table where $host -eq $hostname -and check -eq $check
有人知道这是怎么做到的吗?如果有任何不同,脚本不能依赖高于2.0的.NET framework

我不熟悉Powershell和脚本,所以这可能非常明显,但我似乎仍然无法在Google上找到答案。另外,如果有人知道Powershell脚本的一个很好的参考页面,我将非常感谢提供一个链接

吉斯利

编辑:不知道这有什么关系,但我使用以下函数创建哈希表:

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_文件在每次检查运行时有一行,也可以在最后一次日志旋转和最后一次日志位置时有一行。一台主机最多可进行12次检查

我试图提取一个特定的检查,在特定的主机上运行,并更改lastexec\u时间、LastRep和状态。 返回$state、$logpos、$last\u log\u rotate
}

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

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

如果您显示用于加载哈希表的代码,这将很有帮助。看起来您应该能够从状态哈希表(新对象psobject-属性$state)创建PS自定义对象数组,并且您已经设置好了。@mjolinor这将如何工作。没有办法只使用哈希表吗?在函数中创建哈希表后,从该哈希表创建ps对象,并让函数返回它。如果要使用where对象进行过滤,则无法直接使用哈希表。@mjolinor。好的,谢谢,我正在调查。但where条款不是大问题。我可以通过搜索特定的主机并进行检查来获取哈希表中的特定条目吗。比如获取特定主机上特定测试的执行时间?@Eric Nicholson。谢谢我有一个哈希表数组,这非常有效。我想我已经试过了。