管道 select-string 变量到 select-string
Pipe select-string variable into select-string
我向用户提供了 2 个下拉列表(1."Region" 和 2."Site"),第二个列表 dependant/dynamic 在第一个列表 selection .当一个 "Region" 项被 select 编辑时,我正在做一个 select 字符串来查找一个文件,该文件包含所有 region/site 信息到 return 所有行匹配 selected 区域加上其下方的 2 行以给出站点行。然后我整理这些结果并将其搜索到 return 仅站点行。然后,我可以更新 "Site" 下拉框,仅包含与用户 select 所在区域相关的站点。这是为了拆分屏幕上列出的网站数量。
例如。 siteinfo.txt:
[UK - London]
Region = EMEA
Timezone = xxx
Site = London
[AU - Brisbane]
Region = APAC
Timezone = xxx
Site = Brisbane
例如。脚本(区域列表中有 "APAC" selection):
$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 并且它有效。我试图避免必须输出到文件,因为环境可能已经锁定了脚本为 运行 的写策略。
有什么想法可以实现吗?
问题是 Select-String
returns 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,""}
我向用户提供了 2 个下拉列表(1."Region" 和 2."Site"),第二个列表 dependant/dynamic 在第一个列表 selection .当一个 "Region" 项被 select 编辑时,我正在做一个 select 字符串来查找一个文件,该文件包含所有 region/site 信息到 return 所有行匹配 selected 区域加上其下方的 2 行以给出站点行。然后我整理这些结果并将其搜索到 return 仅站点行。然后,我可以更新 "Site" 下拉框,仅包含与用户 select 所在区域相关的站点。这是为了拆分屏幕上列出的网站数量。
例如。 siteinfo.txt:
[UK - London]
Region = EMEA
Timezone = xxx
Site = London
[AU - Brisbane]
Region = APAC
Timezone = xxx
Site = Brisbane
例如。脚本(区域列表中有 "APAC" selection):
$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 并且它有效。我试图避免必须输出到文件,因为环境可能已经锁定了脚本为 运行 的写策略。
有什么想法可以实现吗?
问题是 Select-String
returns 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,""}