Как получить указанную c информацию из RSS-канала в Powershell? - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь написать сценарий, который может извлекать информацию с веб-страницы, содержащей только те данные, которые предоставил пользователь.

Я использую независимый новостной сайт RSS-канал для анализа.

    $url = 'http://www.independent.co.uk/news/uk/rss'
Invoke-RestMethod -Uri $url -OutFile c:\Scripts\worldnews.xml


[xml]$Content = Get-Content C:\Scripts\worldnews.xml


$Feed = $Content.rss.channel


# User Input field
$UserTerm = Read-Host 'Enter a Term'


ForEach ($msg in $Feed.Item){


   [PSCustomObject]@{


     'Source' = "News"

    'Title' = $msg.title

    'Link' = $msg.link

    'Description' = $msg.description



   }#EndPSCustomObject

  }#EndForEach

что мне нужно добавить, чтобы этот сценарий отображал только результаты, включающие входные данные, предоставленные пользователем? например, если пользователь вводит «Police» в поле ввода пользователя, тогда сценарий будет отображать только те статьи, в заголовке которых написано «Police».

Я пробовал утверждение if, но не уверен в правильности синтаксис

if(msg.title -match $UserTerm) {

Как мне заставить это работать?

1 Ответ

1 голос
/ 06 марта 2020

Вы можете выполнить , где пункт для заголовка в вашем foreach l oop, например, так:

$url = 'http://www.independent.co.uk/news/uk/rss'
Invoke-RestMethod -Uri $url -OutFile c:\scripts\worldnews.xml
[xml]$Content = Get-Content C:\scripts\worldnews.xml
$Feed = $Content.rss.channel

# User Input field
$UserTerm = Read-Host 'Enter a Term'
ForEach ($msg in $Feed.Item | ?{$_.Title.Contains($userTerm)})
{
    [PSCustomObject]@{
    'Source' = "News"
    'Title' = $msg.title
    'Link' = $msg.link
    'Description' = $msg.description
    }#EndPSCustomObject
}#EndForEach

Если вы хотите сделать оператор if, то вы бы скажем

if($msg.Title.Contains($userTerm))

Или вы можете использовать оператор -like с символом подстановки, например

if($msg.Title -like "*$($userTerm)*")
...