Войти

Показать полную графическую версию : Условие на сравнение свойства объекта, имеющего логическое значение: True, False


dosperados
24-09-2011, 14:51
Здравствуйте дорогие коллеги, возникла небольшая проблема при написании скрипта: Как я думаю суть проблемы в том что свойство объекта которое является логическим (True/False) необходимо сравнивать как-то по другому, но я не могу понять как....
Кто сталкивался с таким подскажите!
Вот примеры кода как я пытался сравнить:


$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
Всем спасибо, сам решил проблему.

Но если у кого есть очень простое, интересное и эффективное решение с удовольствием посмотрю!

Решение состояло в том чтобы вместо -eq использовать -match

Kazun
24-09-2011, 15:10
Замените на $false или $true.

Но проще - Where { $_.Subject -eq "$Subject" -and $_.UnRead }

dosperados
24-09-2011, 16:29
Kazun, Ага спасибо хорошая задумка... только вот Where очень долго работает я оставил вариант с find

вот есть еще вопрос: если я вызываю метод который открывает какое то отдельное окно, как мне дождаться его выполнения, а уже потом продолжить скрипт
что-то типо в CMD было:start /wait cmd.exe /c bla-bla.cmd

я допустим запускаю вот такой метод, который открывает окошко, после его закрытия дожен продолжиться скрипт, но не сразу после открытия...
$oOutlook.Session.Dial()

Kazun
24-09-2011, 17:43
Кроме,как использовать 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
Или если Visible= $false,то можно - do { sleep 1} while ((gps outlook).MainWindowTitle) »

Спасибо большое, меня это вполне устраивает!)




© OSzone.net 2001-2012