powershell选择循环的foreach的选择弦输出



我是传统的bash用户,因此我不明白如何在PowerShell中使用。

PowerShell

我需要输出

Vasya
http://192.168.10.61:8085/data.json
Misha
http://192.168.10.82:8085/data.json

但我收到另一个输出

Vasya
Misha
http://192.168.10.61:8085/data.json
http://192.168.10.82:8085/data.json
  • 脚本
$pspath="E:monitor.ps1"
$txtpath="E:temp.txt"
$user1="Vasya"
$user2="Misha"
$ip1="http://192.168.10.61:8085/data.json"
$ip2="http://192.168.10.82:8085/data.json"

$list = @"
${user1}-${ip1}
${user2}-${ip2}
"@
foreach ($zab in $list)
{
    $regex_url = 'http://d+.d+.d+.d+:d+/data.json'
    $regex_name = "([A-Z]|[a-z])w+"
    $name =  echo $zab |%{$_.split('-')} |sls -pattern $regex_name -AllMatches |%{$_.Matches -notmatch 'http|json|data'} |%{$_.Value}
    $url = echo $zab |%{$_.split('-')} |sls -pattern $regex_url -AllMatches |%{$_.Matches} |%{$_.Value}
    echo $name
    echo $url
}

bash

在Bash Work的完美中。

  • 脚本

#!/bin/bash
users="Vasya-http://192.168.10.61:8085/data.json Misha-http://192.168.10.82:8085/data.json"

for zab in $users; do
    name=$(echo $zab |cut -f 1 -d -)
    url=$(echo $zab |cut -f 2 -d -)
    echo $name
    echo $url
done
exit 0

帮助我的手绑着我的手。

this:

$list = @"
${user1}-${ip1}
${user2}-${ip2}
"@

是一个多行字符串,因此foreach循环是多余的。

在运行Select-String之前将字符串分开:

foreach($zab in $list -split 'r?n'){
    ...
}

您的powershell脚本与bash脚本完全不同。

我不知道您是否出于其他原因需要与Select-String的复杂性更大,
但是在PowerShell中,它也可能很容易:

$users="Vasya-http://192.168.10.61:8085/data.json Misha-http://192.168.10.82:8085/data.json"
foreach($zab in ($users -split ' ')){
    $name,$url = $zab -split '-',2
    [PSCustomObject]@{
        Name = $name
        Url  = $url
    }
}

对于此示例面向对象的输出:

Name  Url
----  ---
Vasya http://192.168.10.61:8085/data.json
Misha http://192.168.10.82:8085/data.json

相关内容

  • 没有找到相关文章

最新更新