【问题标题】:How do I use the where-object cmdlet to find text that -contains a certain word如何使用 where-object cmdlet 查找包含特定单词的文本
【发布时间】:2020-03-31 10:24:51
【问题描述】:

我正在设置从 google 下载的 .csv 格式的联系人文件,以便在我的 Windows 10 笔记本电脑上使用 powershell 读取。要实现这一点,我还有很长的路要走,但我尝试并几乎成功的第一件事是编写一个脚本,提示用户输入姓名,然后用他们的电话号码进行响应。该脚本如下所示:

 Param(
     [Parameter(Mandatory=$true, Position=0, HelpMessage="What's their name?")]
     $TheirNameIs
  )
 Import-Csv "*MYPATH*.csv" |

     Sort 'Family name' -descending |

     Where-object {$_.Name -eq $TheirNameIs} |

     Select-Object -Property 'Name','Phone 1 - Type','Phone 1 - Value'

我遇到的问题是 Where-object 与 -eq 一起查找与用户输入的名称完全匹配的内容,但我想使用 -contains 以便我可以输入名字并获取所有联系人他们的名字中的价值。我尝试将 -eq 替换为 -contains 但没有得到任何输出,除非我使用了确切的联系人姓名

Where-object cmdlet 哪里出错了?

【问题讨论】:

  • 尝试将-eq替换为-match

标签: windows powershell csv


【解决方案1】:

您可以将-eq 运算符替换为-like 运算符并插入通配符:

Param(
     [Parameter(Mandatory=$true, Position=0, HelpMessage="What's their name?")]
     $TheirNameIs
)
Import-Csv "*MYPATH*.csv" |
Sort 'Family name' -descending |
Where-object {$_.Name -like "*$TheirNameIs*"} |
Select-Object -Property 'Name','Phone 1 - Type','Phone 1 - Value'

您也可以使用正则表达式并使用 @Olaf 之前提到的 -match 运算符。解决方案可能如下所示:

Param(
     [Parameter(Mandatory=$true, Position=0, HelpMessage="What's their name?")]
     $TheirNameIs
)
Import-Csv "*MYPATH*.csv" |
Sort 'Family name' -descending |
Where-object {$_.Name -match ".*$TheirNameIs.*"} |
Select-Object -Property 'Name','Phone 1 - Type','Phone 1 - Value'

【讨论】:

  • -like 没用,-match 没用。试图投票,但帐户太新。谢谢
  • 如果您提供正确的模式,两者都可以工作 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多