欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

powershell get-command 过滤 文心一言 chatgpt 有大用

powershell get-command 过滤 

在 PowerShell 中,Get-Command 是一个用于检索有关命令和应用程序信息的 cmdlet。你可以通过管道 (|) 将 Get-Command 的输出传递给其他 cmdlet 来实现过滤。以下是一些常用的过滤方法:

1. 按名称过滤

你可以使用 Where-Object 或其别名 ? 来按名称过滤命令。例如,要查找名称中包含 "Get-" 的命令:

powershell复制代码

Get-Command | Where-Object { $_.Name -like "Get-*" }                


2. 按命令类型过滤

Get-Command 的输出对象有一个 CommandType 属性,你可以根据这个属性来过滤命令类型。例如,要查找所有函数:

powershell复制代码

Get-Command -CommandType Function                


3. 按模块过滤

你可以使用 Module 属性来按模块名称过滤命令。例如,要查找来自 Microsoft.PowerShell.Utility 模块的命令:

powershell复制代码

Get-Command | Where-Object { $_.ModuleName -eq "Microsoft.PowerShell.Utility"}


4. 组合过滤

你可以组合多个条件来进行更复杂的过滤。例如,查找来自 Microsoft.PowerShell.Utility 模块且名称中包含 "Get-" 的函数:

powershell复制代码

Get-Command -CommandType Function | Where-Object { $_.ModuleName -eq "Microsoft.PowerShell.Utility" -and $_.Name -like "Get-*" }                


5. 使用 Select-Object 自定义输出

如果你只需要命令的某些属性,可以使用 Select-Object 来选择这些属性。例如,只显示命令名称和模块名称:

powershell复制代码

Get-Command | Select-Object Name, ModuleName                


6. 按参数过滤

虽然 Get-Command 本身不支持直接按参数过滤,但你可以通过获取命令的详细信息并检查其参数来实现。例如,查找包含特定参数的命令:

powershell复制代码

Get-Command | ForEach-Object {                

$command = $_                

$parameters = $command.Parameters.Keys

if ($parameters -contains "SomeParameter") {                

$_                

}                

}                


示例:查找所有包含特定动词的命令

假设你想查找所有包含动词 Get 的命令:

powershell复制代码

Get-Command | Where-Object { $_.Verb -eq "Get" }                


请注意,Verb 属性是在 PowerShell 5.0 及更高版本中引入的。在旧版本中,你可能需要使用名称匹配来模拟类似的效果。

通过这些方法,你可以灵活地过滤 Get-Command 的输出,以找到你需要的命令信息。



Get-Command | Where-Object { $_.Name -like "Get-*" }   详解

在 PowerShell 中,Get-Command 是一个强大的 cmdlet,用于检索有关命令、函数、别名、脚本和应用程序的信息。当你将 Get-Command 的输出通过管道 (|) 传递给 Where-Object cmdlet 时,你可以根据特定的条件过滤这些命令。下面是对命令 Get-Command | Where-Object { $_.Name -like "Get-*" } 的详细解释:

命令结构

powershell复制代码

Get-Command | Where-Object { $_.Name -like "Get-*" }
  • Get-Command:检索当前 PowerShell 会话中可用的所有命令。

  • |:管道符号,用于将前一个命令的输出作为下一个命令的输入。

  • Where-Object:筛选符合特定条件的对象。在这个例子中,它用于筛选 Get-Command 的输出。

  • **{ _.Name -like "Get-*" }**:`Where-Object` 的脚本块,定义了筛选条件。` 代表当前正在处理的命令对象,$.Name访问该对象的Name 属性。-like "Get-*"是一个比较操作,用于检查Name` 属性是否以 "Get-" 开头。

筛选条件

  • **.Name∗:‘ 是一个自动变量,代表当前正在通过管道传递的对象。在这个例子中,每个对象都是一个命令。$.Name访问该命令的Name` 属性。

  • -like "Get-*"-like 是 PowerShell 中的比较运算符,用于执行简单的模式匹配。"Get-*" 是一个通配符模式,其中 * 表示任意数量的任意字符。因此,这个条件匹配任何以 "Get-" 开头的字符串。

输出

该命令的输出将是所有以 "Get-" 开头的命令的列表。这些命令通常用于检索或获取有关系统状态、配置或数据的信息。例如,你可能会看到 Get-ProcessGet-ServiceGet-EventLog 等命令。

示例输出

假设你的 PowerShell 会话中有许多命令,该命令可能会返回类似以下的输出:

plaintext复制代码

CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Cmdlet          Get-Acl                                            3.1.0.0    Microsoft.PowerShell.Security

Cmdlet          Get-Alias                                          7.1.0.0    Microsoft.PowerShell.Core

Cmdlet          Get-AppLockerFileInformation                       2.0.0.0    AppLocker

...(其他命令)

注意事项

  • 输出的具体内容取决于你的 PowerShell 会话中可用的命令。

  • 如果你只关心命令的名称,可以使用 Select-Object Name 来仅显示名称属性。

  • -like 运算符区分大小写,但你可以使用 -ilike(在 PowerShell 的某些版本中可能需要加载 CaseInsensitive 模块或使用正则表达式)来执行不区分大小写的比较。

通过理解这个命令的结构和筛选条件,你可以更有效地使用 PowerShell 来查找和管理命令。


$_ 表示什么  美元符下划线

在 PowerShell 中,$_ 是一个自动变量,它代表当前正在管道 (|) 中处理的对象。当你在 PowerShell 管道中使用 Where-ObjectForEach-ObjectGroup-Object 等 cmdlet 时,$_ 就变得特别有用,因为它允许你直接访问或操作正在被处理的每个对象。

这里有几个使用 $_ 的例子:

1. Where-Object

在 Where-Object 中,$_ 表示当前正在评估的对象。例如,要过滤出长度大于 5 的字符串数组中的元素:

powershell复制代码

$strings = "apple", "banana", "cherry", "date"

$strings | Where-Object { $_.Length -gt 5 }

这里,$_ 代表 $strings 数组中的每个字符串。

2. ForEach-Object

在 ForEach-Object 中,$_ 也表示当前正在处理的对象。例如,要打印每个字符串的长度:

powershell复制代码

$strings | ForEach-Object { Write-Output $_.Length }

或者更简洁地:

powershell复制代码

$strings | ForEach-Object { $_.Length }

3. 其他 cmdlet

虽然 $_ 在 Where-Object 和 ForEach-Object 中最常见,但它也可以在其他接受管道输入的 cmdlet 中使用。例如,在 Sort-Object 中,你可以根据对象的某个属性进行排序:

powershell复制代码

$objects = @(

@{Name="John"; Age=30},

@{Name="Jane"; Age=25},

@{Name="Doe"; Age=35}

)

$objects | Sort-Object -Property Age

虽然这个例子中没有直接使用 $_,但 Sort-Object 内部确实在处理每个对象时使用了类似的概念。

如果你需要在脚本块中多次引用当前对象,给 $_ 分配一个别名也是一个好习惯,这样可以提高代码的可读性:

powershell复制代码

$strings | ForEach-Object {

$item = $_

# 现在可以使用 $item 而不是 $_

Write-Output "$item has length $($item.Length)"

}

但是,在大多数情况下,直接使用 $_ 是更简洁和标准的做法。


在 PowerShell 中,Get-Command cmdlet 本身并没有直接的 -Filter 参数用于过滤命令。但是,Get-Command 确实有几个参数可以帮助你缩小命令搜索的范围,比如 -CommandType-Module-Name 和 -Verb/-Noun(在 PowerShell 5.0 及更高版本中可用)。

普通分类: