Как стать автором
Обновить

Комментарии 18

Добавили в качестве еще одного способа получения списка установленных программ.
Спасибо.
Вы не поняли: Нельзя рекомендовать Win32_Product для этого. Вообще.
Исправлено.
(Get-Credential).Password
скобочку вначале забыл :). плюс нужно добавить один нюанс, в разных версиях 10ки, длина хэша пароля отличается. можно наткнутся на особенность, что на одном компьютере хеш из файла с паролем сработает, а на другом нет.
Исправлено.
Подскажите, пожалуйста, вы пробовали протестировать использование зашифрованного пароля на других ПК или тестили только на своей машине? Насколько я помню, я когда-то пытался сделать подобное и удивился, почему не работает на других компьютерах. Потом, когда стал разбираться, то оказалось, что если попробовать зашифровать пароль так, как указано в статье, то дешифровка возможна только под аккаунтом пользователя, под которым осуществляется шифрование. Для того, чтобы использовать зашифрованный пароль из файла на другой машине/под другим пользователям, то нужно указывать AES-ключ через параметр -Key.

В статье ниже рассматривают подобные варианты:
https://www.pdq.com/blog/secure-password-with-powershell-encrypting-credentials-part-2/
Это сделано специально, для шифровки используется локальная соль.

Может я устарел, но синтаксис powershell для меня ужасен, как язык инопланетян. Использую для автоматизации JScript и VBScript, иногда BAT файлы. Не вижу ни одной причины для изучения powershell

Ну как можно не любить Powershell?
(ノಠ益ಠ)ノ彡┻━┻
Благодарствую!
Invoke-Command c gcim в цикле для большого количества машин( например, если AD сильно большая) достаточно «страшная» вещь, т.к висящий RPC, например- вешает цикл. Есть отличный коммандлет Start-Job. Можно сильно распараллелить выполнение и цикл не будет зависеть от одной «проблемной» машины

Обожаю PowerShell за возможность работать с .net библиотеками (включая поддержку работы с приватными полями и методами)
https://blog.netspi.com/using-powershell-and-reflection-api-to-invoke-methods-from-net-assemblies/
Это ооочень расширяет возможности.

По теме обсуждения PowerShell, вчера была интересная презентация кросс-платформенного PowerShell 7 на базе .Net Core.
Очень любопытно: создавали ВМ-ки, KeyVault для хранения credentials, онлайновый Storage и переброска файлов в него из локалки.
Кстати, PS скрипты прекрасно редактируются и дебажатся из бесплатной кроссплатформенной VS Code.

github.com/dave-007/Take-Command-of-Azure-PowerShell-PowerShell-7
www.meetup.com/mcsfug/events/267540026
$ADComputers = (Get-ADComputer -filter *).DNSHostName
Кто это пытается использовать очень быстро понимает, что:
1. Нужно проверять доступность, иначе ждем пока не отвалится по таймауту.
2. Использовать Jobы, потому что есть тысяча причин по которой запрос повиснет мертвым грузом, плюс распараллеливание процесса.
3. Нужно проверять что за DNSHostName скрывается именно тот хост, который нужен, ибо DNS может указывать на IP который занял уже другой хост при использовании DHCP, либо при не настроенной очистке DNS записей.

ну и из общего совета: иногда быстрее и надежнее сделать через schtasks c последовательным созданием/выполнением/удалением задания. Менее удобно в части получения результатов выполнения команды, но не зависит от WinRM и версии винды и повершелки.
Get-ADComputer : Имя "Get-ADComputer" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:17
+ $ADComputers = (Get-ADComputer -filter *).DNSHostName
+                 ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-ADComputer:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Что я делаю не так?
Import-Module ActiveDirectory
Модуль автоматически подхватывается, если используются команды из него, видимо RSAT не установлен.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий