Лучшая практика - если матч вернет результат - PullRequest
0 голосов
/ 09 июня 2018

Вариант использования

Следующий сценарий должен быть помещен в запланированное задание, чтобы уведомить меня, если мой публичный IP-адрес изменится

Условие совпадения IF не соответствуетправильное поведение

Каков наилучший способ сопоставления, если изменился IP-адрес и вывести его на хост?

Код

$ip = Invoke-RestMethod http://ipinfo.io/json | select -ExpandProperty ip
$date = (get-date).date
$value = "{0} - {1}" -f ($date),($ip)
Add-Content -Value $value -Path "C:\users\Sumeet\Documents\WindowsPowerShell\ip.txt"
$file = Get-Content -Path "C:\users\Sumeet\Documents\WindowsPowerShell\ip.txt"

if ($file | Select-String -Pattern $ip) {
clear-host
write-host "Match found at $_ your public IP interface has changed"
}

Вывод файла

Date - IP

9/06/2018 12:00:00 AM - 121.211.177.20

9/06/2018 12:00:00 AM - 121.211.177.20

Вывод

enter image description here

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Обработка данных выполняется IMO проще при использовании CSV-файлов, поскольку столбцы / свойства назначаются при импорте.

Из-за моей локали, которая не поддерживает разделитель даты / или tt для AM/ PM Мне пришлось использовать объект CultureInfo.

## Q:\Test\2018\06\09\SO_50771712.ps1
$File = "$Env:USERPROFILE\Documents\WindowsPowerShell\ip.csv"
$CIUS = New-Object System.Globalization.CultureInfo("en-US")

$Actual = [PSCustomObject]@{
    Date = (get-date).ToString("d/M/yyyy hh:mm:ss tt",$CIUS)
    IP   = (Invoke-RestMethod http://ipinfo.io/json).ip
}
if (!(Test-Path $File)){'"Date","IP"'|Set-Content $File}

$Last=Import-Csv $File|Sort-Object {[DateTime]$_.Date}|Select-Object -Last 1

If ($Last.ip -ne $Actual.ip){
    Write-Host ("Last ip : {0} from: {1}" -f $LAst.IP,$Last.date)
    Write-Host ("New  ip : {0} from: {1}" -f $Actual.IP,$Actual.date)
    Export-Csv $File -InputObject $Actual -Append -NoTypeInformation
}

Пример вывода:

> Q:\Test\2018\06\09\SO_50771712.ps1
Last ip : 92.123.13.83 from: 9/6/2018 09:19:21 PM
New  ip : 92.123.13.84 from: 9/6/2018 09:34:59 PM

> gc $file
"Date","IP"
"9/6/2018 08:51:00 PM","92.123.13.82"
"9/6/2018 09:19:21 PM","92.123.13.83"
"9/6/2018 09:34:59 PM","92.123.13.84"
0 голосов
/ 09 июня 2018

Я думаю, что что-то подобное было бы более полезным, как предложила @LotPings.Обновлять файл следует только в том случае, если есть изменения, и по мере необходимости получать уведомления.

Также обратите внимание, что смена IP может произойти в любое время, но ваша запланированная задача будет сообщать вам только тогда, когда она запланирована для выполнения.

$ip = Invoke-RestMethod http://ipinfo.io/json | select -ExpandProperty ip
$date = (get-date).date
$value = "{0} - {1}" -f ($date),($ip)

$file = Get-Content -Path "E:\Code\powershell\myPS\2018\Jun\checkPublicIP\ip.txt"

if ($file | Select-String -Pattern $ip) {
    Write-Host "IP is not changed"
}
else {
    #Adding current IP to the file
    Add-Content -Value $value -Path "E:\Code\powershell\myPS\2018\Jun\checkPublicIP\ip.txt"

    #Add more code as needed for notification / email / alert. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...