powershell (ru)

  • Добавление записей в атрибут userWorkstations пользователя в Active Directory

    Добавление имен компьютеров, на которые пользователям разрешен вход - достаточно постоянная задача, причем частенько появляется необходимость добавить компьютер сразу всем пользователям домена.

    Вот скрипт, который выполняет описанную задачу (причем скрипт не трогает пользователей, которым разрешен вход на все компьютеры):

  • Выгружаем пользователей AD в базу MS SQL

    Здравствуйте!

    Продолжаю публикации скриптов. Сегодняшний наш пациент был разработан в процессе создания биллинга звонков. У каждого юзера в Active Direcotry есть поле, в котором прописан его внутренний номер телефона. Этот же номер фигурирует в биллинге, но нам конечно хочется видеть не что-то вроде "1316", а "Иванов Владислав Александрович". 

    В сети полно примеров и скриптов, позволяющих достать пользователей из AD в csv-файл. По логике, мы можем потом взять этот csv и импортировать в MS SQL с помощью SSIS-скриптов. Однако это мне это не понравилось, т.к. на выходе у нас получается аж два скрипта, работающих на разных технологиях + один промежуточный файл. И это только для одного домена AD. А у меня их 14.

  • Запускаем Powershell-скрипты в планировщике задач

    Как и любые скрипты, необходимо иметь возможность запускать Powershell-сценарии не вручную, а по расписанию.

    Например, в заметках, указанных внизу статьи (по Lync Server), так и необходимо делать.

    Естественно, на помощь приходит планировщик задач Windows, однако как все-таки заставить запуститься файл *.ps1?

  • Сгенерировать случайный пароль на Powershell за 2 строки Обычно я генерирую пароли для пользователей, закрывая глаза и нажимая кнопки на клавиатуре. Сейчас уже это делать необязательно - генерировать можно скриптом на Powershell:

  • Generate complex password in two strings in Powershell Generate complex password in two strings in Powershell

    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:

  • Управление NTFS-правами в Powershell Как упростить и сделать более наглядным взаимодействие с правами доступа на файлы и их наследованием? Воспользуйтесь популярным и полезным скриптом File System Security PowerShell Module. 
  • Export address book directly from the server in Lync 2010/2013 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.
  • Running Powershell script in scheduled task

    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?

  • Export Active Directory users to MS SQL Server

    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.
     

  • Экспорт массива (таблицы) из Powershell в csv При работе с массивами данных в Powershell бывает необходимо выгрузить данные в таблицу, чтобы потом открыть ее в Excel. Напрямую программировать выгрузку массива в файл Excel не рекомендуется, т.к. для этого необходимо хотя бы иметь установленный Excel на машине, где запускается скрипт. Кроме того, такой код будет работать достаточно медленно. Лучше всего выгружать массив в csv-файл.
  • Export array (table) into csv-file in Powershell 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.
  • Область поиска при работе в Powershell с Exchange 2010/2013

    Вы можете столкнуться со следующими ошибками при выполнении командлетов 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’.

  • Удаление ящиков-"призраков" из базы данных Exchange 2010/2013

    В Exchange бывают такие случаи, когда проиходят ошибки при перемещении ящиков между базами данных. И тогда у вас может быть в базах, к примеру, два ящика, которые принадлежат одному и тому же пользователю, но естественно, к учетной записи Active Directory подключен только один из этих ящиков.

    Причем тот ящик, который не используется, не помечен ни как Disconnected, ни как SoftDeleted.

    Такие ящики в баще данных называются ghost-mailbox (ящиками-призраками).

     

  • Removing Ghost-Mailboxes from Exchange 2010/2013

    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.

  • Получить список делегированных почтовых ящиков, к которым имеют доступ другие пользователи в Exchange 2010\2013

    Иногда при аудитах Exchange нужно получить список пользователей, которые имеют доступ к другим почтовым ящикам. Или наоборот - получить список почтовых ящиков, к которым имеют доступ другие люди. В Exchange 2010/2013 есть специальный командлет Get-MailboxPermission который умеет опрашивать список ACL (Access Control List) почтовых ящиков.

    Можно расширить область применения этого командлета на все почтовые ящики в организации:

  • Статус установки обновлений для рабочих станций через WSUS на Powershell Статус установки обновлений для рабочих станций через WSUS на Powershell

    Когда у вас есть сразу несколько серверов WSUS с центральным корневым, бывает очень проблематично получать отчеты об обновлениях рабочих станций.

    Мне был нужен скрипт, который покажет, что на каких-то компьютерах есть не установленные одобренные обновления. Такой отчет есть в консоли WSUS, он называется Computer Tabular Status for Approved Updates

    Но это достаточно трудоемкая задача, когда у вас 5-10-15 серверов.

  • [Powershell Basics] Find a path for Powershell modules in your system

    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:

  • [Основы Powershell] Найти папку для установки модулей в Powershell

    В сети много полезных модулей для Powershell. Как их установить? Модуль в Powershell - это папка с файлами. Ее нужно скопировать в другую папку для модулей.

    Как найти, куда скопировать модуль?

    PS H:\> $env:PSModulePath -split ';'
    C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules C:\Windows\system32\WindowsPowerShell\v1.0\Modules\

    А вот в другой системе:

  • Выполнение команд в Linux через SSH с помощью Powershell

    В одной моей задаче надо было написать скрипт для отправки SMS-сообщений. У нас уже был настроен сервер для отправки SMS на Linux. Оставалось только научиться отправлять команды в Linux через SSH.

    Первоначально я пытался использовать модуль SSH-Session, но в нем были какие-то ошибки при отправке команд. Поэтому я остановился на Posh-SSH.

     

    Устанавливаем модуль:

  • Сохранение паролей для использования в скриптах Powershell

    Иногда при запуске скриптов в Powershell бывает необходимо запускать какой-нибудь командлет под чужой учетной запиью, служебной например. Обычно в таких случаях создается специальный объект PSCredential при помощи несложной конструкции $user = Get-Credential, и пользоваться далее этим объектом в последующих командлетах. При нечастом запуске это может и не быть проблемой, но когда надо скрипт запускать несколько раз в день, то неэффективно вводить логин-пароль.

    Лучшим способом было бы сохранить данные учетной записи в зашифрованном виде где-нибудь на диске рядом с файлом скрипта. Или, как вариант, в самом скрипте.

     

  • [Основы Powershell] Найти подстроку в массиве

    Представим, что у вас есть массив строк (адресов электронной почты):

     

    one-domain.ru
    two-domain.ru
    three-domain.com
    four-domain.com
    five-domain-company.com

     

    Стоит задача - найти среди этого массива адреса в домене domain.ru.

  • [Powershell Basics] Find substring in string array [Powershell Basics] Find substring in string array

    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.

  • Удаление старых файлов и папок на Powershell

    Задача ясна из названия - надо удалить старые файлы из какой-нибудь папки. В жизни полно ситуаций, когда надо выполнять такую процедуру. Например - удаление старых бэкапов.

  • Deleting old files and folders in Powershell

    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.

  • Найти все снапшоты в VmWare vSphere

    Не секрет, что при выполнении бэкапа Veeam Backup & Replication иногда "забывает" удалить созданные им снапшоты. Это приводит к тому, что вся виртуальная машина начинает работать полностью на снапшоте все время. Это ресурсоемкая операция, которая существенно снижает производительность виртуальной машины.

    Кроме этого, администраторы сами могут создать снапшот и забыть про него. У нас в компании был случай, когда виртуальный сервер пол-года (!!!!!) работать на снапшоте.

    К счастью, VmWare предоставляет модуль для Powershell PowerCLI, с помощью которого можно найти все такие снапшоты.

  • Массовое удаленное изменение DNS-серверов в настройках сетевой карты в Windows

    При апгрейде контроллеров домена или их удалении\добавлении, всегда появляется необходимость изменить DNS-сервера в настройках сетевых интерфейсов. Там, где сетевые настройки выдаются через DHCP - проблем нет. А там, где все настроено вручную, придется заходить на каждый сервер и менять руками. Это долго и неудобно.

  • Парсим сайты и веб-страницы с помощью Powershell / Invoke-WebRequest / getElementsByTagName и боремся с производительностью

    Иногда бывает нужно отпарсить какой-нибудь сайт или большую веб-страницу. Google предлагает множество программ и целых сложных комплексов для решения этой задачи, но я хочу показать, как это достаточно просто можно делать в Powershell.

    В Powershell есть специальный коммандлет Invoke-WebRequest, который собственно и разбирает HTML-страницу на тэги и содержимое. На выходе этот коммандлет выдает объект страницы с полем ParsedHtml. К этому полю можно применять методы по выборке нужных данных.

    Допустим, что вам нужно выбрать все ссылки на странице. Вот как это работает.

  • Бэкап MS SQL (в том числе Express) баз данных с помощью Powershell скрипта

    В бесплатной версии Microsoft SQL Server - Express - нет возможности настроить резервное копирование баз данных по расписанию. Однако вы можете настроить бэкап с помощью Powershell-скриптов и планировщика задач Windows.

    Ниже - пример скрипта, как это делаю я. Скрипт не удаляет старые бэкапы. Но почитайте мою статью Удаление старых файлов и папок на Powershell, она вам поможет. И еще - Запускаем Powershell-скрипты в планировщике задач.

    Обратите внимание на выделенные строки - там надо прописать ваш путь к бэкапам и инстанс SQL-сервера.

  • Массовая запись в базу MS SQL скриптом на Powershell Массовая запись в базу MS SQL скриптом на Powershell

    При тестировании отказоустойчивой конфигурации Microsoft SQL Server 2012 (подробнее: Пошаговое развертывание AlwaysOn - MS SQL 2012) мне нужно было сгенерировать массовую запись данных в базу.

    Т.к. я совсем не знаю T-SQL, решил написать небольшой скрипт на Powershell для решения этой задачи.

    Нам понадобится:

    • Непосредственно база данных
    • Таблица в ней для службных нужд
  • Ошибка "Get-PowerCLIVersion : The term 'Get-PowerCLIVersion' is not recognized as the name of a cmdlet, function, script file, or operable program." при запуске VMware vSphere PowerCLI Ошибка "Get-PowerCLIVersion : The term 'Get-PowerCLIVersion' is not recognized as the name of a cmdlet,   function, script file, or operable program." при запуске VMware vSphere PowerCLI

    Иногда при запуске 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
  • Как сохранить вывод Powershell-консоли в текстовый файл Как сохранить вывод Powershell-консоли в текстовый файл

    Иногда бывает очень сложно найти ошибку в скрипте Powershell, особенно если скрипт запускается в какой-то отдельной выделенной сессии, например, под учетной записью SYSTEM. Там будут вылазить всякие ошибки, но вы о них не узнаете.

    Поэтому я начал искать способ логировать\сохранять вывод Powershell консоли в файл и вот как это можно сделать.

  • Как распаковывать большие архивы в DSC-конфигурациях Powershell Как распаковывать большие архивы в DSC-конфигурациях Powershell

    Если вам когда-нибудь надо было распаковать БОЛЬШИЕ архивы в Powershell DSC-конфигурациях (например, в процессе развертывания какого-нибудь ПО), вы вероятно сталкивались с проблемой, что распаковка с помощью ресурса Archive длится ОЧЕНЬ долго. И xArchive тоже не помогает - у него такие же проблемы.

    Один из возможных вариантов для того, чтобы обойти ситуацию - это использовать 7zip или другую утилиту командной строки, используя ресурс DSC WindowsProcess, но учтите, что WindowsProcess только запустит ваш процесс распаковки, а потом сразу перейдет к следующей инструкции в конфигурации. Например вот:

  • Как удаленно перезагрузить службы Windows с помощью Powershell Как удаленно перезагрузить службы Windows с помощью Powershell

    Вот мой скрипт, который умеет удаленно перезагружать службы Windows с помощью Powershell. Скрипт умеет пинговать машины перед тем, как попытаться перегрузить службу.

    Т.к. у нас заблокирован ICMP/ping между ландшафтами разработки, я использовал WMI-запросы, чтобы определить, запущена ли удаленная машина.

  • Найти сервера с установленным MS SQL Server с помощью Powershell Найти сервера с установленным MS SQL Server с помощью Powershell

    Вот скрипт, который умеет искать сервера в вашем домене, на которых установлен Microsoft SQL Server.

    Скрипт умеет обрабатывать выключенные\неотвечающие сервера с помощью пингов WMI, что полезно, когда ICMP по какой-то причине заблокирован. Кроме этого, тут используется Powershell Remoting, поэтому сначала удостоверьтесь, что он включен.

  • Найти список всех образов для виртуальных машин в Azure Найти список всех образов для виртуальных машин в Azure

    Когда вы строите свою инфраструктуру в облаке Azure, используя IaaC (Infrastructure as a Code) подход, иногда вам придется некоторые ваши виртуалки переразворачивать. От этого никуда не денешься, учитывая, в общем-то, специфику облака: что-то не работает? - передеплой. И вот иногда бывает так, что сталкиваешься с проблей переразвертывания, когда парни из Microsoft обновляют образы для виртуалок новыми версиями систем. Например - SQL server 2014 уже не поставляется с SP1. В итоге вам надо как-то быстро найти список новых ID для образов, чтобы обновить свои ARM или Powershell-скрипты.

    Я написал небольшой скрипт, который поможет в этом.

  • Разработка и распространение модуля на Powershell Разработка и распространение модуля на Powershell

    Несмотря на то, что в интернете вы можете найти очень много различных инструкций по поводу того, как создать свой собственный Powershell-модуль, даже официальная документация не дает полного понимания, как все-таки создать модуль правильно.

    Я потратил несколько часов на изучение разных статей и, как обычно, пришел к своему подходу, который мне кажется достаточно удобным, гибким, и которым я хочу поделиться сейчас.