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 运算符检查集合中是否存在“香蕉”。
这是另一个简短的形式:
"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
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。
其他常见的陷阱包括:
- 区分大小写:PowerShell 默认情况下不区分大小写。如果您的应用程序区分大小写,请务必小心。
- 数据类型:确保数组中元素的类型与您正在检查的值的类型匹配。
包起来
在本文中,您了解到:
- -in 运算符检查集合中的匹配值
- 使用 -in 测试数组、列表、正则表达式结果等
- 使用 -notin 进行反向匹配以进行反向检查
- 通过链接 -in 子句匹配多个值
- 使用 -Cin 控制区分大小写
In 运算符是一个功能强大的运算符,可以帮助您在 PowerShell 中过滤和选择所需的数据。从简化条件语句到使代码更简洁、更高效,PowerShell -In 运算符可以提供很多功能。通过了解如何有效使用 In 运算符并避免常见错误,您可以充分利用该运算符并改进您的 PowerShell 脚本。我希望本指南对掌握 PowerShell 中的 In 运算符有所帮助。

