Могу ли я сохранить выходные данные Where-Object с несколькими критериями или в одном и том же порядке, если исходные данные находятся в другом порядке? - PullRequest
0 голосов
/ 20 мая 2019

Я новичок в сценариях PowerShell, и приведенный ниже код - мой первый сценарий; результат многих попыток. Он делает то, что я хочу, хотя у меня проблемы с небольшой частью - порядком вывода команды where-object.

Я использую -or, чтобы вернуть три переменные, которые меня интересуют, и сравнить с выводом того же скрипта, который запускался ранее. Проблема в том, что порядок переменных в источнике может быть разным. Однажды он вернет «Var1»; «Переменная2»; «Var3» и другой вернет «Var3»; "Var1"; «Переменная2». Это становится проблемой, когда я сравниваю два выхода, и они помечаются, но единственным изменением является порядок.

Я пытался найти решения для поиска в Google и посмотреть, пропущена ли какая-то фильтрация или порядок операций, но некоторая информация там недоступна для новичка.

Это мой код:

# Asks to enter when the previous script was run, for comparison later.
Param([Parameter(Mandatory=$true)][string]$previousdate)

# Scrapes urls based on links.txt, outputs chosen parameters to a text file with today's date.
ForEach ($line in Get-Content links.txt) {
    (((wget $line).Content).split(",") |
    Where-Object {
        $_.Contains("var1") -or $_.Contains("var2") -or $_.Contains("var3")
    } ) -Join "" |
            Out-File "$(get-date -f yyyyMMdd).txt" -Append
};

# Parameters specify which file to compare to today's output (created above).
$old = Get-Content ".\$previousdate.txt"
$path = Get-Date -f yyyyMMdd
$today = Get-Content ".\$path.txt"

# Run comparison between the previous scrape (specified by user) to file created today.
Compare-Object $old $today |
    out-file "compare $(get-date -f yyyyMMdd).txt" -width 500

На последнем шаге из-за изменения источника сравнение иногда показывает, что «var1 var2 var3» отличается от «var1 var3 var2». Хотя это технически правильно, я хочу видеть различия только там, где сами переменные различны, а не только в порядке.

Существует ли (относительно) ПРОСТОЙ способ сохранения порядка переменных в исходном файле, который будет соответствовать порядку, указанному каждый раз, независимо от порядка источника? Есть ли лучший способ сделать это?

Я действительно наслаждаюсь PowerShell и хочу узнать больше, но имейте в виду, что я все еще учусь. Я действительно ценю все ответы, но если вы можете объяснить, почему это работает, это было бы впечатляюще.

Спасибо!


Некоторая дополнительная информация: Каждая переменная имеет формат «AAA: 123», и AAA никогда не изменится. Я вроде решил проблему сравнения, добавив «| Sort» перед «-Join», который каждый раз держит переменные в одном и том же порядке, хотя это похоже на бинты.

Чтобы немного перенаправить вопрос: я хотел бы, чтобы переменные в выходных данных были в КОНКРЕТНОМ порядке, а не в алфавитном порядке. Я до сих пор не понял, как это сделать, хотя я исследую использование ForEach-Object, как подсказывает прекрасный @ Lee_Dailey.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...