如何在 PowerShell 中直接否定选项?

如何在 PowerShell 中直接否定选项?

例如,获取所有网络地址/适配器以便对其应用设置:

Get-NetIPAddress | Set-NetIPAddress -SkipAsSource $true

不过,我需要排除其中一项。这个清单很长,所以最好的办法就是把它挑出来,或多或少地Get-NetIPAddress -ifIndex 39 | Set-NetIPAddress -SkipAsSource…否定它。

我知道我可以使用ifWhere-Object或其他任何方式,但重点是要快速完成,就像在 Bash 中只需 即可完成一样!。这就是为什么我将其表述为否定选项而不是状况

我试过:

Get-NetIPAddress -ifIndex !39
Get-NetIPAddress -ifIndex -ne 39
Get-NetIPAddress (! -ifIndex 39)
Get-NetIPAddress !(-ifIndex 39)
Get-NetIPAddress -ifIndex not 39

我并不指望它们能起作用,因为其中一些是从其他函数借用的语法(?)。不过,如果你对它能起作用抱有一点希望,你就不会费心输入命令。

谢谢。

答案1

标准 PowerShell 选项解析器没有通用的“否定”语法,因为它是选项解析器,而不是筛选解析器(即使某些选项恰好用于过滤目的,但那是在选项及其值被解析之后很久才发生的)——布尔“标志”选项可以被否定,但“值”选项不能。

(您实际上也无法在“Bash”中执行此操作;find ! -foo之所以有效,是因为该find命令专门使用了为此设计的自定义命令行解析器,但这不适用于任何其他程序,当然也不适用于使用通用 getopt_long 解析器的程序--option。)

cmdlet可以识别!为选项值的一部分(例如Get-NetIPAddress -ifIndex !39),但同样,还没有以这种方式进行编程。(它可能要求将 ifIndex 解析为整数。)

答案2

PowerShell 确实接受!运算符作为运算符的替代语法not,尽管仅限于布尔表达式的上下文中,因此不带参数。

例如,你可以写:

if (-Not (Test-Path C:\Code)) {
    write "it doesn't exist!"
} 

但你也可以使用!这种方式:

if (!(Test-Path C:\Code)) { write "it doesn't exist!" }

用户@ReddyLutonadio 在他的评论中指出了使用最短的语法制定示例命令的各种方法。

相关内容