Командлеты PowerShell для удаленного управления
С помощью Windows PowerShell можно выполнять команды не только на локальном компьютере, но и на одном или даже на нескольких удаленных компьютерах.
- Enter-PSSession — запускает интерактивный сеанс с удаленным компьютером;
- Exit-PSSession — завершает интерактивный сеанс с удаленным компьютером;
- New-PSSession — создает постоянное подключение к локальному или удаленному компьютеру;
- Remove-PSSession — закрывает один или несколько сеансов Windows PowerShell;
- Disconnect-PSSession — отсоединяется от сеанса;
- Connect-PSSession — подключается к отключенным сеансам;
- Get-PSSession — получает сеансы Windows PowerShell на локальных и удаленных компьютерах;
- Invoke-Command — выполняет команды на локальном и удаленных компьютерах.
Учетные данные домена
Выполнив сценарий конфигурации из примера еще раз (с шифрованием или без), вы снова получите предупреждение о том, что использовать доменную учетную запись в качестве учетных данных не рекомендуется. Пользуясь для этой цели локальной учетной записью, вы защитите от риска доменные учетные данные, которые можно использовать на других серверах.
Используя учетные данные с ресурсами DSC, по возможности отдавайте предпочтение локальной учетной записи, а не доменной.
Если свойство учетных данных содержит \ или @, DSC будет рассматривать их как доменную учетную запись. Исключение составляют значения localhost, 127.0.0.1 и ::1 в доменной части имени пользователя.
— Добавление пользователя в группу «Администраторы»
Напоминаю — При создании учётной записи через PowerShell, она не будет состоять ни в одной из локальных групп[Пользователи, Администраторы…, а значит пока мы не добавили её в группу, толку от неё нет. Короче не забываем добавить пользователя в группу
Здесь я буду добавлять пользователя в группу «Администраторы», тем самым сделаю его локальным администратором. Вы же конечно можете добавить пользователя в группу «Пользователи» если авторизовываться вам нужно, а быть локальным администратором — не нужно.
Первым делом нужно посмотреть точное название группы, делается это при помощи командлета отображающего все локальные группы — Get-LocalGroup:
Get-LocalGroup
Это действие обязательное, так как название группы может быть, как на русском так и на английском языке и команда для русского языка не сработает на английском и наоборот :c
И так я вижу, что название групп у меня на русском, и нужная мне группа называется — «Администраторы».(Рис.9)
Рис.9 — Список локальных групп.
Теперь нужно посмотреть членов этой группыКто находится в списке, командлет — Get-LocalGroupMember(Рис.10):
Get-LocalGroupMember -Group "Администраторы"
Как видим в группе «Администраторы» числится две учётных записи — «UserFirstdeer» и «Администратор».
Рис.10 — Просмотр членов локальной группы.
Теперь нужно добавить нашего пользователя в группу, для этого воспользуемся командлетом — Add-LocalGroupMember:
Add-LocalGroupMember -Group "ИМЯ_ГРУППЫ" -Member "ПОЛЬЗОВАТЕЛЬ"
Для того чтобы удалить пользователя из группы воспользуемся командлетом — Remove-LocalGroupMember:
Remove-LocalGroupMember -Group "ИМЯ_ГРУППЫ" -Member "ПОЛЬЗОВАТЕЛЬ"
В моём случае так(Рис.10):
Add-LocalGroupMember -Group "Администраторы" -Member "firstdeer"
Рис.11 — Добавление пользователя в группу.
Всё ок! Наш пользователь в группе. Теперь пользователь может авторизовываться в системе.
Как мы делали то же самое в графическом интерфейсе и в командной строке — Работа с локальной учётной записью в Windows [GUI/CMD]
У меня всё!
Поделиться публикацией
Была ли вам полезна статья? Есть возможность
поддержать проект.
Удаленное взаимодействие с Windows PowerShell без настройки
Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.
В эти командлеты входят следующие:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:
Windows Service Control Manager
Службы управляются Windows Service Control Manager (SCM). SCM отвечает за конфигурирование служб, их запуск и остановку и т. д.
Панель управления SCM доступна через Control Panel | System and Security | Administrative Tools | Services. Как показано на рис. 1, она отображает список всех сконфигурированных служб с их названиями, описаниями, состоянием, типом запуска и именем пользователя.
Рис. 1. Windows Service Control Manager GUI в Windows 10
Для SCM также имеются интерфейсы командной строки.
- Старая утилита net.exe с хорошо известными командами net start и net stop, корнями уходящая аж в MS-DOS! Несмотря на такое название, ее можно использовать для запуска и остановки любой службы, а не только сетевых служб. Введите net help, чтобы получить подробное описание.
- Более мощная утилита, sc.exe, введенная в Windows NT, дает тонкий контроль над всеми аспектами управления службами. Введите sc /?, чтобы получить подробное описание.
Эти утилиты командной строки, хоть и присутствуют в Windows 10, теперь считаются устаревшими, и рекомендуется использовать функции управления службами Windows PowerShell, как будет описано далее.
Подвох Как net.exe, так и sc.exe используют «короткие» имена служб в одно слово, которые, к сожалению, не совпадают с более описательными названиями, отображаемыми в панели управления SCM. Чтобы получить соответствие между двумя именами, используйте команду get-service из Windows PowerShell.
Командлеты для работы с Active Directory (AD)
Windows PowerShell, конечно же, позволяет работать со службой каталогов Active Directory. Для этих целей существует немало командлетов, вот некоторые из них:
- New-ADUser – создание нового пользователя в Active Directory;
- Get-ADUser – выводит информацию о пользователях Active Directory;
- Set-ADUser — изменяет пользователя Active Directory;
- Remove-ADUser — удаляет пользователя Active Directory;
- New-ADGroup – командлет создает группу в Active Directory;
- Get-ADGroup – выводит информацию о группе или выполняет поиск, чтобы получить несколько групп из Active Directory;
- Set-ADGroup – командлет изменяет группу в Active Directory;
- Remove-ADGroup — удаление группы в Active Directory;
- Add-ADGroupMember — командлет добавляет учетные записи пользователей, компьютеров или групп в качестве новых членов группы Active Directory;
- Get-ADGroupMember — выводит информацию о членах группы Active Directory;
- Remove-ADGroupMember — удаление элементов из группы Active Directory;
- Set-ADAccountPassword — сброс пароля учетной записи Active Directory;
- Disable-ADAccount — отключает учетную запись Active Directory.
- Enable-ADAccount — включает учетную запись Active Directory;
- Unlock-ADAccoun — разблокирует учетную запись Active Directory;
- New-ADComputer — создание новой учетной записи компьютера в Active Directory;
- Get-ADComputer — выводит информацию об одном или нескольких компьютерах в Active Directory;
- Set-ADComputer — изменение учетной записи компьютера в Active Directory;
- Remove-ADComputer — удаление компьютера из Active Directory.
Обработка учетных данных в DSC
По умолчанию ресурсы DSC запускаются от имени . При этом некоторые ресурсы требуют учетных данных, например, если ресурсу необходимо установить программное обеспечение с помощью учетной записи определенного пользователя.
В более ранних ресурсах для этого использовалось прописываемое в коде свойство . В WMF 5.0 для всех ресурсов было добавлено автоматическое свойство . Дополнительные сведения об использовании см. в разделе Запуск DSC с учетными данными пользователя. Новые и настраиваемые ресурсы позволяют использовать это автоматическое свойство вместо создания отдельного свойства для учетных данных.
Примечание
Некоторые виды ресурсов используют множество учетных данных для определенной цели. Такие ресурсы имеют собственные свойства учетных данных.
Чтобы найти доступные свойства учетных данных ресурса, используйте или Intellisense в интегрированной среде сценариев ().
В этом примере используется ресурс Group из встроенного модуля ресурсов DSC . Он может создавать локальные группы, а также добавлять и удалять члены. Этот ресурс принимает как свойство , так и автоматическое свойство , но использует только свойство .
См. дополнительные сведения о свойстве и запуске DSC с учетными данными пользователя.
Разрешения пользователя
Для создания удаленных сеансов и выполнения удаленных команд по умолчанию текущий пользователь должен быть членом группы » Администраторы » на удаленном компьютере или предоставлять учетные данные администратора. В противном случае произойдет сбой команды.
Разрешения, необходимые для создания сеансов и выполнения команд на удаленном компьютере (или в удаленном сеансе на локальном компьютере), устанавливаются конфигурацией сеанса (также называемой конечной точкой) на удаленном компьютере, к которому подключается сеанс. В частности, дескриптор безопасности в конфигурации сеанса определяет, кто имеет доступ к конфигурации сеанса и кто может использовать его для подключения.
Дескрипторы безопасности в конфигурациях сеансов по умолчанию, Microsoft. PowerShell, Microsoft. PowerShell32 и Microsoft. PowerShell. Workflow, разрешают доступ только членам группы администраторов .
Если у текущего пользователя нет разрешения на использование конфигурации сеанса, команда для выполнения команды (использующая временный сеанс) или создание постоянного сеанса на удаленном компьютере завершается сбоем. Пользователь может использовать параметр ConfigurationName командлетов, которые создают сеансы, чтобы выбрать другую конфигурацию сеанса, если она доступна.
Члены группы » Администраторы » на компьютере могут определить, кто имеет разрешение на удаленное подключение к компьютеру, изменив дескрипторы безопасности в конфигурациях сеансов по умолчанию и создав новые конфигурации сеанса с разными дескрипторами безопасности.
Дополнительные сведения о конфигурациях сеансов см. в разделе about_Session_Configurations.
Выполнение задач настройки DHCP
Изменение сведений DHCP, так же как и настройка DNS, включает работу с набором сетевых адаптеров. Существует несколько отдельных действий, выполняемых с помощью инструментария WMI. Мы рассмотрим несколько наиболее типичных.
Определение адаптеров, поддерживающих DHCP
Найти на компьютере адаптеры, поддерживающие DHCP, можно с помощью следующей команды:
Чтобы исключить из поиска адаптеры, имеющие проблемы в IP-конфигурации, можно добавить требование поддержки протокола IP:
Извлечение свойств DHCP
Свойства адаптера, относящиеся к протоколу DHCP, обычно начинаются с , поэтому для отображения только этих свойств можно использовать параметр Property командлета :
Включение поддержки DHCP на каждом адаптере
Чтобы включить поддержку DHCP на всех адаптерах, используйте команду:
Использование оператора фильтра позволяет избежать включения DHCP, когда он уже включен.
Отмена и обновление аренды адреса DHCP для отдельных адаптеров
Экземпляры класса Win32_NetworkAdapterConfiguration содержат методы и . Оба метода используются одинаково. Обычно их применяют лишь при необходимости отмены или обновления аренды адресов для адаптера в отдельной подсети. Простейшим способом фильтрации адаптеров в подсети является выбор лишь тех адаптеров, которые используют шлюз для этой подсети. Например, следующая команда отменяет все аренды адресов DHCP для адаптеров на локальном компьютере, которые арендуют адреса DHCP с 192.168.1.254:
Единственное отличие при обновлении аренды адреса DHCP заключается в вызове метода RenewDHCPLease вместо метода ReleaseDHCPLease:
Примечание
Если эти методы применяются на удаленном компьютере, возможна потеря доступа к удаленной системе, которая подключена через адаптер с отмененной или обновленной арендой.
Отмена и обновление аренды адресов DHCP для всех адаптеров
Отменить или обновить аренду адресов DHCP сразу для всех адаптеров можно с помощью методов Win32_NetworkAdapterConfiguration — и .
Однако эту команду следует применять к классу WMI, а не к отдельному адаптеру, поскольку глобальная отмена и обновление аренды осуществляется на уровне класса, а не отдельного адаптера.
Командлет может вызывать методы класса.
Такой же формат команды используется при вызове метода RenewDHCPLeaseAll:
Форматирование в Windows PowerShell
В Windows PowerShell существует набор командлетов, которые предназначены для форматирования вывода результата работы командлета. Они позволяют пользователю отобразить результат в том виде, в котором ему удобно просматривать данный результат.
- Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
- Format-Table — вывод результата команды в виде таблицы;
- Format-Wide — вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
- Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.
Подробное описание
В этом разделе описываются требования к системе, требования пользователей и требования к ресурсам для установки удаленных подключений и выполнения удаленных команд в PowerShell. В нем также приводятся инструкции по настройке удаленных операций.
Примечание
многие командлеты (включая командлеты,,, и ) получают объекты с удаленных компьютеров с помощью методов Microsoft платформа .NET Framework для получения объектов. Они не используют инфраструктуру удаленного взаимодействия PowerShell. Требования, описанные в этом документе, не применяются к этим командлетам.
Чтобы найти командлеты, которые имеют параметр ComputerName , но не используют удаленное взаимодействие PowerShell, прочтите описание параметра ComputerName командлетов.
4 ответа
Лучший ответ
Этот командлет был доступен с Server 2016 и Win10 1607+. В более ранних ОС вам нужно будет использовать , , или модуль, который использует один из этих методов, или установить WMF 5.1.
Изменить: Написанный MS PFE Шон Кирни создал модуль под названием localaccount. Который построен из кода этого репозитория GitHub, который дублирует функциональность новых модулей через {{X0 } } . Который работает со старыми версиями PowerShell
Обратите внимание, что это не то же самое, что встроенный модуль
1
BenH
3 Июл 2018 в 14:27
Начиная с Windows 10, включая Server 2016 и 2019, платформа управления Windows (которая включает в себя модуль Powershell для управления локальными учетными записями) теперь поставляется «в коробке». См. для получения информации о WMF для других версий Windows.
Это означает, что такие функции, как и доступны без установки или импорта каких-либо модулей.
Обратите внимание, что имена параметров изменились для многих из этих функций из WMF 5.1. Кроме того, пароль теперь должен быть указан в виде безопасной строки, которую можно сгенерировать с помощью функции
Вот пример, чтобы проверить существующего пользователя и создать пользователя, если они не выходят:
3
defines
23 Май 2019 в 14:50
Вам нужно сначала получить файл .PSM1 с другого компьютера.
Если вы добавите его в это расположение в Windows 2008 R2. Следует установить модуль, но если нет, проверьте эту ссылку: https://msdn.microsoft.com/en -us / библиотека / dd878350 ( v = vs.85 ) .aspx
Я не уверен, почему это не на Windows 2008 R2, но модуль LocalAccounts вышел 21 марта 2015 года. Это предшествует Windows 2016 и Windows 10.
Вы всегда можете связаться с парнем, который создал его «Шон П. Кирни»
Надеюсь, это поможет вам. Вот как я это сделал.
Zach Olinske
18 Май 2017 в 09:22
Модуль Microsoft.Powershell.LocalAccounts входит в состав Windows Management Framework (WMF) v5.1, которую можно загрузить по адресу: https://www.microsoft.com/en-us/download/details.aspx?id=54616
После установки вы сможете использовать эти командлеты в своем скрипте. Здесь вы также найдете справку о том, какие модули включены в каждую версию Powershell: https: // msdn .microsoft.com / PowerShell / ссылка / ридми
Удачи!
1
hairowski
23 Май 2017 в 15:24
Установка приложений из репозитория Chocolatey
Давайте посмотрим, как установить приложение (пакет) от Chocolatey.
Вы также можете найти и установить приложения прямо из консоли PowerShell. Например, для просмотра файлов PDF необходимо установить Adobe Acrobat Reader. Поскольку мы не знаем полного имени приложения, нам нужно было получить имя пакета в каталоге для его установки. Выполните поиск в репозитории по ключевому слову «adobe»:
Find-Package -Name *adobe* -Source Chocolatey
Список всех пакетов, содержащих это ключевое слово, появится в консоли. Нам нужен adobereader (это имя пакета из столбца Name, которое нам нужно использовать).
Запустите установку пакета Adobe Reader:
Install-Package -Name adobereader -ProviderName ChocolateyGet
В верхней части окна PowerShell появится ползунок, указывающий, что пакет Adobe Reader загружается. Сразу после завершения загрузки приложение устанавливается в системе.
Другой пример. Допустим, вам нужен набор инструментов SysInternals. Чтобы не загружать его вручную, найдите в Chocolatey пакет SysInternals и установите его.
Find-Package -Name Sysinternals | Install-Package
Поскольку пакет не требует установки, он сохраняется на вашем компьютере и хранится в папке C:\ProgramData\chocolatey\bin\.
Вы можете установить несколько приложений одновременно, используя одну команду:
Find-Package -Name firefox, 7zip, notepadplusplus, putty, dropbox | Install-Package
Что такое CMD
CMD (cmd.exe) – оригинальный интерпретатор командной строки. Он устанавливался по умолчанию во все версии Windows, начиная с Windows NT.
Командная строка – наследие MS-DOS и других систем, появившихся задолго до Windows. Она позволяет взаимодействовать с системой напрямую, устанавливать параметры работы Windows, отдельных служб и приложений, а также выполнять ряд действий, недоступных в оконном интерфейсе. Также в CMD можно вводить простые команды для поиска, перемещения, удаления файлов, запуска скриптов, приложений и т.д.
Вот лишь пара примеров: в CMD можно одной командой tracert отследить путь, который проходят пакеты данных от удаленного сервера до вашего компьютера, а ipconfig покажет все активные подключения. Используя параметры команд, вы можете указать, в каком именно виде представить информацию, как отфильтровать результаты и т.д.
Самый простой способ вызова командной строки – нажать сочетание клавиш Win + R, в появившемся окне ввести cmd. Кроме того, можно открыть файл по адресу C:/Windows/System32, ввести «Командная строка» в окне поиска или найти в меню «Пуск» пункт «Служебные» – «Командная строка» (для Windows 10).
Разработку CMD свернули после выхода Windows 2000. В качестве замены ей представили новый инструмент PowerShell.
Системная утилита quser.exe
Мы можем использовать системную программу quser, которая возвращает имя текущего пользователя и время его входа. Выглядит это так:
Quser так же может работать удаленно используя следующий синтаксис:
Первая проблема этого способа — это то, что quser работает через RPC. Если вы выполняете команду удаленно, а порты не открыты, вы получите ошибки:
- Error 0x000006BA enumerating sessionnames
- Error :The RPC server is unavailable.
Для примера, следующие команды исправят эти проблемы на одном компьютере, но скорее всего вы будете менять настройки через политики
Так же обратите внимание, что правило устанавливается на «Any», а не только «Domain»:. Вторая проблема — если вы будете выполнять команду через Invoke-Command, то могут быть проблемы с кодировками:
Вторая проблема — если вы будете выполнять команду через Invoke-Command, то могут быть проблемы с кодировками:
И третья проблема — у нас возвращается строка, а не объект. Что бы мы могли все эти данные, в дальнейшем, экспортировать (например в CSV), мы должны ее парсить. Это можно сделать так:
Далее нам нужно преобразовать все в специальный массив — PSCustomObject, т.к. только он может быть экспортирован в CSV и представляет собой более удобный вывод:
Метод substring убирает первый символ, так как программа возвращает имя пользователя либо с пробелом начали или символом «>».
Такой скрипт мы можем объединить в один командлет, который сможет работать локально и удаленно:
В функцию добавлено несколько деталей:
- Функция имеет атрибут «ComputerName» в которую можно передать имя компьютера. Т.к. эта переменная является строкой мы не можем использовать одновременно несколько (конвейер передает по одному);
- По умолчанию «ComputerName» выполняет $env:computername, что возвращает имя текущего компьютера;
- Часть команды «quser /server:$ComputerName 2>Null » будет исключать некоторые ошибки, которые связаны с выключенными компьютерами. Иначе — будут выводиться красные сообщения мешающие выводу;
- Добавлено несколько условий, которые различают логические ошибки (например фаервол), физические (компьютер выключен) и условие в случае если все хорошо;
Мы можем вызывать скрипт несколькими приемами:
Отмечу, что в случаях выключенных компьютеров запросы идут очень долго (около 2-3 секунд на компьютер). Способа снизить конкретно таймаут — я не знаю. Один из вариантов ускорить работу — фильтровать вывод с Get-ADComputer исключая отключенные учетные записи компьютеров. Так же можно попробовать использовать параллелизм.
Легче всего такой скрипт запускать на компьютерах пользователей, по событию входа в систему. На примере ниже я экспортирую эти данные в единый, для всех пользователей, файл CSV расположенный в доступности для пользователей:
Сам файл будет выглядеть так:
Отмечу следующие моменты:
- Можно увидеть разницу во времени и датах. У меня одна ОС с американской локализацией, а другая с русской. В принципе у вас таких проблем быть не должно, но можно исправить через Get-Date (парсингом даты);
- Из-за предыдущего пункта у меня бывали проблемы с кодировками, но они самоустранились быстрее, чем я смог предпринять действия.
Просмотр
Информация о пользователях
1. Список пользователей домена:
> Get-ADUser -filter * | Select Name, SamAccountName
2. Простая информация о пользователе:
> Get-ADUser dmosk
* где dmosk — логин пользователя в AD DS, для которого смотрим атрибуты.
3. Как посмотреть все атрибуты пользователя:
> Get-ADUser dmosk -Properties *
4. Список пользователей в определенном организационном юните:
> Get-ADUser -filter * -SearchBase «OU=Пользователи,DC=dmosk,DC=local»
5. Поиск пользователей с определенным значением атрибута:
> Get-ADUser -filter * -Properties title | where { ($_.title -eq «Инженер») } | Select Name
* в данном примере мы выгружаем пользователей, должность которых «Инженер».
6. Исключить из поиска и показа определенных пользователей.
а) Способ 1. Использовать фильтр:
> Get-ADUser -filter { Name -notlike «Мартынов Мартын Мартынович» -and Name -notlike «Макаров Макар Макарович» }
б) Способ 2. С помощью Where и массива:
> $ExcludeUsers = @(«Мартынов Мартын Мартынович», «Макаров Макар Макарович»)
> Get-ADUser -filter * | Where { $ExcludeUsers -notcontains $_.Name }
* обе команды выведут всех пользователей, кроме тех, что перечислены в фильтре.
Выгрузка пользователей в CSV (для просмотра в текстовом формате или Excel)
Выгрузку делаем при помощи командлета Export-csv.
1. Выгрузка всех данных о всех пользователях
Get-ADUser -filter * -Properties * | Export-csv -path C:\Temp\ADUsers.csv
* C:\Temp\ADUsers.csv — путь к выгружаемому файлу.
2. Выгрузка только номеров телефонов и адресов электронной почты для пользователей, находящихся в определенном контейнере:
* обратите внимание, что мы в данной выгрузки используем кодировку UTF-8 и в качестве разделителя знак ;
Список групп пользователя
Get-AdUser dmosk -Properties memberof | Select memberof -expandproperty memberof
* где expandproperty позволяет просмотреть значение коллекций в удобочитаемом виде.