Инструмент LAPS: Local Administrator Password Solution (решение для пароля локального администратора)
Важно: ранее утилита LAPS называлась AdmPwd, но в мае 2015 года Microsoft выпустила официальную версию AdmPwd под названием LAPS, таким образом перенеся её из стороннего скрипта в официально поддерживаемое решение.
Инструмент LAPS (Local Administrator Password Solution) позволяет централизованно контролировать и управлять паролями администратора на всех компьютерах домена, а также сохранять пароль локального администратора и дату его изменения непосредственно в объектах Active Directory типа «Computer».
Функции LAPS основаны на Group Policy Client Side Extension (CSE), то есть клиентском расширении групповой политики и небольшом модуле, который устанавливается на рабочих станциях. Этот инструмент используется для генерации уникального пароля локального администратора (для SID – 500) на каждом компьютере домена. Пароль администратора автоматически меняется через определённый период времени (по умолчанию каждые 30 дней). Значение текущего пароля локального администратора хранится в конфиденциальном атрибуте учётных записей компьютеров в Active Directory, а права доступа для просмотра значения этого атрибута регулируются группами безопасности AD.
Вы можете скачать LAPS и документацию к нему здесь: https://www.microsoft.com/en-us/download/details.aspx?id=46899
Пакет LAPS доступен в двух версиях установочных файлов MSI: для 32-битных (LAPS.x86.msi) и 64-битных (LAPS.x64.msi) систем.
Архитектура LAPS состоит из 2 частей. Модуль управления устанавливается на компьютер администратора, а клиентская часть устанавливается на серверах и ПК, на которых необходимо регулярно менять пароль локального администратора.
Совет: перед развёртыванием LAPS в производственном домене мы рекомендуем вам попробовать его в тестовой среде, поскольку вам, потребуется, как минимум, расширить схему AD, а это необратимо.
Запустите файл утилиты MSI на компьютере администратора, выберите все компоненты для установки (требуется как минимум .Net Framework 4.0. Пакет состоит из двух частей:
- AdmPwd GPO Extension — исполняемый файл LAPS, установленный на клиентских компьютерах, генерирует и сохраняет пароль администратора в AD в соответствии с настроенной политикой;
- LAPS Management Tools (Инструменты управления LAPS):
- Fat client UI – инструмент для просмотра пароля администратора;
- Модуль PowerShell для управления LAPS;
- GPO Editor templates (Шаблоны редактора GPO) – административные шаблоны для редактора GPO.
Настройка LAPS очень проста и не должна вызывать никаких проблем.
Как можно определить, какой контроллер домена обладает ролью FSMO
Определение обладателей ролей мастеров операций средствами GUI
- Выполните вход на контроллер домена под учётной записью, обладающей правами администратора;
- Откройте диалоговое окно «Выполнить» и зарегистрируйте динамическую библиотеку оснастки «Схема Active Directory» при помощи команды regsvr32.exe schmmgmt;
- Затем откройте окно консоли управления MMC и вызовите диалог добавления новой оснастки. В списке оснасток выберите «Схема Active Directory», как показано на следующей иллюстрации:Рис. 1. Добавление оснастки «Схема Active Directory»
- В открытой оснастке «Схема Active Directory» нажмите правой кнопкой мыши на корневом узле оснастки и из контекстного меню выберите команду «Хозяин операций», как показано ниже:Рис. 2. Мастер операций схемы
- Открыть окно оснастки «Active Directory – домены и доверие»;
- Щёлкнуть правой кнопкой мыши на корневом узле оснастки и из контекстного меню выбрать команду «Хозяин операций», как изображено на следующей иллюстрации:Рис. 3. Мастер операций именования доменов
«Active Directory – пользователи и компьютеры»«Хозяева операций»«Хозяева операций»Рис. 4. Хозяева операций для уровня домена
Определение обладателей ролей мастеров операций средствами командной строки
Ntdsutil
- Откройте окно командной строки;
- Выполните команду Ntdsutil;
- Перейдите к маркерам владельца управления ролью NTDS при помощи ввода команды roles;
- На этом шаге вам нужно подключить определённый контроллер домена Active Dirctory. Для этого выполните команду connections;
- В строке «server connections» введите connect to server, укажите в этой же строке имя сервера и нажмите на клавишу «Enter»;
- Перейдите обратно к fsmo management, используя команду quit;
- Выполните команду «Select operation target», предназначенную для выбора сайтов, серверов, доменов, ролей или контекстов именования;
- Теперь вы можете просмотреть список ролей, известных подключённому серверу при помощи команды List roles for connected server, как показано на следующей иллюстрации:Рис. 5. Определение мастеров операций средствами командной строки
Dcdiag/test:Knowsofroleholders /vРис. 6. Определение FSMO-ролей средствами утилиты Dcdiag
Helper Functions
I often forget the full syntax with commands that I do not have to use often. I don’t remember things I can look up most of the time. However, other ways I use to remember things with PowerShell, is to build functions that remember for me. So I built out three commands to share with you for the above process. I hope you find these useful for those one-time processes like building a secure password file a script being deployed in your environment. The functions contain help information but I will provide a full example that shows how they can be used below.
You can download the script here.
1 |
New-KeyFile-KeyFile.\MyKey.key-KeySize16 # (2) Create our password file New-PasswordFile-PwdFile.\MyPwd.txt-Key(Get-Content.\MyKey.key) # (3) Pull in the password to use $pwd=Get-SecurePassword-PwdFile.\MyPwd.txt-KeyFile.\MyKey.key $mycred=New-ObjectSystem.Management.Automation.PSCredential(«MyUserName»,$pwd) $mycred.GetNetworkCredential().Password
|
Разрешение скачанного изображения
PowerShell скрипт скачивает изображение из Интернета и отображает ее разрешение
Function Get-Image{ begin{::LoadWithPartialName("System.Drawing") |Out-Null} process{ $fi=$_ if( $fi.Exists){ $img = ::FromFile($_) $img.Clone() $img.Dispose() }else{Write-Host "File not found: $_" -fore yellow } } end{} } #Скачиваем файл $webclient = New-Object System.Net.WebClient $url = "http://cs418720.userapi.com/v418720852/20d0/DiSlb-_mVBg.jpg" $file = "D:\ImageSize.jpg" $webclient.DownloadFile($url,$file) #Получаем ширину и высоту изображения $image = $file | Get-Image $Width = $image.Width $Height = $image.Height #Вывод на экран write-output “Width:$Width, Height:$Height"
Как запустить скрипт PowerShell по расписанию
Очень часто на серверах появляется необходимость по запуску скрипта PowerShell по расписанию или по определенному событию, которое появляется в логах Windows, в таких ситуациях нам на помощь приходит планировщик заданий.
Я приведу пример, когда мне нужно было отслеживать события ID 20291 или ID 11707. И так откройте окно выполнить и введите в нем:
taskschd.msc
Далее вы щелкаете по библиотеке правым кликом и из контекстного меню выбираете пункт «Создать задачу».
Задаете имя задания, советую запускать скрипт PowerShell от имени учетной записи «СИСТЕМА (SYSTEM)», это будет гарантировать, что задание точно отработает.
Поставьте галку «Выполнять с наивысшими правами»
Переходим на вкладку тригеры и создаем новый. В параметрах выберите «При событии»
Далее задаем:
- Журнал — Приложение
- Источник — MsiInstaller
- Код события — 11707
Тут тригер будет срабатывать, когда в логах появится событие 11707.
В действие оставляем «Запуск программы». В программе указываем powershell, а в параметрах задайте путь до самого скрипта, через параметр -File c:\scripts\id11707.ps1.
В итоге у меня вышло вот так.
Как видим, мое задание по запуску скрипта PowerShell успешно создано и отработало в планировщике Windows.
Why Should I Encrypt Passwords?
Let’s say you need to routinely run a script against a group of non-domain joined servers, or you’d like to allow users to run a specific elevated task but don’t want to give them the elevated credentials. There are a few solutions around this, but there is a proper balance between security and accessibility and it takes some discerning on if a solution is secure enough to be accepted. Luckily with PowerShell, there are a few tricks we can use to hide our passwords, and while they are not 100% secure, it will still reduce the risk by a significant amount depending on the method.
By now it should be common sense that you don’t “hard code” passwords into any sort of script like below:
$password = “MYPASSWORD”
Anyone can easily just open up your script file and read the password. Instead here are 3 more secure ways of passing credentials through to your PowerShell scripts
Автоматическая блокировка, разблокировка и разблокировка зашифрованного диска
Зашифрованный диск должен быть разблокированным, прежде чем его можно будет использовать , для выполнения этой функции используются следующие командлеты.
Lock-BitLocker, Unlock-BitLocker, Enable-BitLockerAutoUnlock и Disable-BitLockerAutoUnlock
За исключением Unlock-BitLocker, командлеты очень просты в использовании, потому что они запрашивают у нас только «MountPoint», то есть диск, и если мы хотим принудительно выполнить задачу, даже если устройство используется процессом .
Рассмотрим подробнее параметры командлета Unlock-BiLocker. Unlock-BitLocker позволяет нам разблокировать диск, используя один из следующих предохранителей: пароль, ключ восстановления и пароль восстановления (мы не увидим параметры активного каталога).
Чтобы разблокировать диск с помощью средства защиты паролем, щелкните вкладку параметра OnlyPasswordParameterSet.
Мы не можем ввести параметр пароля на клавиатуре, как в предыдущих случаях, мы должны ввести его через специальную строку PowerShell, называемую защищенной строкой, чтобы преобразовать простой текстовый пароль в безопасный пароль, мы должны определить переменную, которую мы можем вызывать как угодно хотите и назначьте командлет ConvertTo-SecureString, как мы видим в следующей строке.
123456.abC — это пароль, который мы используем при добавлении средства защиты паролем на диск; Это должен быть пароль, содержащий минимум 8 символов, прописные и строчные буквы, цифры и специальные символы.
Чтобы разблокировать диск с помощью ключа восстановления пароля, вы можете необходимо указать параметр «MountPoint», а также путь и имя файла, содержащего ключ восстановления пароля.
Чтобы разблокировать диск с помощью пароля восстановления , нам нужно использовать пароль, который был автоматически сгенерирован в результате выполнения командлета Add-BitLockerKeyProtector и который мы должны были сохранить в надежном месте:
Написание собственного модуля PowerShell
Усложняем ситуацию еще раз.
Мы стали очень хорошими PowerShell-программистами, написали сотни полезных функций, для удобства использования разделили их на десятки .ps1-файлов, и в нужные нам скрипты дотсорсим нужные файлы. А если у нас десятки файлов для дотсорсинга и их надо указать в сотне скриптов? А если мы несколько из них переименовали? Очевидно, что придется менять путь ко всем файлам во всех скриптах — это страшно неудобно.
Поэтому.
Независимо от того, сколько функций для повторного использования вы написали, пусть даже одну, сразу оформляйте ее в отдельный модуль. Написание собственных модулей — это самый простой, лучший, современный и грамотный метод повторного использования кода в PowerShell.
Диспетчер учетных данных Windows теряет учетные данные после перезагрузки
Если Credential Manager теряет учетные данные после перезагрузки на компьютерах с Windows 11/10, выполните следующие действия:
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
- Перезапустите службу диспетчера учетных данных.
- Воссоздать хранилище
- Сканирование с рекламным/антивредоносным ПО
- Запустите сканирование SFC и DISM.
Чтобы узнать больше об этих вышеупомянутых шагах, продолжайте читать.
1]Перезапустите службу диспетчера учетных данных.
Диспетчер учетных данных Windows работает в фоновом режиме из-за службы диспетчера учетных данных. Если служба отсутствует, Credential Manager не будет работать должным образом. Поэтому вам нужно проверить, работает ли служба или нет.
С другой стороны, если в этой службе возникнут внутренние конфликты, вы больше не сможете использовать Credential Manager. Самый простой способ решить эту проблему — перезапустить службу. Если вы не знаете, выполните следующие действия, чтобы перезапустить службу Credential Manager:
- Найдите службы в поле поиска на панели задач.
- Нажмите на отдельный результат поиска.
- Найдите службу диспетчера учетных данных.
- Дважды щелкните по нему.
- Нажмите кнопку «Стоп».
- Нажмите кнопку «Пуск».
Затем перезагрузите компьютер и проверьте, решает ли он проблему или нет.
Чтение: диспетчер учетных данных: система не может найти указанный путь, ошибка 0x80070003
2]Воссоздайте хранилище
Диспетчер учетных данных Windows использует хранилище для сохранения или хранения всех данных. Этот Свод не что иное, как папка, помещенная в Данные программы каталог на системном диске. Если эта папка повреждена из-за вредоносного или рекламного ПО или чего-либо еще, вы можете столкнуться с той же проблемой, что и упомянутая выше.
Именно поэтому вы можете создать эту папку с нуля, удалив из нее все старые данные. Как уже говорилось, это папка, и вы можете удалить эту папку, как и любую другую обычную папку.
Поэтому выполните следующие действия, чтобы воссоздать хранилище в Windows 11/10:
- Нажмите Win + R, чтобы открыть окно «Выполнить».
- Введите %ProgramData%\Microsoft и нажмите кнопку Enter.
- Щелкните правой кнопкой мыши хранилище и выберите «Удалить».
- Перезагрузите компьютер и откройте диспетчер учетных данных.
- Перейдите на вкладку «Учетные данные Windows».
- Нажмите «Добавить учетные данные Windows».
- Введите сетевой адрес, имя пользователя и пароль.
- Нажмите кнопку ОК.
После этого проверьте, была ли проблема решена или нет.
Чтение: ошибка диспетчера учетных данных 0x80090345
3]Сканирование с помощью рекламного ПО/защиты от вредоносных программ
Иногда эту проблему на вашем компьютере могут вызывать вредоносные и рекламные программы. Если эти вещи повредят системные файлы, связанные с диспетчером учетных данных, вы не сможете правильно использовать эту утилиту. Вот почему рекомендуется сканировать компьютер с помощью надежного инструмента для удаления вредоносных и рекламных программ.
Чтение: Диспетчер учетных данных: ошибка доступа запрещена
4]Запустите сканирование SFC и DISM
Чтобы исключить возможность повреждения файла, вы можете запустить сканирование SystemFile Checker и DISM Tool.
Вы можете загрузить наш бесплатный инструмент FixWin для восстановления Windows, чтобы выполнить их одним щелчком мыши!
Почему Windows не запоминает мои учетные данные?
Могут быть разные причины, по которым диспетчер учетных данных Windows не запоминает ваши учетные данные. Например, если служба диспетчера учетных данных не запущена, вы не обнаружите, что утилита работает должным образом. Вторая причина заключается в том, что если хранилище повреждено, может возникнуть та же проблема.
Читать: Диспетчер учетных данных не отображается, не открывается или не работает должным образом
Почему я не вижу свои пароли в Credential Manager?
Если вы не видите свои пароли в диспетчере учетных данных, вам нужно переключаться между Веб-учетные данные а также Учетные данные Windows. Если вы хотите найти сетевые или программные пароли, вам нужно зайти на Учетные данные Windows раздел. С другой стороны, если вы хотите найти пароли веб-сайтов, вы можете получить их в Веб-учетные данные раздел.
Чтение: Диспетчер учетных данных: Хост пользовательского интерфейса не отвечает Ошибка RDP.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Использование зашифрованных строк для учетных данных PowerShell
Возможность выполнить командлет от имени другого пользователя может в некоторых ситуациях быть очень полезной возможностью. Например, Red Team (хакеры, которые специализируются исключительно на взломе и компрометации компьютеров и мобильных устройств), которым удалось получить учетные данные скомпрометированного пользователя, могут попытаться выполнить команды на удаленной машине от имени этого пользователя, используя украденные учетные данные.
Командлеты, которые определяют параметр Credential, позволяют нам указать учетные данные, под которыми должен запускаться командлет. Значение, передаваемое параметру Credential, должно быть объектом PSCredential. И для того, чтобы мы могли создать объект PSCredential, нам нужны имя пользователя и пароль в виде защищенной строки, что означает, что нам нужно будет зашифровать пароль.
Чтобы надежно зашифровать строку, не рекомендуется указывать пароль в виде открытого текста в командной строке в качестве аргументов. Это связано с тем, что ведение журнала PowerShell или любое ведение журнала командной строки, которое включено, может регистрировать эти учетные данные в виде открытого текста, что не есть хорошо!
Поэтому вместо этого пароль следует считывать со стандартного потока stdn и сохранять в переменной. Командлет Read-Host, который позволяет считывать данные со стандартного потока, имеет параметр AsSecureString, который преобразует для нас данные, считанные со стандартного потока, в System.Security.SecureString.
С помощью следующего кода PowerShell можно считывать данные со стандартного ввода и сохранять их в переменной в виде защищенной строки:
1 | $password=Read-Host-AsSecureString |
Затем мы можем взять эту безопасную строку и создать требуемый объект PSCredential:
1 | $Cred=New-ObjectSystem.Management.Automation.PSCredential(«domain\user»,$password) |
Теперь мы можем использовать этот объект PSCredential с командлетами, позволяющими указать параметр Credential. Вот как я выполняю командлет Invoke-Command на удаленной машине с WINRM от имени другого пользователя, используя созданный нами PSCredential:
1 | Invoke-Command-Credential$Cred-ScriptBlock{whoami}-ComputerName10.10.1.11 |
РЕКОМЕНДУЕМ:
- Сканер портов на PowerShell
- Захват трафика с помощью PowerShell
Другие вопросы по пользованию
У многих возникает вопрос, как узнать версию PowerShell? Для этого выполните следующее:
- Откройте приложение.
- Введите $PSVersionTable.
- Если это ни к чему не привело, значит, у вас версия 1.0 — для неё есть команда $host.version.
- В ином случае появится подробная информация о том, какая версия приложения установлена на ПК.
Ещё один вопрос, на который стоит дать ответ — как удалить PowerShell? Для этого потребуются такие действия:
- Зайдите через Панель управления в меню установки и удаления программ.
- Найдите ветку Microsoft Windows
- Удалите обновление для компонента WindowsPowerShell (TM), следуйте инструкциям системы.
Теперь вы знаете всё о том, как писать и запускать скрипты PowerShell, сможете пользоваться такой командной строкой для многих операций в системе. Дополнительно вы всегда имеете возможность узнать версию этого продукта и даже частично удалить его — из-за того, что он установлен вместе с системными компонентами, полностью сделать это всё равно не получится. Посоветуем только быть аккуратным при выполнении всех подобных действий, чтобы не навредить компьютеру в целом.
Wrap-Up
Each method has it’s own pros and cons. However, keep in mind that all of these ways are not 100% foolproof. So, I would not advise doing this with a domain administrator account. Just enough access (JEA) is the way to do it, so I would recommend creating an account with just enough access to do what it needs to do.
How about you? What interesting ways have you used to get around the issue of storing credentials in plaintext? Let us know in the comments section below!
More articles about how MSPs can make the most out of PowerShell in their operations:
Was this helpful?
Do you want to become a member of Altaro Dojo?
Создание объекта учетных данных
Объект PSCredential представляет набор учетных данных для безопасности, таких как имя пользователя и пароль. Объект можно передать в качестве параметра функции, которая выполняется от имени учетной записи пользователя в таком объекте учетных данных. Существует несколько способов создания объекта учетных данных. Первый способ заключается в использовании командлета PowerShell . Если запустить его без параметров, отобразится запрос на ввод имени пользователя и пароля. Или же вы можете вызвать командлет с необязательными параметрами.
Чтобы предварительно указать имя домена и имя пользователя, вы можете использовать параметр Credential или UserName. Если используется параметр UserName, вам также необходимо указать значение Message. В блоке кода ниже демонстрируется использование этого командлета. Вы также можете сохранить объект учетных данных в переменной для многократного использования учетных данных. В примере ниже объект учетных данных сохраняется в переменной .
В некоторых случая вы не сможете воспользоваться интерактивным методом для создания объектов учетных данных, который продемонстрирован в предыдущем примере. Большинство средств автоматизации поддерживают только неинтерактивный метод. Чтобы создать учетные данные без участия пользователя, сначала создайте защищенную строку с паролем. Затем передайте защищенную строку и имя пользователя в метод .
Используйте следующую команду, чтобы создать защищенную строку с паролем:
Параметры AsPlainText и Force являются обязательными. Без этих параметров вы получите предупреждение о том, что вам не следует передавать обычный текст в защищенную строку. PowerShell возвращает это предупреждение, так как пароль в формате обычного текста будет записан в разные журналы. После создания защищенной строки вам нужно передать ее в метод для создания объекта учетных данных. В следующем примере переменная содержит защищенную строку с объектом учетных данных.
Теперь, когда вы знаете, как создать объект учетных данных, вы можете добавить параметры учетных данных в свои функции PowerShell.
Create your encrypted password file
In the following method we will use our login credential as password.
First you need a standalone .ps1 script to generate your password file with Encrypted string. Here we are encrypting our password. The following code will achieve this:
#### Set and encrypt our own password to file using default ConvertFrom-SecureString method (get-credential).password | ConvertFrom-SecureString | set-content "C:\Vault\Personal\Encrypted.txt"
After executing above script, you will get a prompt for the password, then input your credentials that you want to save. In our example an encrypted password file will be saved to «C:\Vault\Personal\Encrypted.txt».
An alternative method, interactive, is the following: let’s say we need to get the password by asking it as input, then the below script will prompt for input via the Read-Host command using the AsSecureString parameter, which will obfuscate your input and return a secure string as shown below:
$securePassword = Read-host -AsSecureString | ConvertFrom-SecureString $securePassword | Out-File -FilePath "C:\Vault\Personal\Encrypted.txt"
After execution of the above script code, we can look at that variable’s value, by issuing $securePassword in the same Powershell IDE console, for example, and it will be clear that the input has been encrypted. Then the encrypted password will be save to the text file.
Использование функций
Самый простой вариант.
Предположим, что мы пишем большой скрипт, в котором нам по разным причинам необходимо много раз запускать расширение разделов на разных серверах. Логичнее всего выделить весь этот скрипт в отдельную функцию в этом же .ps1-файле и в дальнейшем просто вызывать ее по необходимости. Помимо этого мы расширим функционал скрипта, позволив администратору явно указывать имя удаленного сервера и букву расширяемого раздела. Имя и букву будем передавать с помощью параметров.
Функция и ее вызов будут выглядеть так:
Здесь для функции ExtendDisk-Remotely заданы два параметра:
- Обязательный ComputerName;
- Необязательный DiskDrive. Есть не задать имя диска явным образом, скрипт будет работать с диском C:
Также можно отметить, что передача локальной переменной в удаленную сессию осуществляется с помощью ключевого слова using.
Сохраним скрипт под именем Example-01-Functions.ps1 и запустим:
Видим, что наша функция успешно вызвалась и расширила раздел C: на сервере LAB-FS1.
Вопросы безопасности при использовании PowerShell для настройки Always Encrypted
Так как основной задачей функции постоянного шифрования является обеспечение целостности зашифрованных конфиденциальных данных даже в случае нарушения безопасности системы базы данных, выполнение скрипта PowerShell, обрабатывающего ключи или конфиденциальные данные на сервере SQL Server, может снизить или вообще отменить эффект действия функции. Дополнительные рекомендации по безопасности см. в разделе (Вопросы безопасности для управления ключами).
PowerShell можно использовать для управления ключами Always Encrypted с разделением ролей и без разделения ролей, чтобы контролировать пользователей, имеющих доступ к фактическим ключам шифрования в хранилище ключей и доступ к базе данных.
Дополнительные рекомендации по безопасности см. в разделе (Вопросы безопасности для управления ключами).
Creating a Key File and Password File
With PowerShell, we can generate a 256-bit AES encryption key and use that key to access our password file. First, we input the following syntax to create our key file. You could take this key and put it on a network share and only give specific users access to the key along with the password file. But, in this example we will just save it to C:\passwords with our password file:
$Key = New-Object Byte[] 32 ::Create().GetBytes($Key) $Key | out-file C:\passwords\aes.key
If we open the aes.key in notepad we can see our key is now generated:
Now, we create a password file just like above, however, we use the -key parameter to specify that we want to use a key and input the location of the key file. Then we create the password file. In this example we’ll output the password file to our C:\passwords directory:
(get-credential).Password | ConvertFrom-SecureString -key (get-content C:\passwords\aes.key) | set-content "C:\Passwords\password.txt"
Now that we have our password file and our key file. We can simply recall our password from any script by including the following syntax in the script:
$password = Get-Content C:\Passwords\password.txt | ConvertTo-SecureString -Key (Get-Content C:\Passwords\aes.key) $credential = New-Object System.Management.Automation.PsCredential("Luke",$password)
When we look at the data inside the $credential variable we can see that we have the username and password now.
PowerShell в сравнении с bat
Иногда задачу можно решить как старым дедовским методом, так и при помощи PowerShell. Я рекомендую не лениться и использовать PS, хотя бы просто потому, что так ты его быстрее изучишь и сможешь применять в более сложных ситуациях. К тому же ты постепeнно оценишь его синтаксис — более элегантный и консистентный. Вот несколько примеров, как вещи делались раньше и как их можно сделать при помощи PowerShell.
Следующая командная строка перезагрузит компьютер с задержкой в десять секунд:
На PowerShell это будет выглядеть вот так:
Вот так через bat можно перезагрузить службу dnscache (или любую другую):
В PowerShell это будет так:
Мап диска в bat:
И в PowerShell:
Да, иногда приходится печатать чуть больше букв, но читаются команды PS гораздо лучше. И это не говоря уже про разные новые возможности.
Что такое PowerShell и чем он хорош
Пользователи UNIX и Linux, а с какого-то момента и macOS привыкли к тому, что под рукой всегда есть Bash — немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron — и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.
Возвращаясь в Windows (а без этого иногда никак), понимаешь, что скрипты .bat хоть и хороши, но спасают не всегда: очень уж ограниченны их возможности. И если ты до сих пор считал, что PowerShell — это неведомая штуковина, ради которой нужно что-то там поднимать и настраивать, то не спеши с выводами — он, если разобраться, совсем неплох.
Windows PowerShell — это расширяемое средство автоматизации с открытыми исходниками, которое состоит из оболочки (командной строки) и скриптового языка. Впервые он был показан в 2003 году (тогда он назывался Monad). PowerShell 2.0 вышел в составе Windows 7 и Windows Server 2008 R2 и с тех пор присутствует в Windows в качестве стандартного компонента. Его даже включили в Windows XP SP3. PowerShell построен на основе .NET Framework и интегрирован с ним. PowerShell может обращаться к COM, WMI и ADSI, а также, конечно же, исполняет консольные команды.
В общем, «пошик» имеет крепкие связи с продуктами Microsoft, будь то Active Directory или почтовый сервер Exchange. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдавать команды.
Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей — она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.
Информация об обновлениях WSUS
Этот Powershell скрипт получает информацию со WSUS и показывает:
- количество обновлений по заданных критериям
- краткую сводную информацию об обновлениях
- имена обновлений
- отображает список обновлений по заданным критериям для каждого компьютера по отдельности
$WSUSServer = 'SERVER_NAME' #WSUS-сервер $PortNumber = 8530 #http порт wsus ::LoadWithPartialName("Microsoft.UpdateServices.Administration") $wsus = ::getUpdateServer($WSUSServer,$False,$PortNumber) $UpdateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope #$UpdateScope.ApprovedStates = 'NotApproved' #указываем критерии апдейтов: не одобренные #$UpdateScope.IncludedInstallationStates = 'NotInstalled' #указываем критерии апдейтов: не проинсталированные $UpdateScope.IncludedInstallationStates = 'Installed' #указываем критерии апдейтов: проинсталированные $UpdateScope #просматриваем сформированные критерии апдейтов $wsus.GetUpdateCount($updatescope) #получаем и выводим количество апдейтов $wsus.GetUpdateStatus($updatescope,$False) #получаем и выводим краткую информацию об обновлениях $wsus.GetUpdates($updatescope).Title #выводим имена апдейтов $computers = $wsus.GetComputerTargets() #все компьютеры со wsus ForEach ($computer in $computers){ #для каждого компьютера $Computername = $computer.fulldomainname #получаем его имя $updates = $computer.GetUpdateInstallationInfoPerUpdate($updateScope) #получаем апдейты по указаным критериям $UpdateCount = $updates.Count #количество апдейтов для текущего компьютера write-host $Computername $UpdateCount #выводим имя компьютера и количество апдейтов $i = 0 ForEach ($update in $updates) { #для каждого апдейта выводим подробную информацию $i++ $update_info = $update.GetUpdate() #запрашиваем инфо об апдейте $UpdateTitle = $update_info.Title #имя апдейта $IsApproved = $update_info.IsApproved #является ли он одобренным write-host $Computername $i "of" $UpdateCount $IsApproved $UpdateTitle } }
Как открыть PowerShell?
Это можно сделать несколькими следующими способами:
- Через Пуск — вы найдёте приложение в общем списке компонентов под буквой W.
- При помощи поиска в Панели задач — откройте её, и введите слово PowerShell для поиска.
- Используя меню «Выполнить» — запустите его через комбинацию Win+R и напишите название утилиты, после чего она будет найдена в системе.
- В коммандере задайте действие PowerShell — но, вы должны знать, что будете работать с приложением через уже запущенную строку, а не в отдельном окне.
- В параметрах Windows выберите «Свойства панели задач» и меню «Пуск». Во вкладке «Навигация» поставьте флажок на строке «Заменить командную строку оболочкой PowerShell…». Теперь вы сможете включать утилиту комбинацией Win+X.