Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Наличие текста с условиями в PS

Ответить
Настройки темы
PowerShell - [решено] Наличие текста с условиями в PS

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья, здравствуйте.
Помогите пожалуйста, сам не могу сообразить.
Необходимо написать код с следующими условиями:
Есть файл Q:\file.xml необходимо читать этот файл и если в нём есть текст "version 7,2", то if , а если данного текста в этом файле нет то else
Подскажите пожалуйста.
Спасибо!

Отправлено: 07:44, 20-06-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Если «version 7,2» гарантированно а) уникальна и б) будет размещена в одной строке, и если кодировка не окажется UTF-16 или экзотичней — достаточно простого Select-String.

Как обычно: если бы Вы упаковали file.xml в архив и приложили таковой к сообщению — было бы точнее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:56, 20-06-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Если «version 7,2» гарантированно а) уникальна и б) будет размещена в одной строке, и если кодировка не окажется UTF-16 или экзотичней — достаточно простого Select-String.
Как обычно: если бы Вы упаковали file.xml в архив и приложили таковой к сообщению — было бы точнее. »
Понятно шта select-string тока как по уму расставить всё?

xml файл не обязательно вкладывать, вот всё его содержимое:

Цитата:
<?xml version="1.0" encoding="utf-8"?>
<systemMetadata version="17.6.7.1" />
Мне нужно для сверки конкретных версий, в данном слчае: 17.6.7.1

Отправлено: 08:12, 20-06-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Luka666:
xml файл не обязательно вкладывать, вот всё его содержимое: »
А потом внезапно™ оказывается, что его кодировка вовсе не utf-8 (плюс — есть BOM/нет BOM), концы строк в формате Mac . Я не про Ваш конкретный случай, а вообще. Такое бывало сплошь и рядом. Потому — файл, упакованный в архив, а не просто содержимое.

Код: Выделить весь код
$sSourceFile = 'C:\Мои проекты\0089\file.xml'

if(Test-Path -Path $sSourceFile -PathType Leaf) {
    if(Select-String -Path $sSourceFile -Pattern '17.6.7.1' -SimpleMatch -Quiet) {
        Write-Host "Found"
    } else {
        Write-Host "Not found"
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}
Но правильнее будет обращаться к xml-файлу, как к xml, разбирать содержимое, находя узел systemMetadata, и обращаться к свойству value его атрибута version. Полученное значение разбивать по точке на компоненты номера версий, каковые затем сравнивать с искомым номером версии.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:32, 20-06-2017 | #4


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Код: Выделить весь код
[xml]$xml = (gc .\source.xml -ea 0)
# версии сравниваются как строки
if ($xml -ne $null -and $xml.systemMetadata.version -eq '17.6.7.1') {
  'do something'
}
# можно сравнивать именно как версии
[version]$a = $null
[version]$b = New-Object Version('17.6.7.1') # эталонная версия
if ([version]::TryParse($xml.systemMetadata.version, [ref]$a)) {
  if ($a -eq $b) {
    'do something'
  }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:42, 20-06-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


greg zakharov, здесь:
Цитата greg zakharov:
[version]$b = New-Object Version('17.6.7.1') »
обязательно нужно приводить к типу?

Отправлено: 08:50, 20-06-2017 | #6


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Iska, это просто пример.

Отправлено: 09:48, 20-06-2017 | #7


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо. Помогло. Воспользовался просто строками, как наиболее простым решением.

Отправлено: 13:20, 20-06-2017 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Лучше воспользуйтесь этим:
Цитата greg zakharov:
Код: Выделить весь код
# можно сравнивать именно как версии
[version]$a = $null
[version]$b = New-Object Version('17.6.7.1') # эталонная версия
if ([version]::TryParse($xml.systemMetadata.version, [ref]$a)) {
  if ($a -eq $b) {
    'do something'
  }
}
»
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:47, 20-06-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Наличие текста с условиями в PS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Наличие текста с условиями POSTREALITY Скриптовые языки администрирования Windows 15 26-05-2016 20:33
CMD/BAT - [решено] проверка наличие определенного текста в файлах shmel_sv@vk Скриптовые языки администрирования Windows 11 15-07-2015 11:15
CMD/BAT - вставка текста в *.PS (DOS кодировка) в нужную строку и столбец lexis1980 Скриптовые языки администрирования Windows 5 31-08-2012 09:00
CMD/BAT - Как проверить наличие текста в файле mamont1 Скриптовые языки администрирования Windows 6 16-09-2010 16:32
CMD/BAT - Проверка на наличие какого-то текста Magniy Скриптовые языки администрирования Windows 4 20-04-2010 18:26




 
Переход