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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [Решено] Привязать св-ва к массивам (http://forum.oszone.net/showthread.php?t=335791)

c4uran 19-07-2018 08:19 2822564

[Решено] Привязать св-ва к массивам
 
Есть такая задача:
По ad запрашиваем пользователей (или группы или членство групп не важно что, можно просто файлики), допустим с фильтром - город, на выходе получаем всех пользователей из это города (с нумерацией 1,2,3...), далее выдается запрос от шела «выберете пользователей» чтобы добавить их в массив, (так же через запятую вводим нужные номера пользователей), на выходе массив с выбранными пользователями, как это сделать?

Busla 19-07-2018 09:46 2822582

c4uran, а в чём проблема?

Цитата:

Цитата c4uran
запрос от шела «выберете пользователей» чтобы добавить их в массив, (так же через запятую вводим нужные номера пользователей) »

не издевайтесь над пользователями, используйте Out-GridView

c4uran 19-07-2018 13:58 2822623

Мне нужен интерактив, для создания костыля :(

get-aduser
Вывод:
1 Петро
2 Васе
3 Андре

$user = введите номер сотрудника: (ввожу 1,3)

Получаю:
$user = @{ Петро, Андре }

Iska 19-07-2018 16:22 2822649

c4uran, коллега Busla, конечно, пошутил. Создайте форму, поместите на неё ListBox/ListView, выводите туда потребный перечень и делайте в нём выбор, добавьте кнопку, по которой после осуществления выбора будут выполняться потребные действия над выбранными строками.

P.S. Нет, номер, конечно, тоже имеет право на жизнь, если пользователей не будет больше десятка, або двух.

c4uran 19-07-2018 17:27 2822662

Никогда не делал ничего подбного, можно пару примеров, там цмдлеты, примеры удачного использования

greg zakharov 19-07-2018 17:32 2822663

Вроде бы автор и не заикался о сценарии с GUI, речь о самом хосте надо полагать. Тогда проще создать отдельный буфер (по принципу того, как это реализовано в less), отобразить в нем данные, из которых нужно сделать выбор (с прокруткой или без - на выбор), забрать, скажем, select'ом данные после чего отправить данные в основной буфер, а созданный - удалить.
P.S. $user = @{Петро, Андре} - скорее можно схлопотать трейсбек, нежели массив, ибо здесь попытка создать хеш.

Busla 19-07-2018 18:44 2822677

Цитата:

Цитата c4uran
Никогда не делал ничего подбного »

программ на PowerShell ?

Kazun 19-07-2018 19:14 2822692

Как выше уже сказано, можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру. Выбор элементов по Ctrl или Shift и длаее нажимаем OK.

Код:

$p = Get-Process | Out-GridView -PassThru
$p | Foreach {$p.Name}

Можно установить модуль https://github.com/chrisseroka/ps-menu

Для примера выберем пользователей и у выбранных пользоавателей получим город:

Код:

$users = Get-ADUser -Filter "City -like 'Иваново'" -Properties city
$index = menu @($users.Name) -ReturnIndex -Multiselect
foreach($i in $index) {
        "{0} - {1}" -f $users[$i].name,$users[$i].city
}




greg zakharov 19-07-2018 19:26 2822694

Kazun, не знаю согласитесь вы или нет, но у ps-menu есть один небольшой недостаток: вывод меню селектора в текущий буфер, - хотя через $host сие можно исправить. В выходные постараюсь написать код.

Iska 19-07-2018 19:45 2822701

Цитата:

Цитата Kazun
можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру. Выбор элементов по Ctrl или Shift и длаее нажимаем OK. »

Даже не знаю — то ли я знал, но забыл, то ли вовсе тупо не знал :(.

Busla 20-07-2018 10:09 2822774

Цитата:

Цитата Kazun
можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру »

нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе
чтобы Out-GridView возвращал выделенные элементы нужно указать параметр -OutputMode Multiple

Iska 20-07-2018 10:34 2822779

Цитата:

Цитата Busla
нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе »

Поясните, пожалуйста?

Kazun 20-07-2018 10:53 2822787

Цитата:

Цитата Busla
нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе
чтобы Out-GridView возвращал выделенные элементы нужно указать параметр -OutputMode Multiple »

- Multiple. Zero, one, or many items. Use this value when the next command can take multiple input objects. This
value is equivalent to the Passthru parameter.

Busla 20-07-2018 12:12 2822813

Iska, да, тут я не совсем прав. PassThru потому и не обозвали общим параметром, что он для каждого командлета работает по-разному. Я неудачно обобщил свой опыт его использования на все случаи. Для Out-GridView -PassThru - эквивалент -OutputMode Multiple

Wheee111 22-07-2018 21:36 2823099

$Users = Get-ADUser -Filter {Enabled -eq $False} | Select -First 10
$Users | Add-Member @{"Num" = 0} -PassThru -Force | Out-Null
$i = 1 ; $users | %{ $_.Num = $i ; $i++ }
$users | Select Num, Name

c4uran 26-07-2018 09:43 2823535

Wheee111, То что нужно, спс

Kazun, Тоже интересное решение, буду тестировать, спасибо


Время: 15:57.

Время: 15:57.
© OSzone.net 2001-