![Компьютерный форум OSzone.net](images/oszone.net.print.gif) |
|
dosperados |
24-09-2011 14:51 1759341 |
Условие на сравнение свойства объекта, имеющего логическое значение: True, False
Здравствуйте дорогие коллеги, возникла небольшая проблема при написании скрипта: Как я думаю суть проблемы в том что свойство объекта которое является логическим (True/False) необходимо сравнивать как-то по другому, но я не могу понять как....
Кто сталкивался с таким подскажите!
Вот примеры кода как я пытался сравнить:
PHP код:
$sEmail = "mail@mail.ru"
$Subject = "Special message"
$cMessage = $oMyMAPIFolder.Items
#1 вот так не работает
$cMessage | foreach { if ($_.Subject -eq "$Subject" -and $_.UnRead -eq "True") {Write-Host "Пришла команда"; $_.UnRead = "0"} }
#2 вот так не работает
$oMessage = $cMessage.Find("[Subject] = ""$Subject"" ")
While ($oMessage -ne $null) {
if ($_.UnRead -eq "True") {Write-Host "Пришла команда"; $_.UnRead = "0"}
$oMessage = $cMessage.FindNext()
}
#3
#3.1 вот так не работает
$cResult = $cMessage | Where { ($_.Subject -eq "$Subject") -and ($_.UnRead -eq "True")}
#3.2 вот так не работает
$cResult = $cMessage | Where { $_.Subject -eq "$Subject" -and $_.UnRead -eq "True"}
#3.3 так находит но этот вариант не устраивает тем что по одному условию ищет, значит опять надо на второе условие проверять, и плюс он в 10 раз медленней всех остальных работает
$cResult = $cMessage | Where { $_.Subject -eq "$Subject"}
$cResult | Foreach { if ($_.UnRead -eq "True") {Write-Host "Пришла команда"; $_.UnRead = "0"}
Write-Host $_.EntryID $_.UnRead
}
P.S. Если вместо "True" ставить "1" тоже нечего не работает
|
dosperados |
24-09-2011 15:07 1759347 |
Всем спасибо, сам решил проблему.
Но если у кого есть очень простое, интересное и эффективное решение с удовольствием посмотрю! - Решение состояло в том чтобы вместо -eq использовать -match
|
Замените на $false или $true.
Но проще - Where { $_.Subject -eq "$Subject" -and $_.UnRead }
|
dosperados |
24-09-2011 16:29 1759382 |
Kazun, Ага спасибо хорошая задумка... только вот Where очень долго работает я оставил вариант с find
вот есть еще вопрос: если я вызываю метод который открывает какое то отдельное окно, как мне дождаться его выполнения, а уже потом продолжить скрипт
что-то типо в CMD было:start /wait cmd.exe /c bla-bla.cmd
я допустим запускаю вот такой метод, который открывает окошко, после его закрытия дожен продолжиться скрипт, но не сразу после открытия...
|
Кроме,как использовать WindowsMainTitle,ничего для данного случая в голову не приходит:
Код:
$oOutlook.Session.Dial()
do {
sleep 1
} while ( (gps outlook).WindowsMainTitle -eq "Новый звонок")
Или если Visible= $false,то можно - do { sleep 1} while ((gps outlook).MainWindowTitle)
|
dosperados |
26-09-2011 09:09 1760203 |
Цитата:
Цитата Kazun
Или если Visible= $false,то можно - do { sleep 1} while ((gps outlook).MainWindowTitle) »
|
Спасибо большое, меня это вполне устраивает!)
|
Время: 19:26.
© OSzone.net 2001-