Наличие текста с условиями в PS
Друзья, здравствуйте.
Помогите пожалуйста, сам не могу сообразить.
Необходимо написать код с следующими условиями:
Есть файл Q:\file.xml необходимо читать этот файл и если в нём есть текст "version 7,2", то if , а если данного текста в этом файле нет то else
Подскажите пожалуйста.
Спасибо!
|
Если «version 7,2» гарантированно а) уникальна и б) будет размещена в одной строке, и если кодировка не окажется UTF-16 или экзотичней — достаточно простого Select-String.
Как обычно: если бы Вы упаковали file.xml в архив и приложили таковой к сообщению — было бы точнее.
|
Цитата:
Цитата 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
|
Цитата:
Цитата 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. Полученное значение разбивать по точке на компоненты номера версий, каковые затем сравнивать с искомым номером версии.
|
greg zakharov |
20-06-2017 08:42 2746031 |
Код:
[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'
}
}
|
greg zakharov, здесь:
Цитата:
Цитата greg zakharov
[version]$b = New-Object Version('17.6.7.1') »
|
обязательно нужно приводить к типу?
|
greg zakharov |
20-06-2017 09:48 2746053 |
Iska, это просто пример.
|
Спасибо. Помогло. Воспользовался просто строками, как наиболее простым решением.
|
Лучше воспользуйтесь этим:
Цитата:
Цитата 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'
}
}
»
|
|
Время: 21:54.
© OSzone.net 2001-