Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Условие на сравнение свойства объекта, имеющего логическое значение: True, False (http://forum.oszone.net/showthread.php?t=216357)

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

Всем спасибо, сам решил проблему.

Но если у кого есть очень простое, интересное и эффективное решение с удовольствием посмотрю!
  1. Решение состояло в том чтобы вместо -eq использовать -match

Kazun 24-09-2011 15:10 1759349

Замените на $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

я допустим запускаю вот такой метод, который открывает окошко, после его закрытия дожен продолжиться скрипт, но не сразу после открытия...
PHP код:

$oOutlook.Session.Dial() 


Kazun 24-09-2011 17:43 1759416

Кроме,как использовать 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.

Время: 19:26.
© OSzone.net 2001-