powershell (ru) - B-blog.info
19Jan
Written by Super User.
Adding computers to which users can logon in Active Directory - task that administrators must perform quite ofter. Moreover, sometimes you must provide this privilege to all users in domain.
Here is the powershell script that will help you in this (it does not modify users that have rights to log on to ANY computers):
19Jan
Written by Super User.
Добавление имен компьютеров, на которые пользователям разрешен вход - достаточно постоянная задача, причем частенько появляется необходимость добавить компьютер сразу всем пользователям домена.
Вот скрипт, который выполняет описанную задачу (причем скрипт не трогает пользователей, которым разрешен вход на все компьютеры):
23Jan
Written by Super User.
Вот задачка...
Есть несколько доменов AD с именами типа domain1.domain.local, domain2.domain.local. В одном из доменов есть группа "Group", членами которой являются пользователи из других доменов, а также группы - тоже из разных доменов.
Надо посчитать, сколько пользователей из каждого домена находится в группе.
23Jan
Written by Super User.
Здравствуйте!
Продолжаю публикации скриптов. Сегодняшний наш пациент был разработан в процессе создания биллинга звонков. У каждого юзера в Active Direcotry есть поле, в котором прописан его внутренний номер телефона. Этот же номер фигурирует в биллинге, но нам конечно хочется видеть не что-то вроде "1316", а "Иванов Владислав Александрович".
В сети полно примеров и скриптов, позволяющих достать пользователей из AD в csv-файл. По логике, мы можем потом взять этот csv и импортировать в MS SQL с помощью SSIS-скриптов. Однако это мне это не понравилось, т.к. на выходе у нас получается аж два скрипта, работающих на разных технологиях + один промежуточный файл. И это только для одного домена AD. А у меня их 14.
23Jan
Written by Super User.
Как и любые скрипты, необходимо иметь возможность запускать Powershell-сценарии не вручную, а по расписанию.
Например, в заметках, указанных внизу статьи (по Lync Server), так и необходимо делать.
Естественно, на помощь приходит планировщик задач Windows, однако как все-таки заставить запуститься файл *.ps1?
23Jan
Written by Super User.
Обычно я генерирую пароли для пользователей, закрывая глаза и нажимая кнопки на клавиатуре. Сейчас уже это делать необязательно - генерировать можно скриптом на Powershell:
23Jan
Written by Super User.
Usually, I generate passwords for my users by closing my eyes and chaotically pressing the buttons on keyboard. There is a new way now - I can generate it in Powershell easily:
23Jan
Written by Super User.
Как упростить и сделать более наглядным взаимодействие с правами доступа на файлы и их наследованием? Воспользуйтесь популярным и полезным скриптом File System Security PowerShell Module.
26Jan
Written by Super User.
While working with address book in Lync Server, sometimes its very important and convinient to know, what exactly Lync Server have in its database regarding address book. You will need this, for example, when you working with Active Directory attributes that will be shown in contact card in Lync client.
28Jan
Written by Super User.
Like any other scripts, you will need to run Powershell-scripts not in manual mode, but as a scheduled task.
For example, mass importing and actualizing Lync Server users database you will need to run every one-two-three hours.
Of course, Task Scheduler in Windows should help in this issue, but how to run *.ps1 file?
28Jan
Written by Super User.
Today's my script was written while i've been developing billing-system for Asterisk.
Every user in Active Directory has an attribute with phone number. We will take this attribute and some others into MS SQL Server to use in billing.
There are tons of scripts that can export AD users into scv-file, but none that will export users directly to SQL database. Of course we can export users into scv and then take this csv and import it into SQL database with the help of SSIS-scripts. But this method will generate two scripts, and if you have more than 5-10-15 AD domains, you will have 10-20-30 scripts, which is likely will lead to errors.
28Jan
Written by Super User.
При работе с массивами данных в Powershell бывает необходимо выгрузить данные в таблицу, чтобы потом открыть ее в Excel. Напрямую программировать выгрузку массива в файл Excel не рекомендуется, т.к. для этого необходимо хотя бы иметь установленный Excel на машине, где запускается скрипт. Кроме того, такой код будет работать достаточно медленно. Лучше всего выгружать массив в csv-файл.
28Jan
Written by Super User.
In your work in big arrays of data in Powershell, very often you will need to export data to table and after open this table in Excel. Its not recommended to code direct export from array into Excel-file, because you will need Excel installed on computer where you run the script. Also, such a code will run slowly.
So, I've decided to export data to csv-file.
05May
Written by Super User.
You can expect the following errors while running Get-MailBox, New-MoveRequest and many other commanlets in Powershell in EMS (Exchange Management Shell):
The requested search root domain is different from the scope root domain.
or
The requested search root domain.local/Users’ is not within the scope of this operation. Cannot perform searches outside the scope ‘child.domain.local’.
05May
Written by Super User.
Вы можете столкнуться со следующими ошибками при выполнении командлетов Get-MailBox, New-MoveRequest и других в Powershell в EMS (Exchange Management Shell):
The requested search root domain is different from the scope root domain.
или
The requested search root domain.local/Users’ is not within the scope of this operation. Cannot perform searches outside the scope ‘child.domain.local’.
08May
Written by Super User.
В Exchange бывают такие случаи, когда проиходят ошибки при перемещении ящиков между базами данных. И тогда у вас может быть в базах, к примеру, два ящика, которые принадлежат одному и тому же пользователю, но естественно, к учетной записи Active Directory подключен только один из этих ящиков.
Причем тот ящик, который не используется, не помечен ни как Disconnected, ни как SoftDeleted.
Такие ящики в баще данных называются ghost-mailbox (ящиками-призраками).
08May
Written by Super User.
In Exchange you can encounter issues when you move mailbox between databases. And after this issues you can have, for example, 2 (or several) mailboxes in your databases which belongs to a single user. And of course, only one mailbox from them linked to Active Directory user account.
And one more thing - mailboxes that are not used, NOT marked as Disconnectedor SoftDeleted.
These mailbox are known as ghost-mailboxes.
13May
Written by Super User.
Sometimes you will need to get a list of users (delegates) that have access to other mailboxes (delegated mailboxes).
Exchange 2010/2013 provides Get-MailboxPermission cmdlet that can query mailboxes for permissions.
You can extend use of cmdlet to all mailboxes:
13May
Written by Super User.
Иногда при аудитах Exchange нужно получить список пользователей, которые имеют доступ к другим почтовым ящикам. Или наоборот - получить список почтовых ящиков, к которым имеют доступ другие люди.
В Exchange 2010/2013 есть специальный командлет Get-MailboxPermission который умеет опрашивать список ACL (Access Control List) почтовых ящиков.
Можно расширить область применения этого командлета на все почтовые ящики в организации:
13May
Written by Super User.
Когда у вас есть сразу несколько серверов WSUS с центральным корневым, бывает очень проблематично получать отчеты об обновлениях рабочих станций.
Мне был нужен скрипт, который покажет, что на каких-то компьютерах есть не установленные одобренные обновления. Такой отчет есть в консоли WSUS, он называется Computer Tabular Status for Approved Updates.
Но это достаточно трудоемкая задача, когда у вас 5-10-15 серверов.
13May
Written by Super User.
When you have many WSUS-servers with central server in your organization, it might be very difficult of getting reports from computers.
Once I was needed in script to show me, at which computers I dont have approved updates installed. There is a report in WSUS console that can give me such info (it called Computer Tabular Status for Approved Updates), but I was not able to go to every WSUS-server and run this report. Its a very weird task when you have 5-10-15 of WSUS-servers.
22May
Written by Super User.
When you downloading some modules for Powershell, you will need to install that modules. Powershell module - is a folder. You will copy module folder to modules repository (also a folder).
How to find modules repository folder?
PS H:\> $env:PSModulePath -split ';'
C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
In other system:
22May
Written by Super User.
В сети много полезных модулей для Powershell. Как их установить? Модуль в Powershell - это папка с файлами. Ее нужно скопировать в другую папку для модулей.
Как найти, куда скопировать модуль?
PS H:\> $env:PSModulePath -split ';'
C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
А вот в другой системе:
22May
Written by Super User.
В одной моей задаче надо было написать скрипт для отправки SMS-сообщений. У нас уже был настроен сервер для отправки SMS на Linux. Оставалось только научиться отправлять команды в Linux через SSH.
Первоначально я пытался использовать модуль SSH-Session, но в нем были какие-то ошибки при отправке команд. Поэтому я остановился на Posh-SSH.
Устанавливаем модуль:
25May
Written by Super User.
Иногда при запуске скриптов в Powershell бывает необходимо запускать какой-нибудь командлет под чужой учетной запиью, служебной например. Обычно в таких случаях создается специальный объект PSCredential при помощи несложной конструкции $user = Get-Credential, и пользоваться далее этим объектом в последующих командлетах. При нечастом запуске это может и не быть проблемой, но когда надо скрипт запускать несколько раз в день, то неэффективно вводить логин-пароль.
Лучшим способом было бы сохранить данные учетной записи в зашифрованном виде где-нибудь на диске рядом с файлом скрипта. Или, как вариант, в самом скрипте.
21Aug
Written by Super User.
Представим, что у вас есть массив строк (адресов электронной почты):
one-domain.ru
two-domain.ru
three-domain.com
four-domain.com
five-domain-company.com
Стоит задача - найти среди этого массива адреса в домене domain.ru.
21Aug
Written by Super User.
Imagine that you have array of strings (email addresses for example):
one-domain.ru
two-domain.ru
three-domain.com
four-domain.com
five-domain-company.com
You have a task - find email addresses in domain domain.ru among these strings.
14Oct
Written by Super User.
Задача ясна из названия - надо удалить старые файлы из какой-нибудь папки. В жизни полно ситуаций, когда надо выполнять такую процедуру. Например - удаление старых бэкапов.
14Oct
Written by Super User.
Task is clear from title - we need to delete old files from some directory. There are many cases in life, when you will need to perform such operation. For example - delete old backups.
04Dec
Written by Super User.
Не секрет, что при выполнении бэкапа Veeam Backup & Replication иногда "забывает" удалить созданные им снапшоты. Это приводит к тому, что вся виртуальная машина начинает работать полностью на снапшоте все время. Это ресурсоемкая операция, которая существенно снижает производительность виртуальной машины.
Кроме этого, администраторы сами могут создать снапшот и забыть про него. У нас в компании был случай, когда виртуальный сервер пол-года (!!!!!) работать на снапшоте.
К счастью, VmWare предоставляет модуль для Powershell PowerCLI, с помощью которого можно найти все такие снапшоты.
16Feb
Written by Super User.
При апгрейде контроллеров домена или их удалении\добавлении, всегда появляется необходимость изменить DNS-сервера в настройках сетевых интерфейсов. Там, где сетевые настройки выдаются через DHCP - проблем нет. А там, где все настроено вручную, придется заходить на каждый сервер и менять руками. Это долго и неудобно.
23Mar
Written by Super User.
Иногда бывает нужно отпарсить какой-нибудь сайт или большую веб-страницу. Google предлагает множество программ и целых сложных комплексов для решения этой задачи, но я хочу показать, как это достаточно просто можно делать в Powershell.
В Powershell есть специальный коммандлет Invoke-WebRequest, который собственно и разбирает HTML-страницу на тэги и содержимое. На выходе этот коммандлет выдает объект страницы с полем ParsedHtml. К этому полю можно применять методы по выборке нужных данных.
Допустим, что вам нужно выбрать все ссылки на странице. Вот как это работает.
30Mar
Written by Super User.
В бесплатной версии Microsoft SQL Server - Express - нет возможности настроить резервное копирование баз данных по расписанию. Однако вы можете настроить бэкап с помощью Powershell-скриптов и планировщика задач Windows.
Ниже - пример скрипта, как это делаю я. Скрипт не удаляет старые бэкапы. Но почитайте мою статью Удаление старых файлов и папок на Powershell, она вам поможет. И еще - Запускаем Powershell-скрипты в планировщике задач.
Обратите внимание на выделенные строки - там надо прописать ваш путь к бэкапам и инстанс SQL-сервера.
05Jul
Written by Super User.
При тестировании отказоустойчивой конфигурации Microsoft SQL Server 2012 (подробнее: Пошаговое развертывание AlwaysOn - MS SQL 2012) мне нужно было сгенерировать массовую запись данных в базу.
Т.к. я совсем не знаю T-SQL, решил написать небольшой скрипт на Powershell для решения этой задачи.
Нам понадобится:
- Непосредственно база данных
- Таблица в ней для службных нужд
01Nov
Written by Super User.
Иногда при запуске VMware vSphere PowerCLI консоль загружается с ошибками:
Get-PowerCLIVersion : The term 'Get-PowerCLIVersion' is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At C:\Program Files (x86)\VMware\Infrastructure\vSphere
PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1:38 char:12
+ $version = Get-PowerCLIVersion
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-PowerCLIVersion:String) [], CommandNotFoundExce
ption
+ FullyQualifiedErrorId : CommandNotFoundException
01Nov
Written by Super User.
Иногда бывает очень сложно найти ошибку в скрипте Powershell, особенно если скрипт запускается в какой-то отдельной выделенной сессии, например, под учетной записью SYSTEM. Там будут вылазить всякие ошибки, но вы о них не узнаете.
Поэтому я начал искать способ логировать\сохранять вывод Powershell консоли в файл и вот как это можно сделать.
08Dec
Written by Super User.
Если вам когда-нибудь надо было распаковать БОЛЬШИЕ архивы в Powershell DSC-конфигурациях (например, в процессе развертывания какого-нибудь ПО), вы вероятно сталкивались с проблемой, что распаковка с помощью ресурса Archive длится ОЧЕНЬ долго. И xArchive тоже не помогает - у него такие же проблемы.
Один из возможных вариантов для того, чтобы обойти ситуацию - это использовать 7zip или другую утилиту командной строки, используя ресурс DSC WindowsProcess, но учтите, что WindowsProcess только запустит ваш процесс распаковки, а потом сразу перейдет к следующей инструкции в конфигурации. Например вот:
07Mar
Written by Super User.
Вот мой скрипт, который умеет удаленно перезагружать службы Windows с помощью Powershell. Скрипт умеет пинговать машины перед тем, как попытаться перегрузить службу.
Т.к. у нас заблокирован ICMP/ping между ландшафтами разработки, я использовал WMI-запросы, чтобы определить, запущена ли удаленная машина.
20Apr
Written by Super User.
Вот скрипт, который умеет искать сервера в вашем домене, на которых установлен Microsoft SQL Server.
Скрипт умеет обрабатывать выключенные\неотвечающие сервера с помощью пингов WMI, что полезно, когда ICMP по какой-то причине заблокирован. Кроме этого, тут используется Powershell Remoting, поэтому сначала удостоверьтесь, что он включен.
23Jun
Written by Super User.
Когда вы строите свою инфраструктуру в облаке Azure, используя IaaC (Infrastructure as a Code) подход, иногда вам придется некоторые ваши виртуалки переразворачивать. От этого никуда не денешься, учитывая, в общем-то, специфику облака: что-то не работает? - передеплой. И вот иногда бывает так, что сталкиваешься с проблей переразвертывания, когда парни из Microsoft обновляют образы для виртуалок новыми версиями систем. Например - SQL server 2014 уже не поставляется с SP1. В итоге вам надо как-то быстро найти список новых ID для образов, чтобы обновить свои ARM или Powershell-скрипты.
Я написал небольшой скрипт, который поможет в этом.