Не совсем понимаю что вы имеете в виду, вас интересует сортировка? Вы можете сделать обратную сортировку дописав к sort -property name -Descending
Будет, чем больше цифра в имени файла, тем раньше он был создан.
Так, смотрите, вы указали создать 2 записи с одним именем. В AD не может быть две записи с одним и тем же именем, о чем вам консоль и говорит в самой первой строке ошибки.
$input = Read-Host 'Enter a name' Вы сюда заносите имена пользователей, тут только одно имя или несколько? Если несколько, то есть ли у них какой либо разделитель? Мне кажется тут получится тип данных String и все имена будут восприниматься как одна строка. Самое оптимальное, как мне кажется, это создать CSV/текстовый файл, со списком имен пользователей, где каждое имя будет на новой строке. После этого подгружать эти имена в скрипт как массив и делать Foreach не по количеству указанному вами вручную, а по всем элементам загруженного массива пользователей где будет по отдельности браться каждое имя.
Я могу описать как я бы это сделал: Выгрузил бы все данные из AD в переменные, а затем используя COM объекты Excel записывал бы данные в таблицу дергая их из переменных в соответствии с вашими требованиями. Но это не 2 строчки кода, там скрипт полноценный писать надо...
Дмитрий Шумов, Вот статья описывающая вашу проблему и ее причины https://social.technet.microsoft.com/wiki/contents...
Решение - сначала выгрузить все данные в переменную, а после уже их обрабатывать, тогда ошибки не будет, а не отправлять данные по конвейеру, как сделали вы.
MaxKozlov, При использовании фильтра -FilterXML он работает ОЧЕНЬ быстро, как если бы вы делали фильтр на локальной машине, проверьте сами. У меня он за 30-40 секунд забирает инфу с 80-90 ПК из Security лога
kotjj, Хорошо, но обращаю внимание, что сейчас цифры проставляются в -p8001 в простом порядке, по очереди и в теории могут не совпадать с номером интерфейса, если это необходимо надо дописать чтобы в конец именно номер интерфейса записывался.
kotjj, Поправил скрипт, теперь если несколько IP интерфейсов поднято выводит в файл все, но все еще остается вопрос с параметром -p8001 к каждому следующему просто +1 должно добавляться или записываться в конце индекс интерфейса?
Вам необходимо результат работы ForEach отправить в переменную, а уже ее на вывод в Export-csv, а не каждую запись по очереди отправлять в один и тот же файл. Например так:
$smtp = New-Object net.mail.smtpclient($smtpServer) создается новый класс при обращении к которому инициируется отправка письма с указанными параметрами
Правильно ли я понимаю, скрипт должен запросить у пользователя ввести имя пользователя, далее скрипт ищет в файлике данного пользователя, если находит делает запрос к АД находит адрес почты и отправляет ему на почту инфу с полей Role Monitor и Mouse все верно?
Павел, Прошу прощения за задержку с ответом.
Времени не было толком разобраться с этим вопросом))
Суть в следующем, переменная $input системная и временная и содержит в себе массив данных. По своей сути она похожа на переменную $_ которая используется при обработке каждого элемента массива и очищается сразу же после передачи элемента, так же работает и $input, но она передает весь массив целиком и сразу очищается.
Обратиться к ней несколько раз не получится, но есть вариант загнать ее значение в какую-либо созданную нами переменную и в дальнейшем уже использовать ее.
Простенький пример ниже:
Александр Шурпо, Вот так должно заработать
Перед Get-ADComputer добавлена дополнительная переменная.
При указании Get-ADComputer -SearchBase Powershell не учитывает отдельные параметры переменной и игнорирует .Text в переменной $formTextBox.Text
function Generate-Form {
Add-Type -assembly System.Windows.Forms
Import-Module activedirectory
#Создание формы
$window_form = New-Object System.Windows.Forms.Form
$window_form.Text ='Сбор информации о ПК компании'
$window_form.Width = 500
$window_form.Height = 700
$window_form.AutoSize = $true
Будет, чем больше цифра в имени файла, тем раньше он был создан.