Полезные powershell скрипты: Установка программ средствами PowerShell в Windows 10
Установка программ средствами PowerShell в Windows 10
Установка программ средствами PowerShell в Windows 10
Несмотря на то, что эта функциональная возможность появилась еще в апреле 2014-го года вместе с выходом Windows Management Framework 5.0 Preview, нативной она смогла стать только с окончательным релизом «десятки». Итак, давайте же посмотрим, какой модуль отвечает за эту функциональную возможность и как можно проинсталлировать программные продукты, не загружая инсталляционные файлы.
Модуль Windows PowerShell OneGet
Еще с выходом Windows Management Framework 5.0 Preview у командной оболочки Windows PowerShell появилось несколько новых возможностей, предназначенных для упрощения управления компьютерами. К таким возможностям относятся две занимательные технологии, а именно: Windows PowerShell Desired State Configuration и Certified for Windows Network Switches.
В случае с технологией Certified for Windows Network Switches – был добавлен ряд командлетов Windows PowerShell, отвечающих за управление сертифицированными для Windows сетевыми коммутаторами. То есть, появилось 19 новых командлетов, которые вы можете найти, выполнив в оболочке PowerShell команду «Get-Command *-NetworkSwitch*». Так как технология достаточно серьезная и заслуживает отдельного внимания, в данной статье я ограничусь лишь небольшим описанием и не буду рассматривать эту технологию более подробно.
А вот на второй технологии следует остановиться подробнее. В случае установки Windows Management Framework 5 или операционной системы Windows 10 вы можете воспользоваться средством, позволяющим существенно упростить на ваших компьютерах поиск и установку программного обеспечения. Таким средством является OneGet. OneGet – это агрегатор управления пакетами, то есть модуль, использующий специальные репозитории, предоставляющий единый интерфейс для обнаружения, установки и инвентаризации программного обеспечения. Иначе говоря, эта технология с одной стороны предоставляет набор командлетов, позволяющих конечному пользователю управлять инсталляционными пакетами (о которых мы с вами будем говорить немного ниже), а с другой стороны она предоставляет интерфейс для написания пакетов поставщиков.
Прежде чем мы с вами начнем разбираться с самим модулем, следует обратить внимание на несколько определений, которые тесно связаны с этой технологией, а именно:
- Пакет. Если говорить в двух словах, то пакет представляет собой программу, которая собирается и устанавливается из определенного источника при помощи любой доступной системой управления пакетами. Как правило, пакет предоставляет собой скомпилированный код, с дополнительной мета информацией, к которой может относиться описание пакета, его версия или «зависимости». Система управления пакетами, например, для выполнения автоматического обновления программного продукта до новой версии, для того чтобы удостовериться в том, что все зависимости пакета будут установлены, должна обработать такую мета информацию и, в случае необходимости, должна автоматически установить все отсутствующие пакеты;
- Репозиторий. Согласно википедии, репозитории представляют собой место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети. Изначально репозитории использовались Linux-системами, позволяя устанавливать пакеты, необходимые для работы системы из других расположений. Большинство репозиториев бесплатны, однако некоторые компании предоставляют доступ к собственным репозиториям за платную подписку. О репозиториях OneGet мы с вами поговорим немного ниже;
- Диспетчер пакетов. Представляет собой набор программных инструментов, отвечающий за автоматизацию процесса установки, обновления, настройки и удаления пакетов программного обеспечения. Как правило, пакеты включают в себя базу данных, в которой указываются предварительные требования и зависимости программного обеспечения, а также информацию о версии продукта, предотвращающую использование нерабочих программных продуктов. К диспетчерам пакетов можно отнести линуксовский apt-get или NuGet, который позже появился в Windows-системах. В свою очередь, OnetGet представляет собой логическое продолжение NuGet, работающее в качестве агрегатора для всех доступных диспетчеров пакетов, именуемых поставщиками.
Изначально Microsoft ограничивает использование большинства доступных поставщиков, предоставляя базовый набор, позволяющий обнаружить и установить дополнительные поставщики для управления программным обеспечением. Среди базовых поставщиков можно выделить:
- Bootstrap – поставщик, позволяющий обнаруживать остальных поставщиков;
- MSI – поставщик, предназначенный для обработки файлов MSI;
- MSU – в свою очередь, поставщик, отвечающий за обработку файлов обновлений Microsoft;
- ARP (Add/Remove programs) – поставщик, отвечающий за инвентаризационные данные о любом программном продукте, который зарегистрирован в компоненте системы «Удаление или изменение программы»;
- PowerShellGet – поставщик, позволяющий управлять различными модулями PowerShell.
Полный список поставщиков OneGet с их кратким описанием вы можете найти по следующей ссылке.
Далее в этой статье мы будем работать с поставщиком Chocolatey, который позволяет выполнять автоматическую установку большинства программных продуктов.
Сам модуль OneGet включает в себя 10 командлетов Windows PowerShell, большинство которых будут рассмотрены в следующем разделе настоящей статьи. К этим командлетам относятся:
- Find-Package – выполнение поиска пакетов;
- Get-Package – возвращает список всех установленных на компьютере пакетов;
- Get-PackageProvider – возвращает список поставщиков, которые на данном компьютере подключены к OneGet;
- Get-PackageSource — возвращает список источников пакетов, которые зарегистрированы для определенного поставщика пакетов;
- Install-Package – позволяет устанавливать один или несколько программных продуктов;
- Register-PackageSource – добавление для указанного поставщика пакетов источник пакета;
- Save-Package – позволяет сохранить пакет на локальный компьютер без последующей установки;
- Set-PackageSource – изменение для указанного поставщика пакетов источник пакета;
- Uninstall-Package – удаление одного или нескольких пакетов программных продуктов;
- Unregister-PackageSource – удаление зарегистрированного источника пакета.
Установка программного обеспечения при помощи OneGet
Вот и настало время самого процесса установки программных продуктов. Далее вы увидите, как можно установить поставщик пакетов, найти требуемое программное обеспечение, установить его, а также как можно удалить ненужное приложение и загрузить себе на компьютер инсталляционный пакет программного продукта. Начнем по порядку.
Установка поставщика пакетов Chocolatey
- Откройте оболочку Windows PowerShell и для отображения списка источников пакетов, которые зарегистрированы в OneGet на локальном компьютере выполните команду Get-PackageSource. Обратите внимание на то, что если в команде вы указываете конкретный поставщик пакета, то в таком случае командлет Get-PackageSource отобразит для вас только те источники, которые связаны с указанным вами поставщиком. В противном случае команда возвращает все источники пакетов, которые зарегистрированы в OneGet. Так как нам нужно просмотреть источники пакетов для всех провайдеров, команда будет выполняться без каких-либо дополнительных параметров. Обязательно обратите внимание на то, что на данном этапе у вас дополнительный поставщик пакетов, который будет использоваться для инсталляции программных продуктов еще не установлен. Выходные данные команды вы можете посмотреть на следующем изображении:
Установка программ средствами PowerShell в Windows 10
- Рис. 1. Команда Get-PackageSource.
- Как видно на предыдущей иллюстрации, поставщик Chocolatey не установлен на нашем локальном компьютере. Следовательно, это нужно исправить. Обратите внимание на то, что для добавления поставщика пакетов у параметра ExecutionPolicy оболочки PowerShell должно быть установлено значение Unrestricted. В противном случае добавить поставщик не получится. Напомню, что командлет Get-ExecutionPolicy позволяет вам отобразить политики выполнения для текущего сеанса. Политика выполнения – это часть стратегии безопасности оболочки Windows PowerShell, которая определяет, можно ли загружать файлы конфигурации и выполнять скрипты, а также определяет, для выполнения каких скриптов требуется цифровая подпись. По умолчанию используется значение «Restricted» (не загружает файлы конфигурации и не выполняет скрипты), поэтому если вы у себя не изменяли значение политики выполнения – выполните команду Set-Executionpolicy Unrestricted. Так как по умолчанию областью политики выполнения является значение LocalMachine, чтобы параметры политики распространялись только на текущего пользователя, вы можете к применяемой команде еще добавить параметр –Scope со значением CurrentUser. Выходные данные этих двух команд видно на следующей иллюстрации:
- Рис. 2. Изменение параметров политики выполнения.
- На этом этапе мы можем посмотреть список поставщиков, которые зарегистрированы в OneGet на текущем компьютере. Для этого вы можете воспользоваться командлетом Get-PackageProvider. Данный командлет, как я уже успел упомянуть немного выше, возвращает список поставщиков пакетов, которые уже подключены в OneGet. При желании вы можете отфильтровать результаты, основанные на всех или на части одного (нескольких) имени поставщика. Например, чтобы посмотреть, какие поставщики подключены на данный момент, вы должны выполнить командлет Get-PackageProvider без каких-либо дополнительных параметров. Как видно на следующей иллюстрации, изначально на компьютере у меня подключено 4 таких поставщика, о которых я уже сегодня вам рассказывал. Теперь, чтобы установить поставщик Chocolatey на компьютере вам нужно выполнить команду Get-PackageProvider –Name Chocolatey –ForceBootstrap, где параметр –ForceBootstrap отвечает за автоматическую установку поставщика. Обратите внимание на то, что, как правило, при установке поставщика Chocolatey также должен быть просинталлирован поставщик NuGet. Как видно на следующей иллюстрации, после повторного использования командлета Get-PackageProvider, устанавливаемый нами поставщик уже должен фигурировать в списке:
- Рис. 3. Установка поставщика пакетов Chocolatey.
Теперь мы можем сгенерировать полный список всех доступных в поставщиках пакетов и передать его по конвейеру командлету Export-CliXML для создания XML-представления объектов и их сохранения в XML-файле. Учтите, что экспортируемый вами список будет постоянно меняются и со временем все больше и больше пакетов будут добавляться в используемые вами репозитории. Соответственно, не забывайте время от времени заменять экспортируемый вами файл. Для того чтобы выполнить экспорт списка пакетов и сохранить этот список в папке C:\TestPosh вам нужно выполнить следующую команду: Find-Package | Export-CliXML C:\TestPosh\Test.xml
Учтите, что процедура экспорта обязательно займет у вас какое-то время. После того как команда закончит выполняться и у вас на компьютере будет создан XML файл, импортируйте его и, для удобства просмотра, при помощи конвейера и команды GridView, отвечающей за отображение результатов выполнения команды в окне в виде интерактивной таблицы, можете посмотреть, какие пакеты будут доступны для установки. Естественно, этот список пакетов вы можете открыть при помощи любого приложения, которое способно обрабатывать XML файлы, например, средствами того же Excel. Данная команда, как вы видите на следующей иллюстрации, выглядит следующим образом: Import-CliXML С:\TestPosh\Test.xml | Out-GridView
Рис. 4. Просмотр списка пакетов, доступных для установки.
Так как поставщик уже установлен, можно переходить к следующей части данной процедуры, а именно к
Установке программного обеспечения средствами PowerShell
Прежде чем устанавливать программные продукты нам следует посмотреть, что же уже установлено на компьютере. Для выполнения этой задачи вы можете воспользоваться командлетом Get-Package, который возвращает список всех пакетов программного обеспечения, установленных на локальном компьютере как с помощью OneGet, так и другими средствами инсталляции приложений. При желании вы также можете запускать командлет Get-Package и на удаленных компьютерах, запустив его как часть Invoke-Command, команды Enter-PSSession или скрипта.
В том случае, если вы хотите получить информацию по конкретному программному обеспечению, например, по установленным продуктам Microsoft Office 2013, вы можете наряду с данным командлетом использовать параметр –Name с соответствующим значением, например, Get-Package -Name «office 2013». Выходные данные этого командлета видны ниже:
Рис. 5. Вывод командлета Get-Package.
Перед инсталляцией программного обеспечения попробуем определиться с тем, что же нам нужно установить. Так как на машине установлен только офис 2013 и еще несколько приложений, далее я вам покажу, как можно установить такие программные продукты, как Adobe Creative Cloud, Adobe Reader, Notepad++, а также Process Explorer, Process Monitor и WinRar.
Ввиду того, что до самого процесса инсталляции нам нужно сами пакеты локализовать, следует воспользоваться возможностями командлета Find-Package. Как вы уже заметили немного ранее, данный командлет позволяет выполнять поиск инсталляционных пакетов в доступных на локальном компьютере источниках пакетов. В том случае, если вы не будете использовать с данным командлетом какие-либо параметры, вам будет выведен командой полный список всех приложений, как было заметно ранее.
Например, для начала попробуем найти приложения Adobe, которые доступны для инсталляции из добавленного нами поставщика Chocolatey. Для этого достаточно помимо самого командлета указать параметр –Name и в качестве его значения ввести искомый программный продукт. Так как после слова Adobe у инсталляционных пакетов может быть указано имя продукта, следует ввести имя продукта следующим образом: Adobe*, как показано на следующей иллюстрации. Как вы видите, модуль OneGet обнаружил в репозитории следующий инсталляционный пакет: adobe-creative-cloud версии 1.0. В принципе, это один из искомых продуктов, а это значит, что его следует проинсталлировать. Для этого, как также можно заметить на следующей иллюстрации, нужно воспользоваться возможностями командлета Install-Package. Чтобы установить Creative Cloud выполняется следующая команда Install-Package -Name adobe-creative-cloud –Force, где параметр Force, как принято в PowerShell, переопределяет ограничения, препятствующие выполнению команды до тех пор, пока изменения не начнут нарушать требования безопасности. Выходные данные этих команд можно увидеть на следующей иллюстрации:
Рис. 6. Установка Adobe Creative Studio
Теперь, после того как первый программный продукт был установлен попробуем выполнить поиск определенной версии Adobe Reader. Для этого помимо уже известной команды Find-Package –Name AdobeReader следует добавить параметр –AllVersions, который возвращает все доступные версии пакета, или все версии пакета, которые находятся в диапазоне, указанном в параметрах MinimumVersion и MaximumVersion. Обратите внимание на то, что этот параметр не является обязательным, так как изначально поиск отображает свежайшую версию программного продукта. Теперь из всех доступных версий нам следует выбрать ту, которая должна быть проинсталлирована на компьютере, например, пусть это будет версия 2015.007.20033. для того, чтобы установить именно эту версию ридера, следует для команды Install-Package -Name AdobeReader добавить параметр –RequiredVersion со значением 2015.007.20033, который определяет точную версию пакета, который вы хотите установить. Также вы можете установить максимально доступную версию продукта, добавив параметр MaximumVersion с соответствующим значением. Вывод этих команд виден на следующей иллюстрации:
Рис. 7. Установка программного продукта определенной версии
Если вам нужно установить свежайшую версию программного продукта и в то же время вы не хотите вводить в оболочке PowerShell несколько команд, вы можете обобщить поиск и установку пакета при помощи конвейера. Например, в случае с установкой последней версии текстового редактора Notepad++ вы можете выполнить следующую команду: Find-Package -Name NotepadPlusPlus | Install-Package –Force. Таким образом, вы выполняете поиск пакета в репозитории и в случае нахождения результата сразу инсталлируете его в тихом режиме. Процесс выполнения установки этого программного продукта виден ниже:
Рис. 8. Установка Notepad++
Теперь, так как согласно указанному выше заданию осталось установить еще Process Explorer, Process Monitor и WinRar, попробуем установить сразу несколько программных пакетов. Для этого желательно точно знать, как называются эти пакеты в самом репозитории. Как я уже писал ранее, это можно проверить при помощи командлета Find-Package | Out-GridView. После того как будут известны имена пакетов можно заняться самой установкой. Для этого вы можете выполнить следующую команду: Find-Package -Name procexp, procmon, winrar | Install-Package. В данном примере, как видно на следующей иллюстрации, я специально не указываю параметр Force, чтобы вы могли обратить внимание на весь процесс установки нескольких программных пакетов одновременно.
Рис. 9. Установка нескольких программ одновременно
Сохранение и удаление программ
Последние два командлета, которые будут рассмотрены в этой статье отвечают за сохранение инсталляционного пакета и удаление проинсталлированной программы. Начнем с сохранения.
Для того чтобы сохранить инсталляционный пакет можно воспользоваться очередным командлетом модуля OneGet, а именно модулем Save-Package. Данный командлет позволяет сохранить пакеты на локальном компьютере без их последующей установки. По умолчанию данный командлет сохраняет последнюю версию программного продукта, однако если вы к текущему командлету добавите параметр AllVersions, у вас на компьютере будут сохранены все размещенные в репозитории версии выбранной вами программы. Более того, аналогично параметрам командлетов поиска и установки программ, помимо сохранения всех версий, при помощи параметров -MaximumVersion и –MinimumVersion, вы еще можете выбрать диапазон версий пакета, который желаете сохранить. Чтобы сохранить пакет на своем компьютере, помимо параметра Name и, в случае необходимости, параметра, отвечающего за версию продукта, вы должны указать параметр Path с будущим расположением вашего инсталлятора.
Как видно на следующей иллюстрации, команда Save-Package –Name Procexp –Path C:\TestPosh сохранит последнюю версию Process Explorer в папке C:\TestPosh:
Рис. 10. Сохранение Process Explorer на компьютере
Если вы случайно установили не тот пакет, вы всегда можете при помощи модуля OneGet его удалить. Для этого используется командлет Uninstall-Package. Как и в случае с остальными командлетами данного модуля, для удаления программы вам нужно указать параметр Name с соответствующим именем приложения, а также, для тихого удаления, вы можете использовать параметр Force. Например, чтобы удалить с компьютера установленный ранее WinRAR вам нужно выполнить следующую команду: Uninstall-Package –Name WinRAR –Force, как показано ниже:
Рис. 11. Удаление установленной программы
Заключение
Из этой статьи вы узнали об одной из особенностей новой операционной системы от Microsoft, а именно об инсталляции программных продуктов средствами командной оболочки Windows PowerShell. Я вам рассказал о самом модуле OneGet, об основной терминологии, используемой наряду с этой технологией и о том, какие существуют предустановленные поставщики пакетов. Вы узнали о том, как можно подключить к OneGet сторонний поставщик пакетов и как при его помощи можно находить, устанавливать, сохранять и удалять программные продукты.
источник
Создание сценариев с помощью Windows PowerShell
- PowerShell Essentials для занятого администратора (серия видео из 5 частей)
- Почему вы должны изучить PowerShell
- Как объединить Windows PowerShell для развлечения и получения прибыли
- Взгляд на поставщиков Windows PowerShell
- Windows PowerShell создает журналы событий
- Использование Windows PowerShell для управления удаленным рабочим столом
- Windows PowerShell — Узнайте об этом сейчас, прежде чем возникнет чрезвычайная ситуация (серия видео из 5 частей)
Руководства и руководства
- Windows PowerShell Руководство пользователя
- Начало работы с Windows PowerShell
- Настройка консоли Windows PowerShell
- Сочетания клавиш Windows PowerShell
- Трубопровод и конвейер
- Запуск скриптов Windows PowerShell
- Профиль Windows PowerShell
- Псевдонимы Windows PowerShell
- Пользовательские имена Windows PowerShell Руководство
- Основы Windows PowerShell
- Конвейер объектов
- Навигация Windows PowerShell
- Работа с объектами
- Использование Windows PowerShell для администрирования
- Введение в Windows PowerShell ISE
- Приложение 1 — Псевдонимы совместимости
- Приложение 2 — Создание пользовательской оболочки Windows PowerShell Ярлык
- Руководство по преобразованию VBScript в Windows PowerShell
Эти аудио- и видеоматериалы содержат советы, новости и интервью по Windows PowerShell, которые вы можете слушать в удобное для вас время.
Интернет-трансляции
Windows PowerShell Webcasts имеет список
более 70 различных презентаций PowerShell в разных форматах.
Чтобы просмотреть весь список, выберите «БОЛЬШЕ» справа напротив заголовка «ИТ-специалисты»)
- Введение в Windows PowerShell
- Использование Windows PowerShell 2.0
- Основы Windows PowerShell для ИТ-специалистов (серия из 2 частей)
- TechEd 2011 Птицы-перья (Сессия 04): PowerShell: лучшие практические методы
- Управление системами веб-инфраструктуры с помощью Windows PowerShell 2.0
Как мне:
- PowerShell — основы
- Переменные PowerShell
- Сценарии PowerShell и командная строка
- PowerShell и WMI
- Создание вывода с помощью PowerShell
- PowerShell — управление объектами
- Конвейерная обработка
Подкасты
Радио TechNet
Это некоторые из блогов, которые ведутся по теме Windows PowerShell. Некоторые из них являются независимыми блогами, и их содержание не проверяется и не контролируется Microsoft.
В этом разделе представлены ссылки на реальные сценарии PowerShell, которые были разработаны для проверки и повторного использования. Эти сценарии предназначены для того, чтобы администраторы не могли «начинать с нуля» при разработке сценариев. Хотя они почти наверняка потребуют
Некоторые модификации предназначены для того, чтобы дать администраторам отправную точку для изучения того, как выполнять различные задачи, связанные с PowerShell, в их собственных средах.
Осторожно |
---|
ВАМ НИКОГДА НЕ СЛЕДУЕТ ЗАПУСКАТЬ СЦЕНАРИЙ В ПРОИЗВОДСТВЕ, ЕСЛИ ВЫ НЕ НА 100% уверены в том, что он будет делать.ВСЕ СКРИПТЫ ДОЛЖНЫ БЫТЬ ТЩАТЕЛЬНО ИЗУЧЕНЫ И ИСПЫТАНЫ В НЕПРОИЗВОДСТВЕННОЙ СРЕДЕ. В ПРОИЗВОДСТВЕ. ЭТО ПОМОГАЕТ УБЕДИТЬСЯ, ЧТО ПРОБЛЕМЫ ПРОИЗВОДСТВА НЕ ВОЗНИКАЮТ В РЕЗУЛЬТАТЕ ЗАПУСКА СКРИПТОВ, НЕ ПРОВЕРЕННЫЕ И ПРОВЕРЯЕМЫЕ. |
Форумы Microsoft — это места, где администраторы могут задавать вопросы, читать обсуждения технических специалистов и взаимодействовать с онлайн-сообществом. Следующий форум посвящен PowerShell.
Ниже приводится неполный список книг, которые оказались полезными в качестве ресурсов PowerShell как для нового администратора, так и для опытного разработчика. Это не полный список книг по PowerShell, он предназначен только как образец для администратора, ищущего
начать создавать свою собственную библиотеку.
В этом разделе представлены различные внешние ресурсы, предлагаемые сообществу PowerShell в виде блогов, примеров сценариев, вики, форумов и т. Д.
Эти ресурсы специально разработаны, чтобы помочь подготовиться к выпуску новейшей версии PowerShell в ближайшем будущем.
20 команд Windows PowerShell, которые вы должны знать
Windows PowerShell — это новая оболочка командной строки, которая на более мощная и поддерживает сценарии , чем командная строка. За свой трехлетний опыт использования я нашел его действительно полезным, особенно если вы занимаетесь автоматизацией или написанием сценариев .Однако большинство из нас либо не знают об этом, либо не предпочитают использовать его вместо старой оболочки командной строки.
В этом посте я поделюсь полезными, но простыми командами (с примерами) Windows PowerShell. Вы можете использовать эти команды для выполнения
множество задач — от получения помощи до запуска процессов. Начнем?
Примечание. Оболочка Windows PowerShell создана с учетом обратной совместимости и, таким образом, поддерживает многие команды командной строки.Тем не менее, вы можете продолжать использовать старые команды в новом красочном интерфейсе.
Читайте также: Советы и инструменты для автоматизации повторяющихся задач в Windows 10
Get-Help [справка]
Если вы новичок в PowerShell, у вас могут возникнуть проблемы; и в таких ситуациях Get-Help становится вашим спасителем. Он предоставляет необходимую информацию о командлетах, командах , функциях, сценариях и рабочих процессах PowerShell.
Более того, это просто: вам нужно набрать Get-Help
, а затем команду, подробности которой вы ищите.Например, вы можете получить информацию о «Get-Process» с помощью Get-Help Get-Process
.
Get-Command [gcm]
Windows PowerShell позволяет обнаруживать его команды и функции с помощью Get-Command. Он отображает список команд определенной функции или для определенной цели на основе вашего параметра поиска.
Вам нужно только ввести Get-Command
, а затем поисковый запрос в PowerShell. Например, Get-Command * -service *
отображает команды, содержащие «-service» в своем имени.Не забудьте, что для используйте звездочки с обеих сторон вашего запроса , потому что это подстановочный знак, который помогает искать неизвестное.
Invoke-Command [icm]
Если вы хотите, чтобы запустил команду или сценарий PowerShell — локально или удаленно на одном или нескольких компьютерах — «Invoke-Command» — ваш друг. Он прост в использовании и помогает управлять компьютерами в пакетном режиме.
Необходимо ввести Invoke-Command
, а затем команду или сценарий с полным путем.Например, можно запустить команду «Get-EventLog» с помощью Invoke-Command -ScriptBlock {Get-EventLog system -Newest 50}
или на удаленном компьютере «Server01» с помощью команды Invoke-Command -ScriptBlock {Get- Система EventLog -Newest 50} -ComputerName Server01
.
Invoke-Expression [iex]
Invoke-Expression запускает другую команду или выражение . Если вы предоставляете выражение или строку в качестве входных данных, эта команда сначала оценивает их, а затем запускает, но также работает только локально, в отличие от предыдущей команды.
Вы должны ввести Invoke-Expression
, а затем команду или выражение. Например, вы можете присвоить переменной «$ Command» строку, сообщающую команду «Get-Process». Когда вы запускаете Invoke-Expression $ Command
, «Get-Process» запускается как команда на вашем локальном компьютере.
Invoke-WebRequest [iwr]
Вы можете загружать, входить в систему и собирать информацию на веб-сайтах и веб-службах во время работы в Windows PowerShell с помощью Invoke-WebRequest.
Вы должны использовать его как Invoke-WebRequest
, за которым следуют его параметры. Например, вы можете получить ссылки на данной веб-странице с помощью команды (Invoke-WebRequest -Uri "https://docs.microsoft.com") .Links.Href
.
Set-ExecutionPolicy
Хотя создание и выполнение скриптов (с расширением «ps1») в Windows PowerShell возможно; однако существуют ограничения в целях безопасности. Но вы можете переключить уровень безопасности с помощью команды Set-ExecutionPolicy.
Вы можете ввести Set-ExecutionPolicy
, а затем один из четырех уровней безопасности — Restricted, Remote Signed, All Signed или Unrestricted , чтобы использовать команду. Например, вы можете назначить ограниченный статус политики с помощью Set-ExecutionPolicy -ExecutionPolicy Restricted
.
Get-Item [gi]
Если вы ищете информацию об элементе в любом заданном месте, скажем, файле на жестком диске, Get-Item — лучший способ получить его в Windows PowerShell.Вы должны знать, что он не получает содержимое элемента , такое как файлы и подкаталоги в данном каталоге, если это явно не указано вами.
Необходимо ввести Get-Item
, за которым следует путь или строка вместе с ее параметрами, если таковые имеются. Например, вы можете получить все элементы (файлы или папки), начинающиеся с «M» в текущем каталоге, используя команду Get-Item M *
. Наряду с содержимым каталогов он также может получать содержимое ключей реестра.
Элемент копии [копия]
Если вам нужно скопировать файлы и каталоги на диск хранения или записи и ключи реестра в реестре, вы можете использовать Copy-Item.Она работает аналогично команде «cp» в командной строке, но намного лучше.
Вы можете использовать команду Copy-Item
, чтобы копировать и переименовывать элементы в той же команде — укажите новое имя в качестве места назначения. Например, вы можете скопировать и переименовать «Services.htm» в «MyServices.txt», используя Copy-Item «C: \ Services.htm» -Destination «C: \ MyData \ MyServices.txt»
.
Remove-Item [del]
Если вы хотите, чтобы удалял элементы , такие как файлы, папки, функции, ключи и переменные реестра, Remove-Item — это команда для вас.Что мне показалось интересным, так это то, что он предоставляет параметры для включения и исключения элементов.
Вы можете использовать команду Remove-Item
, чтобы удалить элементы из определенных мест с помощью параметров . Например, вы можете удалить файл «MyServices.txt» с помощью команды Remove-Item «C: \ MyData \ MyServices.txt»
.
Get-Content [cat]
Когда вам нужно просмотреть содержимое текстового файла в определенном месте, вы открываете и читаете его в текстовом редакторе, таком как Notepad ++.В Windows PowerShell вы можете использовать Get-Content, чтобы получить содержимое , не открывая файл.
Например, вы можете получить 50 строк содержимого «Services.htm», затем вы можете использовать Get-Content «C: \ Services.htm» -TotalCount 50
.
Set-Content [sc]
Вы можете сохранять текст в файлы с помощью Set-Content, аналогично команде «echo» оболочки Bash. В сочетании с Get-Content вы также можете получить содержимое одного файла и скопировать его в другой файл с помощью этой команды.
Например, вы можете ввести Set-Content
to , чтобы записать или заменить содержимое файла новым содержимым. Более того, вы можете объединить его с примером предыдущей команды, чтобы сохранить ее вывод в новый файл с именем «Sample.txt», используя Get-Content «C: \ Services.htm» -TotalCount 50 | Set-Content "Sample.txt"
.
Get-Variable [gv]
Если вы хотите использовать переменные в Windows PowerShell, команда Get-Variable поможет вам визуализировать значения переменных .Он показывает их в табличной форме и позволяет включать, исключать и использовать подстановочные знаки.
Вы можете использовать эту команду, набрав Get-Variable
, а затем его параметры и параметры. Например, вы можете получить значение переменной с именем «desc», используя следующий код: Get-Variable -Name «desc»
.
Набор переменных [набор]
Вы можете назначить или изменить / сбросить значение переменной с помощью команды Set-Variable. В качестве ярлыка вы также можете установить простую переменную в формате $ { $ VarName = VarValue } $, например, $ desc = "A Description"
.
Для установки переменной можно использовать команду Set-Variable
, а затем ее параметры. Например, мы можем установить значение для переменной с именем «desc», используя команду Set-Variable -Name «desc» -Value «A Description»
.
Get-Process [gps]
Обычно мы используем Диспетчер задач, чтобы найти запущенные процессы на нашем компьютере. В Windows PowerShell любой может использовать Get-Process для получения списка запущенных в данный момент процессов, которые вы также можете обработать.
Вы можете написать команду как Get-Process
вместе с вашим поисковым запросом. Например, если вам нужна информация о процессах, в названии которых есть «исследовать», вы можете ввести Get-Process * explore *
(обратите внимание на звездочки).
Start-Process [saps]
Windows PowerShell упрощает запуск одного или нескольких процессов на вашем компьютере. Я обнаружил, что эта команда удобна в приложениях для создания сценариев, поскольку это одна из обязательных команд, которые вам понадобятся для автоматизации задачи.
Вы можете ввести Start-Process
, а затем его параметры, чтобы использовать команду. Например, вы можете запустить Блокнот, набрав Start-Process -FilePath «notepad» -Verb runAs
в Windows PowerShell.
Остановить процесс [убить]
Вы можете остановить определенные или все экземпляры процесса, запущенного на вашем компьютере , используя его имя или PID (идентификатор процесса), благодаря команде Stop-Process. Что делает его убедительным, так это то, что вы можете обнаружить, что процесс остановлен или нет, и вы даже можете остановить процессы, которые не принадлежат или не запущены текущим пользователем.
Вы можете ввести команду Stop-Process
, а затем ее параметры, чтобы остановить указанные процессы. Например, вы можете остановить все процессы Блокнота с помощью команды Stop-Process -Name «notepad»
.
Get-Service [gsv]
Если вам нужна информация о конкретных службах (работающих или остановленных) на вашем компьютере, вы можете использовать Get-Service. Он отображает службы, установленные в вашей системе, и предоставляет параметры для их фильтрации, включения и исключения.
Если вы хотите использовать эту команду, вы можете ввести Get-Service
, а затем его параметры. Например, введите следующий код Get-Service | Where-Object {$ _. Status -eq "Running"}
, чтобы службы «работали» в вашей системе.
Start-Service [sasv]
Если вы хотите, чтобы запустил службу на вашем компьютере, команда Start-Service может помочь вам сделать то же самое из Windows PowerShell. Я обнаружил, что он достаточно мощный, чтобы запускать службу, даже если эта служба отключена на вашем компьютере.
Вам необходимо указать имя службы при использовании команды Start-Service
. Например, Start-Service -Name «WSearch»
запускает службу «Windows Search» на вашем локальном компьютере.
Стоп-Сервис [spsv]
Если вы хотите, чтобы остановил службы, выполняющие на вашем компьютере, вам может помочь команда Stop-Service. Вам необходимо указать название службы вместе с Stop-Service
. Например, введите Stop-Service -Name "WSearch"
, чтобы остановить службу Windows Search на вашем компьютере.
ConvertTo-HTML
PowerShell может предоставить потрясающую информацию о вашей системе. Тем не менее, он в основном представлен в неудобоваримом формате, но вы можете использовать ConvertTo-HTML, чтобы создать и отформатировать отчет , чтобы проанализировать его или отправить кому-нибудь.
Вы можете использовать ConvertTo-HTML
вместе с выводом другой команды с помощью конвейера. Например, Get-Service | ConvertTo-HTML -Property Name, Status> C: \ Services.htm
отображает список всех сервисов и их статус в виде веб-отчета, который хранится в файле «Services.htm ».
11 наиболее полезных команд PowerShell для удаленного управления
Использование PowerShell для быстрого и эффективного управления удаленными компьютерами было одним из его основных преимуществ. Если вы не знакомы с этим, эти команды помогут вам быстрее освоиться.
Конечно, вы слышали об этой PowerShell в течение многих лет, но ОС называется Windows, а не Shells, и графический интерфейс, и вы дружите много лет. В конце концов, вы потратили хорошие деньги на свою мышь, и вы собираетесь их окупить.Я понимаю, я тоже в течение многих лет сопротивлялся тому, чтобы переходить к командной строке в Windows, что странно, учитывая, что я чувствую себя очень комфортно в BASH.
Чтобы помочь вам понять ценность этого, я хотел бы поделиться одиннадцатью очень полезными командами PowerShell, которые вы можете использовать для удаленного управления машинами Windows. Правильно, вам не нужно подключать RDP к серверу, а затем открывать PowerShell. Вы можете делать все это со своего рабочего стола и по-прежнему запускать командлеты PS в удаленных системах. И некоторые из этих командлетов бесполезны.Итак, если это похоже на то, что вы могли бы использовать, читайте дальше!
Конечно, у вас должен быть PowerShell на вашем локальном компьютере, на вашем удаленном компьютере должен быть включен удаленный PowerShell, а также у вас должны быть права администратора для систем, которыми вы хотите управлять удаленно. А если вы собираетесь запускать скрипты, вы можете изменить политику выполнения. Вот как все это согласовать.
Загрузите последнюю версию PowerShell от Microsoft и установите ее. Все текущие версии Windows должны иметь PowerShell, но стоит установить последнюю версию, и вы можете получить ее как часть Windows Management Framework 5.0 с https://www.microsoft.com/en-us/download/details.aspx?id=50395.
Убедитесь, что для всех компьютеров, которыми вы хотите управлять удаленно, служба WinRM настроена на автоматический запуск и работает. Вы можете сделать это в графическом интерфейсе services.MSC или через локальную оболочку PowerShell (администратор) с помощью этого командлета: set-service winrm -startuptype automatic
Включить удаленное управление PowerShell на машинах, которыми нужно управлять с помощью той же оболочки PowerShell (администратор) session: Enable-PSRemoting -Force
Если вам нужно установить это на нескольких компьютерах, см. наш пост http: // www.techtalk.gfi.com/how-to-manage-your-servers-remotely-with-powershell/, чтобы узнать, как это сделать с помощью GPO.
Помните, что, в дополнение к вышесказанному, если вы выполняете удаленные команды на сервере (или рабочей станции), вам необходимо иметь права администратора в этой удаленной системе, а также в вашей локальной системе, в которой вы будете открывать сеанс PS. как административный. Если ваша учетная запись на локальном компьютере не является администратором на удаленном, вам необходимо будет предоставить явные учетные данные для учетной записи, которая является администратором на удаленном компьютере.
Первый командлет действительно самый важный для нас, поскольку он позволяет вам начать сеанс PS на удаленном компьютере. Щелкните заголовок страницы MSDN со всеми подробностями, но вот пример, с которого можно начать.
Enter-PSSession -ComputerName RemoteServer -Port 5353 -Credential Домен \ Имя пользователя
Замечательно то, что ваше приглашение будет обновлено, чтобы отразить имя удаленного хоста в качестве напоминания о том, какой ящик вы горит при выполнении команд.Заголовок каждого из приведенных ниже командлетов связан с онлайн-документацией на случай, если вам потребуется дополнительная информация.
Этот очень полезный командлет позволяет вызывать сценарии, которые вы либо сохранили на удаленном компьютере, либо можете получить по диску или по UNC-пути. Вы можете использовать его вместо Enter-PSSession, если хотите выполнить одноразовый запрос или использовать список имен компьютеров, разделенных запятыми, для выполнения одного и того же действия в нескольких системах.
Invoke-Command -ComputerName RemoteServer -Credential Домен \ Имя пользователя -ScriptBlock { PScommand }
Как и звучит, этот командлет позволяет извлекать и просматривать журнал событий из удаленной системы (или конечно локально) и фильтровать по типу, идентификатору, ключевому слову и т. д.
Get-EventLog -LogName System -InstanceID c0ffee -Source « LSA »
Три тесно связанных командлета, которые позволяют вам видеть, какие процессы выполняются, запускать новые процессы и останавливать процессы. Эти процессы могут быть приложениями или сценариями и могут быть фоновыми или интерактивными на рабочем столе.
Start-Process -FilePath «Блокнот» -Wait -WindowStyle Maximized
Еще один набор командлетов, которые лучше всего подходят вместе, с помощью которых вы можете запрашивать, какие тома подключены к системе, и управлять ими, включая монтирование / демонтаж и изменение буквы дисков.Как часто вам нужно проверять свободное дисковое пространство на всех ваших серверах?
Get-Volume -DriveLetter C
Эти два командлета могут получать и изменять ACL для любого ресурса, будь то файловая система или реестр. Это может упростить аудит, настройку и определенные параметры для приложений, развернутых в нескольких системах.
Get-Acl -Path «HKLM: \ System \ CurrentControlSet \ Control» | Format-List
Эти двое делают именно то, что кажется. Откажитесь от удаленного компьютера или выключите его по мере необходимости.
Restart-Computer -ComputerName «Server01», «Server02», «Server03»
Разве PING под любым другим именем не будет столь же хорош? Вероятно, и в этом случае, есть некоторые полезные параметры, которые вы можете использовать в сценариях, чтобы сначала подтвердить, что система работает, прежде чем пытаться сделать что-то еще, или просто протестировать соединение с рабочей станции пользователя без необходимости сначала объяснять им, как , чтобы открыть приглашение CMD, а затем как написать PING.
Test-Connection -ComputerName «Server01» -Count 3 -Delay 2 -TTL 255 -BufferSize 256 -ThrottleLimit 32
Подобно командлетам для управления процессами, эти два могут запрашивать и устанавливать службы в удаленной системе, например используя услуги.msc
Get-Service | Where-Object {$ _. Status -eq «Running»}
Этот командлет позволяет вводить несколько строк в блок выполнения или вызывать сценарий PS1, доступный на удаленном компьютере по пути к файлу.
Start-Job -FilePath “c: \ scripts \ sample.ps1”
11. Set-RemoteDesktopConfig
И на всякий случай, если вам действительно нужен этот графический интерфейс (я, конечно, нуждаюсь), вы можете использовать Set-RemoteDesktopConfig для включения и настройки RDP на серверах.Это очень полезно, учитывая, что по умолчанию он выключен даже в Server 2016.
Конечно, есть несколько альтернатив изучению имен PS для командлетов, которые выполняют то, что вы годами делали в командной строке. Первый — использовать PSEXEC от Microsoft для простого удаленного выполнения команд на целевых компьютерах. Я занимаюсь этим годами, и мне трудно убедить себя использовать PowerShell, когда PSEXEC работает так хорошо. Но поскольку будущее — за PowerShell, я стараюсь поступать правильно.
Второй — использовать псевдоним set-alias командлета PowerShell для создания имен командлетов PS, которые вы используете, для создания командлетов PS, по крайней мере, для работы со знакомыми командами. В PS уже установлено множество псевдонимов. Просто введите псевдоним в сеансе PS, чтобы увидеть, что уже установлено. В любом случае, у вас есть возможность удаленного управления cmd-строкой.
15 дополнительных задач, которые PowerShell может обрабатывать в Windows 10
PowerShell может быть очень пугающей перспективой для начинающего пользователя.В 2016 году в текстовом интерфейсе есть что-то загадочное и архаичное, но повышение профессионального уровня может помочь вам взять под контроль свой компьютер так, как вы никогда не могли подумать.
Эксперт может использовать PowerShell для выполнения всевозможных задач, относящихся ко всем областям вашей системы, но такое мастерство приходит только с пониманием основ и большим количеством практики.Поняв эти пятнадцать задач, вы сможете начать понимать, что такое PowerShell, и получить представление о том, насколько далеко простираются его возможности.
Открытие повышенного приглашения PowerShell
Чтобы приступить к выполнению любой из этих задач, вам необходимо открыть командную строку PowerShell с повышенными привилегиями.Для этого введите Powershell в строку поиска Windows, щелкните правой кнопкой мыши соответствующий результат и выберите Запуск от имени администратора .
Кроме того, вы можете просто ввести PowerShell в строку поиска и нажать CTRL + SHIFT + ENTER , чтобы получить тот же результат.
Установка даты и времени
Существует множество способов установить дату на вашем компьютере, но простота следующих команд PowerShell делает их хорошей практикой для новичка.Однако вы должны быть осторожны при настройке этих параметров на чужом компьютере — неправильно настроенные системные часы могут нанести ущерб среде Active Directory.
Чтобы начать работу, откройте командную строку PowerShell с повышенными привилегиями и введите следующую команду:
Set-Date -date "25.12.2016 7:30 AM"
Нажмите Enter, и ваш компьютер должен создать впечатление, что это Рождество.Затем вы можете либо протестировать свое обучение, используя ту же команду, чтобы вернуть в вашей системе правильное время и дату, либо указать своему компьютеру снова автоматически установить время и дату через приложение «Настройки».
Настройте дату и время
В некоторых случаях вы можете захотеть настроить дату и время, а не сразу.Для выполнения этой задачи мы воспользуемся тем же командлетом Set-Date , что и раньше, но немного другим методом:
Установить дату (Get-Date).ДобавитьДней (2)
Выше вы можете видеть, что мы запускаем команду, которая извлекает дату, установленную в данный момент на компьютере, а затем запускает другой процесс, который увеличивает день месяца до желаемого значения.Мы также можем использовать AddHours , AddMinutes или AddSeconds для точной настройки этой настройки или использовать знак минус перед числом, чтобы вернуться во времени, а не вперед.
Проверить файлы и папки
Команды PowerShell могут упростить проверку наличия файлов и папок на вашем компьютере без необходимости тратить время на копание в проводнике.Командлет Test-Path просто используется для проверки наличия чего-либо в конце указанного пути. Например, чтобы найти файл с именем PowerShell.xls в папке с названием Documents, я бы использовал примерно такую команду (очевидно, ваш путь будет отличаться в зависимости от иерархии папок):
Test-Path c: \ Users \ Brad \ Documents \ PowerShell.xls
Однако вам не обязательно знать точное имя файла для запуска сканирования.Звездочку можно использовать в качестве подстановочного знака, что полезно, если вы хотите найти файл определенного типа, например:
Test-Path c: \ Users \ Brad \ Documents \ *.xls
Переименовать файлы и папки
Как только вы научитесь точно вводить пути к файлам, PowerShell можно использовать для быстрого и эффективного переименования файлов и папок.Просто не забудьте открыть с помощью командлета Rename-Item , затем указать существующий путь, а затем желаемое имя — например:
Переименовать элемент c: \ Users \ Brad \ Documents \ PowerShellisDifficult.xls PowerShellisEasy.xls
Перемещение файлов и папок
Перемещать файлы и папки с помощью PowerShell легко, если вы воспользуетесь командлетом Rename-Item .Просто замените часть команды, в которой вы указываете новое имя, на его новое местоположение:
Move-Item c: \ Users \ Brad \ Documents \ PowerShellisEasy.xls c: \ Users \ Brad \ Важные документы
Объедините это с подстановочным знаком, который мы использовали ранее, и вы сможете быстро перемещать файлы определенного типа из одной папки в другую:
Перемещение элемента c: \ Users \ Brad \ Documents \ *.xls c: \ Users \ Brad \ Важные документы
Открытые программы
Командлет Invoke-Item открывает приложения или файлы непосредственно из командной строки PowerShell:
Invoke-Item c: \ Windows \ System32 \ notepad.exe
Однако, пока приложение находится на вашем пути к Windows, вы можете сделать то же самое, просто указав его имя в PowerShell:
блокнот
Открыть файлы с помощью программы по умолчанию
Этот командлет можно использовать для более эффективного использования открываемых файлов, но есть небольшая оговорка, о которой следует помнить заранее.Использование Invoke-Item для инициализации файла откроет его в любой программе, установленной по умолчанию, поэтому убедитесь, что она настроена в соответствии с вашими потребностями заранее:
Invoke-Item c: \ MakeUseOf \ Hello.txt
Открывать файлы как пакет
Командлет Invoke-Item действительно великолепен, когда он сочетается со звездочкой с подстановочным знаком, которую мы использовали ранее.Имея в своем арсенале эту команду, вы можете мгновенно открыть целую папку с файлами:
Invoke-Item c: \ MakeUseOf \ *.txt
Чтение текстовых файлов
Текстовый интерфейс PowerShell никогда не сможет конкурировать с VLC по количеству отображаемых типов файлов.Однако он хорошо подходит для представления содержимого файлов .txt с помощью команды Get-Content :
Get-Content c: \ MakeUseOf \ Hello.txt
Однако вы можете просто просмотреть текстовый файл, а не отображать весь документ, особенно если он очень большой.В этом случае мы можем использовать параметр -totalcount :
Get-Content c: \ MakeUseOf \ Hello.txt -totalcount 5
Как вы можете видеть выше, в результате отображаются только первые пять строк документа.
Добавить в текстовый файл
Вы можете на один шаг выйти за рамки чтения содержимого файла.txt с помощью командлета Add-Content :
Добавить содержимое c: \ MakeUseOf \ Hello.txt "Написано Брэдом Джонсом"
Однако это просто поместит добавленный текст в самый конец документа в его нынешнем виде, что может быть не совсем тем, что вы ищете.
Здесь вы можете использовать специальный символ, чтобы указать, что вы хотите, чтобы ваше добавление было добавлено в новую строку:
Добавить содержимое c: \ MakeUseOf \ Hello.txt "написано Брэдом Джонсом"
сценариев PowerShell для вашего набора средств Exchange Server
Одна из замечательных особенностей Exchange Server — это возможность использовать PowerShell для решения широкого круга задач администрирования.И одна из самых сильных сторон PowerShell — это возможность использовать сценарии для автоматизации сложных или повторяющихся задач, чтобы сэкономить время, усилия и избежать ошибок.
Сообщество Exchange Server имеет долгую историю совместного использования сценариев PowerShell, которые они разработали, чтобы каждый мог извлечь из них пользу. Вот несколько сценариев PowerShell, которые, я думаю, должны быть в любом наборе инструментов.
Примечание: многие из этих сценариев разрабатываются людьми в свое личное время. Если вам нравится сценарий, сообщите об этом автору, оценив его в галерее сценариев TechNet или оставив комментарий в его блоге.Точно так же, если вы обнаружите ошибку в сценарии, авторы обычно очень рады получить отчеты об ошибках от сообщества, чтобы они могли их исправить.
Отчеты среды обмена
Exchange MVP Стив Гудман написал этот сценарий PowerShell для создания отчета в формате HTML, который предоставляет обзор вашей среды Exchange. Я использую этот сценарий в качестве первого взгляда на любую организацию Exchange, когда занимаюсь поддержкой или планирую миграцию.
Блог Стива | Галерея скриптов TechNet
Exchange V15 (2013/2016) Сценарий автоматической установки
Установка предварительных требований Exchange и создание серверов Exchange с нуля — это хороший навык, но после того, как вы его освоите, вам нужно будет максимально автоматизировать его.MVP Exchange Мишель де Рой сделал именно это, поддерживая этот сценарий PowerShell для установки необходимых компонентов и выполнения автоматической установки Exchange Server 2013 и 2016.
Блог Мишеля | Галерея скриптов TechNet
Сценарий графического интерфейса уровня журнала Exchange
Во время упражнения по устранению неполадок есть большая вероятность, что вы увеличите уровень ведения журнала диагностики для нескольких компонентов Exchange Server. Закари Лобер создал сценарий PowerShell, который запускает графический интерфейс, позволяющий настраивать уровни диагностики на ваших серверах.
Блог Захарии | Галерея скриптов TechNet
Размер почтового ящика Exchange и статистический отчет
Один из первых сценариев PowerShell, которые я написал много лет назад и с тех пор постоянно обновляю. Этот сценарий создает файл CSV, содержащий множество полезной статистики и информации о почтовых ящиках в вашей организации Exchange. Я использую этот сценарий при планировании мощности, а также во время проектов миграции.
Запись в блоге | Галерея скриптов TechNet
Отчет о работоспособности для сред Exchange Server 2010/2013
Этот сценарий PowerShell может предоставить вам отчет о проверке работоспособности для среды Exchange Server 2010 или 2013, выделяя такие проблемы, как остановленные службы, неработоспособная репликация базы данных или транспортные очереди, не обрабатывающие сообщения.Запустите его как запланированную задачу, чтобы быстро проверить работоспособность утром прямо в ваш почтовый ящик.
Запись в блоге | Галерея скриптов TechNet
Анализировать выполнение запроса на перемещение
Во время миграции часто важно следить за производительностью пакетов миграции. Команда Microsoft Exchange опубликовала этот сценарий PowerShell, чтобы помочь вам проанализировать статистику производительности запросов на перемещение и выявить любые причины низкой производительности.
Блог группы обмена
| Галерея скриптов TechNet
Мониторинг резервного копирования сервера Exchange
Я использовал этот сценарий в качестве запланированного ежедневного отчета в каждой операционной роли, в которой я поддерживал Exchange Server 2007 или более поздней версии, а также во время каждого проекта миграции.Этот сценарий помогает вам следить за отметками времени резервного копирования баз данных Exchange, чтобы гарантировать, что резервное копирование действительно выполняется и успешно завершается. Не верьте, что ваше программное обеспечение для резервного копирования всегда говорит вам правду, и не доверяйте другим всегда добавлять новые базы данных в расписание резервного копирования при их создании!
Запись в блоге | Галерея скриптов TechNet
Сжатие и архивирование журналов IIS
Держите использование дискового пространства под контролем, регулярно сжимая и архивируя журналы IIS на ваших серверах Exchange.
Запись в блоге | Галерея скриптов TechNet
Очистить файлы журнала Exchange Server 2013
Если вы предпочитаете полностью очистить файлы журналов, попробуйте обновление Томаса Стенсицки для сценария Брайана Си Рейда, который удаляет не только журналы IIS, но также журналы производительности и диагностики, которые Exchange Server 2013 создает автоматически.
Блог Брайана | Блог Томаса | Галерея скриптов TechNet
Проверьте свое членство в ролевой группе RBAC
Внимательное наблюдение за членством в группах ролей в среде Exchange важно для обеспечения доступа с минимальными привилегиями для различных групп в вашей организации.Этот сценарий PowerShell экспортирует членство в каждой группе ролей, чтобы вы могли проверить, кто к чему имеет доступ, а также дополнительную информацию, например, есть ли у них пароли, которые не менялись в течение длительного времени.
Запись в блоге | Галерея скриптов TechNet
Создание списка исключений антивируса файловой системы для Exchange Server 2013
Антивирусное программное обеспечение является основной причиной незапланированного переключения баз данных в среде Exchange. Этот сценарий PowerShell генерирует список исключений для файлов, папок и процессов, которые необходимо добавить в конфигурацию антивируса на сервере Exchange, в соответствии с рекомендациями Microsoft.
Запись в блоге | Галерея скриптов TechNet
Аудит подключений RDP для ваших серверов
Вы когда-нибудь хотели знать, кто входит на ваши серверы Exchange по протоколу RDP? Биржевой MVP Майк Кроули опубликовал этот сценарий, поэтому вы можете создать отчет в любое удобное для вас время.
Блог Майка | Галерея скриптов TechNet
Проверьте SSL-сертификаты сервера Exchange
Истекающие сертификаты SSL могут вызвать множество проблем в вашей среде Exchange, поэтому разумно проверять их в рамках текущего обслуживания и проверки работоспособности.Я также использую этот сценарий каждый раз, когда проверяю новую среду на предмет устранения неполадок или проекта миграции.
Запись в блоге | Галерея скриптов TechNet
Отчет о разрешениях для почтового ящика
Я часто вижу людей, которые ищут сценарии, чтобы помочь им получить некоторую информацию о разрешениях почтовых ящиков в их организации Exchange. Серкан Вароглу опубликовал этот сценарий PowerShell, который позволяет вам создавать отчет о разрешениях почтового ящика для почтового ящика, базы данных или всей организации.
Галерея скриптов TechNet
Отчет о статистике устройства ActiveSync
По мере того, как сотрудники приходят и уходят в вашей организации, среда Exchange имеет тенденцию накапливать устаревшие мобильные устройства. Этот сценарий PowerShell сгенерирует отчет о мобильных устройствах, которые не синхронизировались в течение указанного количества дней. Вы также можете использовать его, чтобы просмотреть подробную информацию, например, с какими марками и моделями мобильных устройств подключаются ваши пользователи. Отчет создается в форматах электронной почты CSV и HTML.
Запись в блоге | Галерея скриптов TechNet
Отчет об адресе получателя
Майк Кроули написал этот сценарий для создания отчета по адресам прокси-сервера SMTP каждого получателя, что очень полезно в широком диапазоне сценариев миграции и управления.
Блог Майка | Галерея скриптов TechNet
Обновить разрешения папки календаря
Exchange MVP Лассе Петтерссон решает, нужно ли вам запускать Set-Mailboxfolderpermission, Add-Mailboxfolderpermissions или Remove-Mailboxfolderpermission, объединив все это в один сценарий, который позволяет добавлять, обновлять или удалять разрешения для папок почтового ящика.
Блог Лассе | Галерея скриптов TechNet
Что не хватает?
Знаете ли вы полезный сценарий PowerShell, о котором должны знать администраторы Exchange? Не стесняйтесь оставлять комментарии ниже.
Обратите внимание, пожалуйста, не вставляйте все содержимое скрипта в комментарии ниже. Опубликуйте свой сценарий в TechNet, Github или в другом месте, если хотите поделиться им с сообществом.
Пол — Microsoft MVP по приложениям и службам Office и автор Pluralsight.Он работает консультантом, писателем и инструктором, специализируясь на Office 365 и Exchange Server.
Как использовать параметры в PowerShell, часть I
Пока что серий:
- Как использовать параметры в PowerShell, часть I
- Как использовать параметры в PowerShell, часть II
Недавно у меня был клиент, который просил меня обновить сценарий как в рабочей среде, так и в UAT. Он хотел, чтобы все отправляемые электронные письма содержали название среды. Это был простой запрос, и я предложил простое решение.Я только что создал новую переменную:
После обновления сценария для производственной среды я изменил тему всех исходящих писем, включив в них новую переменную.
В то время я хотел сделать это лучше, и не только для этой переменной, но и для других, которые я использую в скрипте. Когда я писал этот скрипт, я еще только начинал писать PowerShell, поэтому я просто жестко запрограммировал в него переменные. Вскоре стало очевидно, что это было неоптимально, когда мне нужно было перенести сценарий из Dev \ UAT в рабочую среду, потому что некоторые переменные необходимо было обновлять между средами.
К счастью, как и большинство языков, PowerShell разрешает использование параметров, но, как и многие другие вещи в PowerShell, есть несколько способов сделать это. Я покажу вам, как это сделать двумя разными способами, и объясню, почему я предпочитаю один метод другому.
Давай поспорим
Первый и, возможно (посмотрите, что я там сделал), самый простой способ получить аргументы командной строки — это написать что-то вроде следующего:
$ param1 = $ args [0] хост записи $ param1 |
Если вы запустите это из PowerShell ISE, нажав F5 , ничего интересного не произойдет.Это случай, когда вам нужно будет запустить сохраненный файл из консоли ISE и указать значение для аргумента.
Чтобы убедиться, что PowerShell выполняет то, что вы хотите, перейдите в командной строке в тот же каталог, где вы сохраните свои скрипты. Назовите сценарий Безымянный_Аргументы_Example_1.ps1 и запустите его с аргументом FOO . Это будет эхом FOO . (Скрипты для этой статьи можно найти здесь.)
.\ Безымянный_аргументы_Example_1.ps1 FOO |
Вы, наверное, уже догадались, что, поскольку $ args
является массивом, вы можете получить доступ к нескольким значениям из командной строки.
Сохраните следующий сценарий как Безымянный_аргументы_Example_2.ps1.
$ servername = $ args [0] $ envname = $ args [1] write-host «Если бы этот сценарий действительно собирался что-то делать, он делал бы это на $ servername в среде $ envname» |
Запустите его следующим образом:
.\ Безымянный_аргументы_Example_2.ps1 HAL Odyssey |
Вы должны увидеть:
Одна хорошая возможность читать аргументы таким образом заключается в том, что вы можете передавать произвольное количество аргументов, если вам нужно. Сохраните следующий пример как Безымянный_аргументы_Example_3.ps1
write-host «Всего аргументов $ ($ args.count)» для ($ i = 0; $ i -lt $ args.считать; $ i ++) { write-host «Аргумент $ i равен $ ($ args [$ i])» } |
Если звонить так:
. \ Безымянный_Arguments_Example_3.ps1 foo bar baz |
Получается:
Метод работает, но я бы сказал, что он не идеален. Во-первых, вы можете случайно передать параметры в неправильном порядке.Во-вторых, он не дает пользователю никакой полезной обратной связи. Ниже я опишу предпочтительный метод.
Использование именованных параметров
Скопируйте следующий сценарий и сохраните его как Named_Parameters_Example_1.ps1 .
параметр ($ param1) узел записи $ param1 |
Затем запустите его.
.\ Named_Parameters_Example_1.ps1 |
При таком запуске ничего не произойдет.
А теперь введите:
. \ Named_Parameters_Example_1.ps1 тест |
И вы увидите, что ваш скрипт откликнется эхом на слово test .
Это то, что вы могли ожидать, но предположим, что у вас есть несколько параметров, и вы хотите убедиться, что вы присвоили правильное значение каждому из них.У вас могут возникнуть проблемы с запоминанием их имен и, возможно, их порядка. Но это нормально; PowerShell умен. Введите ту же команду, что и выше, но добавьте тире (-) в конце.
. \ Named_Parameters_Example_1.ps1 — |
PowerShell должен теперь выскочить небольшое раскрывающееся меню, которое показывает вам доступные параметры. В этом случае у вас есть только один параметр, param1
.Нажмите вкладку для автозаполнения и введите слово test или любое другое слово, которое хотите, и вы должны увидеть что-то похожее на:
. \ Named_Parameters_Example_1.ps1 -param1 test |
Теперь, если вы нажмете Enter, вы снова увидите слово test .
Если вы запускаете сценарий непосредственно из самой PowerShell, а не из ISE, завершение табуляции по-прежнему покажет вам доступные параметры, но не всплывет на маленьком красивом экране.
Создайте и сохраните следующий сценарий как Named_Parameters_Example_2.ps1 .
param ($ servername, $ envname) write-host «Если бы этот скрипт действительно собирался что-то делать, он делал бы это на $ servername в среде $ envname» |
Обратите внимание, что теперь у вас есть два параметра.
По умолчанию PowerShell будет использовать положение параметров в файле, чтобы определить, что это за параметр, когда вы его вводите.Это означает, что будет работать следующее:
. \ Named_Parameters_Example_2.ps1 HAL Odyssey |
Результат будет:
Вот где проявляется красота названных параметров. Помимо того, что вам не нужно помнить, какие параметры могут понадобиться скрипту, вам не нужно беспокоиться о порядке их ввода.
.\ Named_Parameters_Example_2.ps1 -envname Odyssey -servername HAL |
Это приведет к тому же результату, что и выше, чего и следовало ожидать:
Если вы использовали завершение табуляцией для ввода имен параметров, вы заметите, что как только вы введете значение для одного из параметров (например, –envname
выше), когда вы попытаетесь использовать завершение табуляции для другого параметра, отображаются только остальные параметры.Другими словами, PowerShell не позволит вам ввести один и тот же параметр дважды, если вы используете автодополнение.
Если вы зададите одно и то же имя параметра дважды, PowerShell выдаст вам ошибку, подобную:
Один вопрос, который, вероятно, приходит в голову в этот момент, заключается в том, как вы будете обрабатывать параметр с пробелом в нем. Например, как ввести путь к файлу, например C: \ path to file \ File.ext .
Ответ прост; вы можете заключить параметр в кавычки:
.\ Named_Parameters_Example_2.ps1 -servername HAL -envname ‘USS Odyssey’ |
Код приведет к:
Благодаря гибкости PowerShell и цитированию вы можете сделать что-то вроде:
. \ Named_Parameters_Example_2.ps1 -servername HAL -envname «USS Odyssey» |
Вы снова увидите это сообщение:
Если вы поэкспериментируете с вводом разных значений в приведенные выше скрипты, вы заметите, что неважно, вводите ли вы строку, число или почти все, что хотите.Это может быть проблемой, если вам нужно контролировать тип данных, вводимых пользователем.
Это приводит к вводу ваших переменных параметров. Обычно я не делаю этого для переменных в самих сценариях PowerShell (потому что в большинстве случаев я контролирую, как эти переменные используются), но я почти всегда обеспечиваю типизацию своих переменных параметров, чтобы иметь некоторую проверку ввода.
Подумайте, почему это может быть важно. Сохраните следующий сценарий как Named_Parameters_Example_3.пс1
param ([int] $ anInt, $ mightanInt) write-host «Добавление $ anint к самому себе приводит к: $ ($ anInt + $ anInt)» write-host «Но при попытке добавить $ mayanInt к самому себе результат: $ ($ mayanInt + $ mayanInt) « |
Теперь запустите его следующим образом:
.\ Named_Parameters_Example_3.ps1 -anInt 5 -maybeanInt 6 |
Вы получите ожидаемые результаты:
Что делать, если вы не контролируете передаваемые данные, а передающая программа передает элементы в строках в кавычках?
Для имитации этого запуска скрипта с небольшими изменениями:
. \ Named_Parameters_Example_3.ps1 -anInt «5» -maybeanInt «6» |
Это приведет к:
Если вместо этого вы объявляете $ mayanInt
как [int]
, как вы сделали $ anInt
, вы можете гарантировать, что они складываются вместе, а не объединяются.
Однако имейте в виду, если кто-то попытается вызвать тот же сценарий с реальной строкой, например:
. \ Named_Parameters_Example_3.ps1 Foo 6 |
Он вернет сообщение о грубой ошибке, так что это может быть палкой о двух концах.
Использование значений по умолчанию
При запуске сценария я предпочитаю, чтобы он требовал как можно меньше набора текста и по возможности устранял ошибки.Это означает, что я стараюсь использовать значения по умолчанию.
Измените сценарий Named_Parameters_Example_2.ps1 следующим образом и сохраните его как Named_Parameters_Example_4.ps1
param ($ servername, $ envname = ‘Odyessy’) write-host «Если бы этот сценарий действительно собирался что-то делать, он бы сделал это на $ servername в среде $ envname» |
А затем запустите его следующим образом:
.\ Named_Parameters_Example_4.ps1 -servername HAL |
Не утруждайте себя вводом имени среды. Должно получиться:
Это небольшая экономия при вводе текста, но делает его немного проще и означает, что вам не нужно запоминать, как писать по буквам Odyssey !
Также могут быть случаи, когда вам не нужен параметр по умолчанию, но вы абсолютно хотите убедиться, что значение введено. Вы можете сделать это, проверив, имеет ли параметр значение NULL, а затем предложив пользователю ввести данные.
Сохраните следующий сценарий как Named_Parameters_Example_5.ps1 .
param ($ servername, $ envname = ‘Odyessy’) if ($ servername -eq $ null) { $ servername = read-host -Prompt «Пожалуйста, введите имя сервера» } write-host «Если бы этот сценарий действительно собирался что-то делать, он бы сделал это на $ servername в среде $ envname» |
Вы заметите, что это объединяет оба параметра: параметр по умолчанию и тестирование, чтобы увидеть, является ли $ servername
нулевым, и, если это так, запрос пользователя ввести значение.
Вы можете запустить это из командной строки несколькими способами:
. \ Named_Parameters_Example_5.ps1 -servername HAL |
Он будет делать именно то, что вы думаете: использовать переданное в имени сервера значение HAL и среду по умолчанию Odyssey .