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

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

Ответить
Настройки темы
PowerShell - Find по разным условиям

Аватара для dosperados

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


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

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


Изменения
Автор: dosperados
Дата: 03-02-2012
Написал поиск в Outlook`e по разным условим

Код: Выделить весь код
$oOutlook    = New-Object -ComObject Outlook.Application
$oNameSpace  = $oOutlook.GetNamespace("MAPI")
$oMAPIFolder = $oNameSpace.GetDefaultFolder(3)
$cContacts = $oMAPIFolder.Items

# Сам поиск
$cContactForDel = @()

$del | % { 
$N=$_.Name; $M=$_.Mail; $D=$_.Department; $T=$_.Title; $C=$_.Company
Write-Verbose "Удаляем  $N $M $D $T $C"
$cContactForDel += $cContacts.Find("[LastName] = ""$N"" AND [Email1Address] = ""$M"" OR [LastName] = ""$N"" AND [Department] = ""$D"" OR [LastName] = ""$N"" AND [JobTitle] = ""$T"" OR [LastName] = ""$N"" AND [CompanyName] =""$C"" OR [Email1Address] = ""$M"" AND [Department] = ""$D"" OR [Email1Address] = ""$M"" AND [JobTitle] = ""$T"" OR [Email1Address] = ""$M"" AND [CompanyName] =""$C"" ") }
Переменная $del массив с n`ным кол-вом объектов в нем и свойствами этих объектов.

Хотел организовать поиск по совпадению двух параметров.
логика была такая:
найти объект
[LastName] = ""$N"" AND [Email1Address] = ""$M"" если объекта с сочетанием таких полей нету продолжаем поиск по следующему сочетанию
или
[LastName] = ""$N"" AND [Department] = ""$D""
или
[Email1Address] = ""$M"" AND [Department] = ""$D""
и т.д.

у меня реализованная мной поисковая логика не работает (видимо нельзя так писать, как я это сдела)
ошибка:
Произошла ошибка при вызове метода, так как [System.__ComObject] не содержит метод с именем "op_Addition".
строка:70 знак:19
+ $cContactForDel += <<<< $cContacts.Find("[LastName] = ""$N"" AND [Email1Address] = ""$M"" OR [LastName] = ""$N"" AND [Departme
nt] = ""$D"" OR [LastName] = ""$N"" AND [JobTitle] = ""$T"" OR [LastName] = ""$N"" AND [CompanyName] =""$C"" OR [Email1Address] =
""$M"" AND [Department] = ""$D"" OR [Email1Address] = ""$M"" AND [JobTitle] = ""$T"" OR [Email1Address] = ""$M"" AND [CompanyNam
e] =""$C"" ") }
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

Отправлено: 10:16, 03-02-2012

 

Ветеран


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

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


$oMAPIFolder = $oNameSpace.GetDefaultFolder(3)
$cContacts = $oMyMAPIFolder.Items

Почему две разные переменные?

$cContactForDel - Что за переменная?

Отправлено: 11:11, 03-02-2012 | #2



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

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


Аватара для dosperados

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


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

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


Цитата Kazun:
$oMAPIFolder = $oNameSpace.GetDefaultFolder(3)
$cContacts = $oMyMAPIFolder.Items
Почему две разные переменные?
$cContactForDel - Что за переменная? »
Выдергиваю маленькую часть скрита, поэтому не доглядел.
$oMyMAPIFolder исправил на $oMAPIFolder

$cContactForDel переменнай в которой хранится объект для дальнейшего удаления его

Отправлено: 12:05, 03-02-2012 | #3


Ветеран


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

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


Вот теперь,покажите ошибку,которая выдается.
И конакты - GetDefaultFolder(3) - разве не 10?

Отправлено: 12:21, 03-02-2012 | #4


Аватара для dosperados

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


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

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


да 10, но я удаляю из папки удаленные! папка удаленные - 3
можно показать пример и на папке 10... не пренципиально

Все я нашел ошибку, я забыл указать $cContactForDel = @(). (ОПЯТЬ моя невнимательность)
поэтому выдавал такую ошибку.
Kazun, Я сделал правильно? Или опять же можно проще реализовать?

Последний раз редактировалось dosperados, 03-02-2012 в 12:34.


Отправлено: 12:25, 03-02-2012 | #5


Аватара для dosperados

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


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

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


Kazun, Хотя я ошибался есть разница при поиске в папке удаленные (3) и в папке контакты (10)
Так как в папке удаленные присутствует много различного радо объектов - письма, папки и контакты.

Но не у каждого объекта в этой папке есть свойство [Email1Address] - получается что при поиске в объекте где нет такого поля выдает ошибку:
Исключение при вызове "Find" с "1" аргументами: "Свойство "Email1Address" неизвестно."
строка:33 знак:42
+ $cContactForDel += $oMAPIFolderDel.Find <<<< (" [Email1Address] = ""$M"" ")
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

Отправлено: 12:44, 03-02-2012 | #6


Аватара для dosperados

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


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

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


Есть ли способ искать в массиве объектов, если у каждого объекта разный набором свойств?

Отправлено: 12:01, 07-02-2012 | #7


Ветеран


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

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


Как вариант отфильтровать,только по заданному типу,скажем Контакт,а дальше использовать операторы сравнения PowerShell,я думаю здесь скорость особо не критична.

Отправлено: 12:14, 07-02-2012 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск и удаление строки в файле по сложным условиям m0nkrus Скриптовые языки администрирования Windows 9 26-06-2011 10:37
CMD/BAT - [решено] Помогите с написанием батника копирования с FTP по условиям. alexuvv Скриптовые языки администрирования Windows 5 24-06-2011 08:20
Интернет - Как подключить к выделенке 2 и более интернет-устройства в обход условиям illusionmgs Сетевые технологии 11 20-04-2008 12:14
[решено] Где брать ключи установки по условиям downgrade ? extend Лицензирование продуктов Microsoft 22 23-04-2007 22:55
Разным Flash - разные буквы? DNK_Inc Microsoft Windows 2000/XP 8 28-11-2006 11:24




 
Переход