如何在查询结果中创建排除?

时间:2015-04-11 00:25:37

标签: powershell

请原谅我,我对PowerShell相对较新。我有一个问题,我们需要注销除一个ID之外的所有断开连接的用户。我发现这个脚本可以很好地注销断开连接的用户。我的问题是如何修改此部分以忽略查询结果中的一个或多个指定用户?

function Get-Sessions    
{
$queryResults = query session
$starters = New-Object psobject -Property @{"SessionName" = 0; "UserName" = 0; "ID" = 0; "State" = 0; "Type" = 0; "Device" = 0;}
foreach ($result in $queryResults)
{
  try
  {
     if($result.trim().substring(0, $result.trim().indexof(" ")) -eq "SESSIONNAME")
     {
        $starters.UserName = $result.indexof("USERNAME");
        $starters.ID = $result.indexof("ID");
        $starters.State = $result.indexof("STATE");
        $starters.Type = $result.indexof("TYPE");
        $starters.Device = $result.indexof("DEVICE");
        continue;
     }

     New-Object psobject -Property @{
        "SessionName" = $result.trim().substring(0, $result.trim().indexof(" ")).trim(">");
        "Username" = $result.Substring($starters.Username, $result.IndexOf(" ", $starters.Username) - $starters.Username);
        "ID" = $result.Substring($result.IndexOf(" ", $starters.Username), $starters.ID - $result.IndexOf(" ", $starters.Username) + 2).trim();
        "State" = $result.Substring($starters.State, $result.IndexOf(" ", $starters.State)-$starters.State).trim();
        "Type" = $result.Substring($starters.Type, $starters.Device - $starters.Type).trim();
        "Device" = $result.Substring($starters.Device).trim()
     }
  } 
  catch 
  {
     $e = $_;
     Write-Log "ERROR: " + $e.PSMessageDetails
  }
}
}

感谢您提供的任何意见。

1 个答案:

答案 0 :(得分:0)

所以你想省略某些结果?您正在使用PowerShell对象,因此Where-Object

应该很容易
$omissions = "user1","user2"

foreach ($result in $queryResults)
{
    # Stuff inside the loop
} | Where-Object{$omissions -notcontains $_.Username}

点击where-object,我们使用-notcontains查看给定用户是否不在$omissions数组中。这当然是用户列表。

<强>买者

您可能会遇到foreach构造的输出问题。我在早于3.0的PowerShell版本中看到了这一点。如果发生这种情况,您可以将New-Object捕获到数组中,以便稍后过滤或使用ForEach-Object