вывод строки выбора PowerShell для цикла foreach - PullRequest
1 голос
/ 27 мая 2019

Я традиционный пользователь bash, поэтому я не понимаю, как работать foreach в 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
  • Script
$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 работа идеальна.

  • Script

#!/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

Помогите, ребята, у меня связаны руки.

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Это:

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

является одной многострочной строкой, поэтому цикл foreach является избыточным.

Разделить строку перед запуском Select-String:

foreach($zab in $list -split '\r?\n'){
    ...
}
0 голосов
/ 27 мая 2019

Ваш скрипт 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
...