Мне нужен скрипт в пауэршелл, который проверит состояние всех служб на локальном компьютере и сравнит с эталонным списком разрешенных служб, хранящимся в созданном ранее файле .html. После сравнения скрипт остановит все запущенные на компьютере службы, не указанные в справочном файле.
Я согласен с вами, но мне нужно решение для уже определенного упражнения.
Покажи нам тогда свой HTML.
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Я создал файл HTML с помощью команды Get-Service | Where-Object {$_.Status -eq "Выполняется"} | ConvertTo-Html-As СПИСОК | Out-File services.htm Я нашел этот командлет по этой ссылке docs.microsoft.com/en-us/powershell/module/…
Во-первых, я хотел бы сказать, что этот код не прошел проверку и не будет работать с другими html-таблицами. И вообще не оптимизирован.
$ServicesFromHTML = (gc .\services.htm | where {$_ -match '^<tr><td>(Name:|Status:|<hr>)'}) -replace "</?t(r|d)>","" -join ";" -replace ";<hr>;","`r`n" -replace "(Name:|Status:)","" | ConvertFrom-Csv -Delimiter ";" -Header "Name","Status"
$RunningServices = Get-Service | Where-Object {$_.Status -eq "Running"} | Select Name,Status
"Comparing services if they are currently running ("< = ") or were running when exported ("=>")"
Compare-Object $RunningServices.Name $ServicesFromHTML.Name
$OnlyNowRunningServices = (Compare-Object $RunningServices.Name $ServicesFromHTML.Name | where {$_.SideIndicator -eq "< = "}).InputObject
$OnlyNowRunningServices | foreach {"Trying to stop Service $_";Stop-Service $_}
В будущем используйте экспорт CSV/XML/JSON, так как вы можете легко импортировать их. Если вам нужно что-то удобочитаемое для чтения в браузере, создайте его дополнительно.
HTML — не лучший формат хранения структурированных данных. Почему бы не использовать простой список или CSV-файл?