当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 中 -in 运算符的初学者指南

作者:精品下载站 日期:2024-12-14 16:01:14 浏览:12 分类:玩电脑

PowerShell 中 -in 运算符的初学者指南


测试集合中是否存在某个值是 PowerShell 脚本中的常见操作。您可能会考虑使用 -contains 运算符,但 PowerShell 提供了一个更简单的选项:-in 运算符。它是一个简单但功能强大的运算符,可以帮助您过滤和选择所需的数据。在本初学者指南中,您将了解如何使用 -in 运算符在 PowerShell 中进行成员资格测试和验证输入。我们将介绍使用 -in 运算符匹配数组、集合等的实际示例。

最后,您将了解有关 PowerShell In 运算符以及如何有效使用它所需的一切。无论您是想要刷新知识的 PowerShell 专家还是想要学习的初学者,本指南都适合您。

PowerShell 中的 -In 运算符是什么?

PowerShell 是一种功能强大的脚本语言,提供各种内置运算符,可以帮助您以不同的方式操作数据。 In 运算符是 PowerShell 中最常用的运算符之一。它用于检查某个值是否存在于值集合中,例如数组、列表或其他集合。

PowerShell 中的 -In 运算符允许您确定给定值是否存在于一组值或数组中。它由关键字“in”表示。 In 运算符返回一个布尔值(True 或 False),具体取决于该值是否存在于集合中。这对于像 if 语句这样的控制流机制特别有用,您可以在其中消除多行代码并创建更清晰、更易读的脚本。

无论您是验证用户输入、检查配置值还是查询数据集,-in 和 -notin 运算符都是您的好帮手。通过掌握这些运算符,您可以轻松编写更清晰的 PowerShell 条件语句。

它与-包含有何不同?

不要将 -In 误认为 -Contains。它们是从相反的角度使用的:

  • -In:检查集合中是否存在
  • -包含:检查集合是否包含某个值

理解这种区别是有效使用这些运算符的关键。

语法和基本用法

PowerShell -In 的基本语法很简单。左侧有一个值,右侧有一个数组或集合。


if ($value -in $array) {
    # Do something
}

在此 PowerShell -In 运算符示例中,$value 是您要检查的值,$array 是您要检查的集合之内。

如何在 PowerShell 中使用 In 运算符?

在 PowerShell 中使用 In 运算符非常简单。要使用 In 运算符,您需要指定要检查的值,后跟要检查的值的集合。这是一个例子:


$FruitList = "apple", "banana", "orange"
$Fruit = "apple"

If ($Fruit -in $FruitList) {
    Write-Host -f Green "Apple is present in the fruits collection."
}

在此示例中,我们创建了一个水果集合,并使用 In 运算符检查集合中是否存在“香蕉”。

[玩转系统] PowerShell 中 -in 运算符的初学者指南

这是另一个简短的形式:


"apple" -in ("apple", "banana", "orange")

这会返回 true,因为“apple”与集合中的字符串之一匹配。

-in 的一些关键属性:

  • 如果 LEFT 值与 RIGHT 集合中的任何值匹配,则返回 true
  • RIGHT 可以是数组、列表、范围、正则表达式结果等。
  • 默认匹配不区分大小写

这使得 -in 成为一个非常灵活的成员测试操作符。

PowerShell 中 -in 运算符的基本示例

数组和列表是 -in 的常见用例。以下是使用 -in 与数组的一些简单示例:


$fruits = "apple","banana","orange"

"apple" -in $fruits # True
"grape" -in $fruits # False

我们还可以将 -in 与内联数组一起使用:


$number = 5
$number -in @(1,3,5,7,9) # True

并使用通配符正则表达式匹配结果:


#Get All Files from a Folder
$Files = Get-ChildItem -Path "C:\Temp" *.txt

#Check if the Files collection has "Notes.txt"
"notes.txt" -in $Files.Name # True if matches

[玩转系统] PowerShell 中 -in 运算符的初学者指南

In 运算符也适用于自定义对象集合:


$Services = Get-Service

"wuauserv" -in $services.Name

将 -In 运算符与Where-Object 一起使用

Where-Object cmdlet 用于根据条件过滤对象。通过将 In 运算符与Where-Object cmdlet 相结合,您可以根据属性值是否存在于值集合中来筛选对象。这是一个例子:


#Get All Process
$Processes = Get-Process

#Filter the Processes
$Processes | Where-Object {$_.Name -in ("svchost", "explorer")} | Format-Table Name, Id, CPU -AutoSize

在此示例中,我们使用 In 运算符和Where-Object cmdlet 来过滤名称为“svchost”或“explorer”的进程。

使用 -in 匹配多个值

要检查多个匹配项,请重复 -in 子句:


$values = 10, 20, 30, 40

10 -in $values -and 30 -in $values

仅当两个数字都与集合匹配时才返回 true。

我们还可以将 -in 与其他逻辑运算符结合使用,例如 -or:假设您有一份杂货清单,并且您正在检查是否需要购买水果或蔬菜。您可以在 PowerShell 中使用 -in 和 -or 运算符来执行此检查。


# Sample data: items in your cart
$itemInCart = "Apple"

# Lists of fruits and vegetables
$fruits = "Apple", "Banana", "Orange"
$vegetables = "Carrot", "Broccoli", "Spinach"

# Check if you need to buy more fruits or vegetables
if ($itemInCart -in $fruits -or $itemInCart -in $vegetables) {
    Write-Host "You've added a healthy item to your cart."
} else {
    Write-Host "Consider adding some fruits or vegetables to your cart."
}

使用 -NotIn 进行反向匹配

-In 运算符相反,PowerShell 还具有 -NotIn 运算符。此运算符检查给定值是否存在于集合或值集中。要反转匹配结果,请使用 -notin:


$usernames = "john", "jane", "mike", "sarah"

$username = "peter"
if ($username -notin $usernames) {
    Write-Host "$username does not exist in the list of usernames"
}

在此示例中,我们使用 Not In 运算符来检查用户“Peter”是否不存在于用户名集合中。

Not In 运算符用于检查某个值是否不存在于值集合中。它由关键字“notin”表示。这是一个例子:


$numbers = 1, 2, 3, 4, 5

$number = 10
if ($number -notin $numbers) {
    Write-Host "$number does not exist in the list of numbers"
}

由于 10 与集合不匹配,因此返回“True”。这是直接使用这些值的另一个示例:


"apple" -notin @("carrot", "potato", "cucumber")

使“IN”运算符区分大小写

-in 运算符默认不区分大小写匹配。但你可以使用 -Cin 使其显式不区分大小写:


"Orange" -Cin $fruits # Matches "orange" but not "ORANGE"

考虑字符的大小写,这会检查数组或集合中是否存在值。


# Sample user input (case may vary)
$userInput = "apple"

# List of fruits, deliberately using different casing
$fruits = "Apple", "Banana", "orange"

# Check if the user's input is in the list, considering case
if ($userInput -cin $fruits) {
    Write-Host "The input is a known fruit."
} else {
    Write-Host "The input is not a known fruit."
}

如何在 Switch 语句中使用“In”?

PowerShell -In 运算符也可以与 switch 语句一起有效使用。这是一个例子:


$Values = 1, 5, 7
Switch ($Values) {
    {$_ -in 1..5} { Write-Host "$_ is between 1 and 5" }
    {$_ -in 6..10} { Write-Host "$_ is between 6 and 10" }
    default { Write-Host "$_ is outside the range" }
}

In 运算符的实际应用示例

为了让您更好地了解如何在 PowerShell 中使用 In 运算符,以下是一些示例:

示例1:检查用户是否是组成员

假设您有一个根据用户角色(例如“管理员”、“用户”或“访客”)执行操作的脚本。


$userRole = "Admin"

$adminRoles = "SuperAdmin", "Admin", "SubAdmin"

if ($userRole -in $adminRoles) {
    Write-Host "You have admin access."
}

在此 PowerShell“in”运算符示例中,-In 运算符检查 $userRole 变量值是否存在于 $adminRoles 数组中。如果是,脚本会输出“您拥有管理员访问权限”。

这是一个现实世界的例子:


$group = Get-ADGroup -Identity "SomeGroup"
$user = Get-ADUser -Identity "SomeUser"
if ($user.SamAccountName -in $group.Member) {
    Write-Host "$($user.Name) is a member of $($group.Name)"
}

在此示例中,我们使用 In 运算符来检查用户是否是组的成员。

示例2:IP地址过滤


$ipAddress = "192.168.1.2"
$allowedIPs = "192.168.1.1", "192.168.1.2", "192.168.1.3"

if ($ipAddress -in $allowedIPs) {
    Write-Host "IP address is allowed."
}

示例 3:根据名称过滤进程


$processes = Get-Process
$processes | Where-Object {$_.Name -in ("svchost", "explorer")} | Format-Table Name, Id, CPU -AutoSize

在此示例中,我们使用 In 运算符和Where-Object cmdlet 来根据进程名称过滤进程。

示例 4:验证用户输入


$userInput = Read-Host "Enter 'yes' or 'no'"
$validInputs = "yes", "no"

if ($userInput -in $validInputs) {
    Write-Host "Valid input!"
} else {
    Write-Host "Invalid input!"
}

示例 5:文件扩展名检查器

在这里,您可以使用 PowerShell -In 运算符来检查文件是否具有有效的扩展名。


$FileName = "document.pdf"
$ValidExtensions = "pdf", "docx", "txt"

if ($FileName.Split(".")[-1] -in $validExtensions) {
    Write-Host "Valid file extension."
}

优化 -In 运算符使用的技巧

为了优化 In 运算符的使用,您可以遵循一些提示。最重要的技巧之一是在处理数组时使用 Contains 方法而不是 In 运算符。处理数组时,Contains 方法或 -Contains 运算符比 In 运算符更快、更高效。这是一个例子:


$fruits = "apple", "banana", "orange"
if ($fruits.Contains("banana")) {
    Write-Host "Banana is present in the fruits collection"
}

在此示例中,我们使用 Contains 方法来检查水果集合中是否存在“香蕉”。

使用 In 运算符时要避免的常见错误

虽然 In 运算符是一个功能强大的运算符,但在使用它时应避免一些常见错误。最常见的错误之一是将 In 运算符与空集合一起使用。当您对空集合使用 In 运算符时,它将始终返回 False。这是一个例子:


$emptyCollection = @()
if ("value" -in $emptyCollection) {
    Write-Host "This will never be executed"
}

在此示例中,我们将 In 运算符与空集合一起使用,该集合将始终返回 False。

另一个常见错误是将 In 运算符与非集合值一起使用。当您将 In 运算符与非集合值一起使用时,它将始终返回 False。这是一个例子:


$value = "some value"
if ($value -in "some collection") {
    Write-Host "This will never be executed"
}

在此示例中,我们将 In 运算符与非集合值一起使用,该值始终返回 False。

其他常见的陷阱包括:

  1. 区分大小写:PowerShell 默认情况下不区分大小写。如果您的应用程序区分大小写,请务必小心。
  2. 数据类型:确保数组中元素的类型与您正在检查的值的类型匹配。

包起来

在本文中,您了解到:

  • -in 运算符检查集合中的匹配值
  • 使用 -in 测试数组、列表、正则表达式结果等
  • 使用 -notin 进行反向匹配以进行反向检查
  • 通过链接 -in 子句匹配多个值
  • 使用 -Cin 控制区分大小写

In 运算符是一个功能强大的运算符,可以帮助您在 PowerShell 中过滤和选择所需的数据。从简化条件语句到使代码更简洁、更高效,PowerShell -In 运算符可以提供很多功能。通过了解如何有效使用 In 运算符并避免常见错误,您可以充分利用该运算符并改进您的 PowerShell 脚本。我希望本指南对掌握 PowerShell 中的 In 运算符有所帮助。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯