将select-string变量管道化为select-string

时间:2015-03-05 03:33:55

标签: variables powershell search pipe

我提供了用户2下拉列表(1." Region"和2." Site"),第一个列表选择的第二个列表依赖/动态。当一个"地区"选择了项目,我正在执行一个选择字符串来查找具有所有区域/站点信息的文件,以返回与所选区域匹配的所有行以及下面的2行以给出站点行。然后我整理并搜索这些结果以返回网站线。然后我可以更新"网站"下拉框仅包含与用户所选区域相关的网站。这是为了分割屏幕上列出的网站数量。

例如。 siteinfo.txt:

[UK - London]
Region = EMEA
Timezone = xxx
Site = London

[AU - Brisbane]
Region = APAC 
Timezone = xxx
Site = Brisbane

例如。脚本(" APAC"区域列表中的选择):

$input = get-content C:\Temp\siteinfo.txt
$SearchString = 'Region = APAC' 
$SearchStringsite = 'SiteName = '
$sitelist = $input | select-string $SearchString -Context 2 | select-string "Site = " | ForEach-Object {$_ -Replace $SearchStringsite,""} 

上面的脚本失败,没有错误,并尝试拆分select-string命令并将区域结果注入select-string中的变量,但得到相同的结果。

但是我能够将第一个select-string结果写入文件,然后将该文件读入第二个select-sting并且它可以工作。我试图避免输出到文件,因为环境可能已经锁定了运行脚本的写策略。

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

问题是Select-String返回MatchInfo个对象,但默认显示使它看起来只是返回一个字符串。要访问上下文行,您必须将它们引用为.context.postcontext

我交换你的$ input为$ data($ input实际上保留为自动变量),并将它折叠在管道上以获得可读性:

$data = get-content C:\Temp\siteinfo.txt
$SearchString = 'Region = APAC' 
$SearchStringsite = 'SiteName = '
$sitelist = $($data |
 select-string $SearchString -Context 2).Context.PostContext |
 select-string "Site = " |
 ForEach-Object {$_ -Replace $SearchStringsite,""}