Я новичок в сценариях 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.