2015-04-11 4 views
-1

Простите меня за то, что я относительно новичок в 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 
    } 
} 
} 

Благодарим за любой вклад, который у вас есть.

+0

Будет ли простой 'Where-Object' недостаточно для этого? – Matt

ответ

0

Итак, вы хотите опустить определенные результаты? Вы используете PowerShell объекты таким образом, это должно быть легко с Where-Object

$omissions = "user1","user2" 

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

Tack на where-object и мы используем -notcontains, чтобы увидеть, если данный пользователь не находится в массиве $omissions. Это, конечно, список пользователей.

Caveat

Вы можете иметь проблемы с выходом этой foreach конструкции. Я видел это в версиях PowerShell раньше 3.0. Если это произойдет, вы можете просто захватить New-Object s в массив для последующего фильтра или использовать ForEach-Object.

Смежные вопросы