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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Условие на сравнение свойства объекта, имеющего логическое значение: True, False

Ответить
Настройки темы
PowerShell - Условие на сравнение свойства объекта, имеющего логическое значение: True, False

Аватара для dosperados

Пользователь


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

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


Изменения
Автор: dosperados
Дата: 26-09-2011
Описание: исправил
Здравствуйте дорогие коллеги, возникла небольшая проблема при написании скрипта: Как я думаю суть проблемы в том что свойство объекта которое является логическим (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" тоже нечего не работает

Отправлено: 14:51, 24-09-2011

 

Аватара для dosperados

Пользователь


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

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


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

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

Отправлено: 15:07, 24-09-2011 | #2



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

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


Ветеран


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

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


Замените на $false или $true.

Но проще - Where { $_.Subject -eq "$Subject" -and $_.UnRead }
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:10, 24-09-2011 | #3


Аватара для dosperados

Пользователь


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

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


Kazun, Ага спасибо хорошая задумка... только вот Where очень долго работает я оставил вариант с find

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

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

$oOutlook.Session.Dial() 



Отправлено: 16:29, 24-09-2011 | #4


Ветеран


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

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


Кроме,как использовать WindowsMainTitle,ничего для данного случая в голову не приходит:

Код: Выделить весь код
$oOutlook.Session.Dial() 
do {
sleep 1
} while ( (gps outlook).WindowsMainTitle -eq "Новый звонок")
Или если Visible= $false,то можно - do { sleep 1} while ((gps outlook).MainWindowTitle)

Последний раз редактировалось Kazun, 24-09-2011 в 17:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:43, 24-09-2011 | #5


Аватара для dosperados

Пользователь


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

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


Цитата Kazun:
Или если Visible= $false,то можно - do { sleep 1} while ((gps outlook).MainWindowTitle) »
Спасибо большое, меня это вполне устраивает!)

Отправлено: 09:09, 26-09-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Условие на сравнение свойства объекта, имеющего логическое значение: True, False

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
CMD/BAT - [решено] Взять значение из свойства файла sov44 Скриптовые языки администрирования Windows 11 18-01-2012 16:13
HDD - Клонирование диска, имеющего поврежденные сектора Varicapp Накопители (SSD, HDD, USB Flash) 8 14-01-2011 15:47
HDD - Физическое и логическое подключение второго SATA gilson Хочу все знать 9 13-12-2009 17:41
Службы - как сменить ComVisible(false) в UserControl base class на ComVisible(true) zapravka_12 Microsoft Windows Vista 1 18-07-2007 11:18




 
Переход