从变量中删除特定行

时间:2018-08-03 12:22:29

标签: powershell

我正在制作一个PowerShell脚本,该脚本将列出当前登录到系统的用户数。

我要做的是以下事情:

$users = query user /server:localhost
$number = $users.Count

if ( $number -le 1 ) {
    Write-Host 0 Users online"|" Users=0
} else {
    $number = $users.Count-1
    Write-Host $number Users online"|" Users=$number
}
exit

但是我需要能够排除用户,例如管理员。

我以为我可以发表if声明,但是我真的不知道该怎么做。

让我这样说吧:

$users = query user /server:localhost

if ($users -contains '*Administrator*') {
    $number = $users.Count-2
    Write-Host $number
}
exit

我添加.Count-2是因为第一行是诸如“用户名,ID,会话”等信息。

它不会返回任何内容,所以我认为我不能像这样发表if声明。

是否可以从$users变量中“ grep”某些内容并删除该行?

例如,如果我运行:

$users[1]

它将返回第二行,等等。但是我该如何操作这些行?

我也尝试过:

$users | Where-Object {$_ -match 'administrator'}

但是什么也不会返回。

有人在这里对我能做什么有任何输入吗?

1 个答案:

答案 0 :(得分:0)

  

它不会返回任何内容,所以我认为我不能像这样发表if声明。

您可以大致像这样制作if语句,但不能使用:

'some words test' -contains 'words'

作为测试。这是因为-contains用于此用途:

@('collection', 'of', 'words', 'here') -contains 'words'     # if a collection contains X.

对于字符串中的文本,您需要以下之一:

'some words test' -like '*words*'   # this is a wildcard match, case insensitive.

#or

'some words test' -match 'words'    # this is a regex match, case insensitive.

#or

'some words test'.Contains('words')    # this is a .Net method on strings, case sensitive.