Igor Borisov,
на powershell вообще нет утилит.
А вместо grep, например, есть Select-String ("sls" для тех, кому лень набрать несколько лишних символов).
Думаю, будет больше шансов получить ответ, если описать, из чего что должно получаться.
Я, например, не знаю, что такое "adb devices" и что оно передает в конвейер.
То есть, круг отвечающих определяется условиями:
знают, что такое "adb";
понимают, что написано на bash;
знают Powershell.
А при более подробном описании можно исключить два первых условия.
Если они ещё и по SMB доступны, надо из цикла выкинуть все, кроме Copy-Item (без Ivoke-Command) и тестировать.
Когда будут файл копироваться - усложнять.
А когда усложнять - подумать, как упростить код в принципе. Например, зачем там запуск cmd?
Роман Безруков,
безотносительно заданного вопроса, скажу, что групповые политики часто проигрывают скриптам.
Логирование, уведомления (почта, чатик) об ошибках, обработка сложных условий (выбор файлов для копирования в зависимости от фазы луны) - всего этого добиться от групповых политик?
Отдельным пунктом стоит тестирование корректности работы - со скриптами это куда проще устроить...
AlexNov001,
Мда... Переменные ушли, легче не стало.
Вопрос-то мой был простой - "Откуда (вернее - как?) берутся данные?"
Если предположить, что есть есть объект с атрибутами Name, Object, Quantity и массив, являющийся перечнем для Object, можно перебирать массив и для каждого элемента массива фильтровать объекты по атрибуту "Object", создавать новый объект и добавлять в него атрибуты ( Add-Member -MemberType NoteProperty -Name 'Name' -Value $Quantity). Тогда результатом будем набор объектов, который легко можно выгрузить в CSV (или вот ещё), правда там столбцы получаться как name, а строки как object.
Но это все не важно.
В текущем описании задачи есть объект $data_cur, у которого 3 атрибута name, object и quantity, которые, по всей видимости являются (каждый из них) массивами, никак не связанными друг с другом.
И, поэтому варианты следующие:
описание задачи неверно;
данные собираются неверно;
может я что-то упускаю.
Третий пункт добавил, так как телепатические способности у меня отсутствуют...
Можно начать с простого:
когда $data_cur уже сформирован. надо добавить
$data_cur | Get-member
$data_cur.GetType()
и выложить сюда результат.
AlexNov001,
После описания яснее не стало, скорее - наоборот...
Данные по количеству к чему привязаны? К name или к object?
А так, фраза "данные собираются циклами" и 3 загадочные переменные намекают на то, что там жуткая жуть твориться. Без описания исходных данных трудно что-то дельное посоветовать...
Я бы шёл таким путем:
Строка в таблице может быть объектом с атрибутами Name, object 1, object 2,..., object n.
Значит надо получить массив таких объектов и экспортировать в тот же CSV.
Откуда (вернее - как?) берутся данные, из описания непонятно. var1, var2, var3 - они как-то связаны?
Данные в п. 2 к object привязаны или к name?
Digsecman,
А если вот так (пример):
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows 10*" -and enabled -eq "true"').Name | Resolve-DnsName
Настойчивость - это, наверное, хорошо.
А игнорирование советов - думаю, плохо. :) Digsecman,
В какой момент происходит присваивание значения переменной $computers ?
Digsecman,
раз у вы в самом начале пути, я бы сразу посмотрел на WinGet - минус сторонний компонент и скрипт проще получиться.
А так, присоединяюсь к сергей кузьмин - надо разбираться начинать с простых вещей:
1. Посмотреть, что в Windows EnevtLog по запуску скрипта.
2. Попробовать запускать скрипт, который единственное что делает - пишет в файл.
3. Когда появиться уверенность, что скрипт запускается - добавить что-то из интересующей логики.
4. и т.д.
P.S. - Если мысль идет от "все компьютеры", тогда, действительно, зачем ставить софт при входе пользователя? Тем более, не весь софт можно поставить с правами пользователя...
Исмат Гайибов, если это все не для саморазвития, то лучше воспользоваться советом Alexey Dmitriev .
Для NTFSSecurity есть достаточно подробное описание с примерами.
P.S. - Powershell позволит автоматизировать задачи назначения прав, но саму задачу надо "решить" без него. Есть графический интерфейс, который наглядно представляет текущие разрешения, унаследованные в том числе. Это позволит подойти к ответу на вопросы "как правильно убрать доступ всем пользователям?" и т.п. А потом уже можно описывать это все на Powershell.
А как часто будет требоваться перезапуск, есть предположение?
В Windows есть службы с базовым механизмом перезапуска при "падении" (перезапуск службы, запуск другой программы, перезагрузка системы).
"php-скрипт как служба Windows", правда, звучит странновато... Думаю, можно сделать с помощью NSSM или, ка-то встречалось в Интернете приложение именно для php-скриптом (но. кажется было платным).
Вообще, мне кажется можно набросать скрипт на Powershell, который проверяет запущенные процессы в случае отсутствия нужного (или нужного их количества) запускает новый процесс.
А запуск самого скрипта, например, через планировщик заданий.
Думаю, это относиться к маленьким компаниям, где нет потребности в IT, кроме как обеспечить работу офисного пакета и никакого "IT-отдела" в помине нет. Причём, это же не только к IT относится: работа бухгалтера в компании, где всего один бухгалтер, отличается от работы бухгалтера, где их в отделе 20 человек.
LaP1GEON, ярлыки можно расположить в "Мой компьютер", если сделать их как сетевые размещения. Запрос в Google "network locations windows 10" должен помочь.
Можно убрать сравнение - легче читать будет:
А если это запустить, сразу и вопрос из P.S. отпадет, так ведь?
Фильтровать ПК из AD можно так:
Get-ADComputer -Filter {OperatingSystem -like "Windows 10*"}
Test-Connection, вроде как, требует имя узла указывать? Ошибку в этой строке не выдает?