Powershell 否定a-开关(除开关参数外的所有参数)

Powershell 否定a-开关(除开关参数外的所有参数),powershell,cmdlets,Powershell,Cmdlets,如何获取除开关指示的项目外的所有项目 我使用: Get-Disk -UniqueId 4875E7EB064AA60 仅获取特定磁盘驱动器的信息 我想使用相同的命令,但获取除此之外的所有驱动器 类似这样的内容(在伪代码中): PowerShell作为一种语言不允许“反转”参数值。您需要在事实之后使用Where Object过滤返回的结果 Get-Disk | Where-Object { $_.UniqueId -ne '4875E7EB064AA60' } 有几个cmdlet确实允许表达“

如何获取除开关指示的项目外的所有项目

我使用:

Get-Disk -UniqueId 4875E7EB064AA60
仅获取特定磁盘驱动器的信息

我想使用相同的命令,但获取除此之外的所有驱动器

类似这样的内容(在伪代码中):


PowerShell作为一种语言不允许“反转”参数值。您需要在事实之后使用
Where Object
过滤返回的结果

Get-Disk | Where-Object { $_.UniqueId -ne '4875E7EB064AA60' }
有几个cmdlet确实允许表达“除此之外的一切”语义,但这取决于单个cmdlet是否以及如何实现。例如:

  • Get-ChildItem
    Select-Object
    cmdlet具有允许排除特定结果的参数
    -Exclude
  • Select-String
    cmdlet有一个开关
    -NotMatch
    ,用于反转参数
    -Pattern
    选择的内容
  • 所有具有筛选器参数的cmdlet(如
    Get-WmiObject-filter
    Get-ADUser-filter
    、或
    Get-ADUser-LDAPFilter
    )显然也允许表达“not this”语义

获取磁盘|其中对象唯一ID-ne 4875E7EB064AA60
感谢Ansgar和Don。。。你的答案很好。。。但我的问题也在语言能力和灵活性方面。。。如果有一个(-not(??))参数也适用于其他几个命令/情况……不。该语言不提供“反转”参数值的通用方法。有些cmdlet的参数允许进行否定选择(如
Get ChildItem-Exclude
SelectString-NotMatch
,…),但仅此而已。值得指出的是,即使PowerShell确实将
-not
开关作为公共参数(即语法)实现,单个cmdlet仍然需要做一些工作才能使其真正生效(即语义)。事实上,如果不从参数绑定中获取更多信息,那么将每个开关倒置可能没有意义,因此即使是语法也无法在语言级别实现。(设置位置-而不是路径C:\Users意味着什么?)
Get-Disk | Where-Object { $_.UniqueId -ne '4875E7EB064AA60' }