Разное

Полезные 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

      1. Откройте оболочку Windows PowerShell и для отображения списка источников пакетов, которые зарегистрированы в OneGet на локальном компьютере выполните команду Get-PackageSource. Обратите внимание на то, что если в команде вы указываете конкретный поставщик пакета, то в таком случае командлет Get-PackageSource отобразит для вас только те источники, которые связаны с указанным вами поставщиком. В противном случае команда возвращает все источники пакетов, которые зарегистрированы в OneGet. Так как нам нужно просмотреть источники пакетов для всех провайдеров, команда будет выполняться без каких-либо дополнительных параметров. Обязательно обратите внимание на то, что на данном этапе у вас дополнительный поставщик пакетов, который будет использоваться для инсталляции программных продуктов еще не установлен. Выходные данные команды вы можете посмотреть на следующем изображении:

Установка программ средствами PowerShell в Windows 10

  1. Рис. 1. Команда Get-PackageSource.
  2. Как видно на предыдущей иллюстрации, поставщик Chocolatey не установлен на нашем локальном компьютере. Следовательно, это нужно исправить. Обратите внимание на то, что для добавления поставщика пакетов у параметра ExecutionPolicy оболочки PowerShell должно быть установлено значение Unrestricted. В противном случае добавить поставщик не получится. Напомню, что командлет Get-ExecutionPolicy позволяет вам отобразить политики выполнения для текущего сеанса. Политика выполнения – это часть стратегии безопасности оболочки Windows PowerShell, которая определяет, можно ли загружать файлы конфигурации и выполнять скрипты, а также определяет, для выполнения каких скриптов требуется цифровая подпись. По умолчанию используется значение «Restricted» (не загружает файлы конфигурации и не выполняет скрипты), поэтому если вы у себя не изменяли значение политики выполнения – выполните команду Set-Executionpolicy Unrestricted. Так как по умолчанию областью политики выполнения является значение LocalMachine, чтобы параметры политики распространялись только на текущего пользователя, вы можете к применяемой команде еще добавить параметр –Scope со значением CurrentUser. Выходные данные этих двух команд видно на следующей иллюстрации:
  1. Рис. 2. Изменение параметров политики выполнения.
  2. На этом этапе мы можем посмотреть список поставщиков, которые зарегистрированы в OneGet на текущем компьютере. Для этого вы можете воспользоваться командлетом Get-PackageProvider. Данный командлет, как я уже успел упомянуть немного выше, возвращает список поставщиков пакетов, которые уже подключены в OneGet. При желании вы можете отфильтровать результаты, основанные на всех или на части одного (нескольких) имени поставщика. Например, чтобы посмотреть, какие поставщики подключены на данный момент, вы должны выполнить командлет Get-PackageProvider без каких-либо дополнительных параметров. Как видно на следующей иллюстрации, изначально на компьютере у меня подключено 4 таких поставщика, о которых я уже сегодня вам рассказывал. Теперь, чтобы установить поставщик Chocolatey на компьютере вам нужно выполнить команду Get-PackageProvider –Name Chocolatey –ForceBootstrap, где параметр –ForceBootstrap отвечает за автоматическую установку поставщика. Обратите внимание на то, что, как правило, при установке поставщика Chocolatey также должен быть просинталлирован поставщик NuGet. Как видно на следующей иллюстрации, после повторного использования командлета Get-PackageProvider, устанавливаемый нами поставщик уже должен фигурировать в списке:
      1. Рис. 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 сторонний поставщик пакетов и как при его помощи можно находить, устанавливать, сохранять и удалять программные продукты.

источник

Powershell скрипты — Системный Администратор

Доброго времени суток дорогие читатели. В данной статье мы познакомимся с основами Powershell. Данный язык программирования используется во всех ОС Microsoft начиная с Windows XP SP3. Писать Powershell скрипты должен уметь каждый уважающий себя системный администратор windows.

Все команды в Powershell как правило используются в форме командлетов. Все командлеты это специализированные классы .NET Framework и .NET Core (используется в PowerShell Core 6 и выше).

Powershell класса .NET Framework это версии с 1 по 5.1 а Powershell .NET Core это версия 6 и выше (на данный момент 7.0). По заявлению Microsoft новых функций в Powershell 5.1 (.NET Framework) вносить уже не будут. Однако 7 версия еще не полностью поддерживает все модули предыдущих версий. Но судя по всему Microsoft стремится к этому и скоро версия Core будет единственной. В общем cmd отходит в прошлое и теперь без Powershell никуда. Давайте приступим к практике. Так всегда лучше запоминается материал.

Запуск Powershell

На примере Windows 10 Powershell можно запустить просто нажав правой кнопкой мыши на меню пуск.

Также нижняя строчка позволяет запустить Powershell с повышенными правами администратора.

Еще можно воспользоваться поиском в WIndows 10 и ввести название powershell

Как видно на картинке выше нашелся не только Powershell но и Powershell ISE. Консоль powershell удобна если требуется запустить последовательно не больше одной команды. Либо несколько команд в конвейере. Однако в случае написания полноценных скриптов лучше использовать Powershell ISE. Это бесплатная среда разработки сценариев на языке Powershell поставляется вместе с ОС Windows.

Окно Powershell

Окно Powershell ISE

Сразу после запуска консоли рекомендую запустить командлет Get-Help – встроенная справка по всем командлетам, аналог man в Linux.

Get-Help

Get-Help

Видим что консоль предлагает обновить встроенную помощь. Нажимаем Y и соглашаемся.

Командлеты

Командлеты – это название команд в Powershell. Каждый командлет реализует заложенную в него функциональность. Как правило наименование командлета состоит из пары: глагол-существительное. Например: Get-Help – получить помощь. Обычно Get используется чтобы получить информация, Set – внести изменение, New – создать новый объект, политику и т.п. и Remove -удалить объект, политику и т.п.

Командлеты не чувствительны к регистру. Написать Get или get не важно, powershell воспримет эти команды одинаково.

Чтобы получить список всех доступных командлетов необходимо использовать Get-Command

Get-Command

Get-Command

Для получения справки по любому командлету напишите Get-Help имя-комндлета. Например

Get-Help Get-Command

Давайте представим что нам необходимо вывести список командлетов для управления процессами. Воспользуемся Get-Command и укажем ему параметры для более точного поиска.

Get-Command *Process*

Get-Command *Process*

И вот мы видим список командлетов позволяющих управлять процессами: Get-Process – список всех запущенных процессов, Start-Process – запустить указанный процесс, Stop-Process– остановить указанный процесс, Wait-Process – ожидать указанный процесс. Как видно из названий командлетов можно легко понять для чего каждый служит.

Используя командлет Get-Help можно получить справку по любому командлету.

PS C:\WINDOWS\system32> Get-Help Get-Process

ИМЯ
    Get-Process

ОПИСАНИЕ
    Gets the processes that are running on the local computer or a remote computer.


СИНТАКСИС
    Get-Process [[-Name] <System.String[]>] [-ComputerName <System.String[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]

    Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -Id <System.Int32[]> [-Module] [<CommonParameters>]

    Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -InputObject <System.Diagnostics.Process[]> [-Module] [<Com
    monParameters>]

    Get-Process -Id <System.Int32[]> -IncludeUserName [<CommonParameters>]

    Get-Process [[-Name] <System.String[]>] -IncludeUserName [<CommonParameters>]

    Get-Process -IncludeUserName -InputObject <System.Diagnostics.Process[]> [<CommonParameters>]


ОПИСАНИЕ
    The `Get-Process` cmdlet gets the processes on a local or remote computer.

    Without parameters, this cmdlet gets all of the processes on the local computer. You can also specify a particular process b
    y process name or process ID (PID) or pass a process object through the pipeline to this cmdlet.

    By default, this cmdlet returns a process object that has detailed information about the process and supports methods that l
    et you start and stop the process. You can also use the parameters of the `Get-Process` cmdlet to get file version informati
    on for the program that runs in the process and to get the modules that the process loaded.


ССЫЛКИ ПО ТЕМЕ
    Online Version: https://docs.microsoft.com/powershell/module/microsoft.powershell.management/get-process?view=powershell-5.1
    &amp;WT.mc_id=ps-gethelp
    Debug-Process
    Get-Process
    Start-Process
    Stop-Process
    Wait-Process

ЗАМЕЧАНИЯ
    Для просмотра примеров введите: "get-help Get-Process -examples".
    Для получения дополнительных сведений введите: "get-help Get-Process -detailed".
    Для получения технических сведений введите: "get-help Get-Process -full".
    Для получения справки в Интернете введите: "get-help Get-Process -online"

При использовании командлета есть возможность указать несколько параметров при запуске. Первый параметр можно не называть. Выше я писал Get-Command *Process* где указал поиск командлетов со словом Process. Однако я не написал параметр -Name, хотя именно его и указал. Если полностью то поиск по имени выглядит так: Get-Command -Name *Process* . В случае отсутствия непосредственного указания -Name Powershell принимает в качестве имени введенное слово *Process*.

Давайте выведем список процессов с именем WhatsApp

Get-Process -Name WhatsApp -IncludeUserName

Get-Process

Мы вывели все процессы с именем WhatsApp и добавили в вывод дополнительный параметр -IncludeUserName, что позволило нам увидеть кем запущен процесс.

Алиасы

Алиасы в Powershell это по сути более короткие названия командлетов. Т.е. любому командлету можно присвоить свое короткое имя (alias). Например алиасом для командлета Get-Process является gps. Согласитесь куда проще и быстрее написать gps чем Get-Process.

Список всех alias можно получить используя командлет Get-Alias

PS C:\WINDOWS\system32> get-alias

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           asnp -> Add-PSSnapin
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           CFS -> ConvertFrom-String                          3.1.0.0    Microsoft.PowerShell.Utility
Alias           chdir -> Set-Location
Alias           clc -> Clear-Content
Alias           clear -> Clear-Host
Alias           clhy -> Clear-History
Alias           cli -> Clear-Item
Alias           clp -> Clear-ItemProperty
Alias           cls -> Clear-Host
Alias           clv -> Clear-Variable
Alias           cnsn -> Connect-PSSession
Alias           compare -> Compare-Object
Alias           copy -> Copy-Item
Alias           cp -> Copy-Item
Alias           cpi -> Copy-Item
Alias           cpp -> Copy-ItemProperty
Alias           curl -> Invoke-WebRequest
Alias           cvpa -> Convert-Path
Alias           dbp -> Disable-PSBreakpoint
Alias           del -> Remove-Item
Alias           diff -> Compare-Object
Alias           dir -> Get-ChildItem
Alias           dnsn -> Disconnect-PSSession
Alias           ebp -> Enable-PSBreakpoint
Alias           echo -> Write-Output
Alias           epal -> Export-Alias
Alias           epcsv -> Export-Csv
Alias           epsn -> Export-PSSession
Alias           erase -> Remove-Item
Alias           etsn -> Enter-PSSession
Alias           exsn -> Exit-PSSession
Alias           fc -> Format-Custom
Alias           fhx -> Format-Hex                                  3.1.0.0    Microsoft.PowerShell.Utility
Alias           fl -> Format-List
Alias           foreach -> ForEach-Object
Alias           ft -> Format-Table
Alias           fw -> Format-Wide
Alias           gal -> Get-Alias
Alias           gbp -> Get-PSBreakpoint
Alias           gc -> Get-Content
Alias           gcb -> Get-Clipboard                               3.1.0.0    Microsoft.PowerShell.Management
Alias           gci -> Get-ChildItem
Alias           gcm -> Get-Command
Alias           gcs -> Get-PSCallStack
Alias           gdr -> Get-PSDrive
Alias           ghy -> Get-History
Alias           gi -> Get-Item
Alias           gin -> Get-ComputerInfo                            3.1.0.0    Microsoft.PowerShell.Management
Alias           gjb -> Get-Job
Alias           gl -> Get-Location
Alias           gm -> Get-Member
Alias           gmo -> Get-Module
Alias           gp -> Get-ItemProperty
Alias           gps -> Get-Process
Alias           gpv -> Get-ItemPropertyValue
Alias           group -> Group-Object
Alias           gsn -> Get-PSSession
Alias           gsnp -> Get-PSSnapin
Alias           gsv -> Get-Service
Alias           gtz -> Get-TimeZone                                3.1.0.0    Microsoft.PowerShell.Management
Alias           gu -> Get-Unique
Alias           gv -> Get-Variable
Alias           gwmi -> Get-WmiObject
Alias           h -> Get-History
Alias           history -> Get-History
Alias           icm -> Invoke-Command
Alias           iex -> Invoke-Expression
Alias           ihy -> Invoke-History
Alias           ii -> Invoke-Item
Alias           ipal -> Import-Alias
Alias           ipcsv -> Import-Csv
Alias           ipmo -> Import-Module
Alias           ipsn -> Import-PSSession
Alias           irm -> Invoke-RestMethod
Alias           ise -> powershell_ise.exe
Alias           iwmi -> Invoke-WmiMethod
Alias           iwr -> Invoke-WebRequest
Alias           kill -> Stop-Process
Alias           lp -> Out-Printer
Alias           ls -> Get-ChildItem
Alias           man -> help
Alias           md -> mkdir
Alias           measure -> Measure-Object
Alias           mi -> Move-Item
Alias           mount -> New-PSDrive
Alias           move -> Move-Item
Alias           mp -> Move-ItemProperty
Alias           mv -> Move-Item
Alias           nal -> New-Alias
Alias           ndr -> New-PSDrive
Alias           ni -> New-Item
Alias           nmo -> New-Module
Alias           npssc -> New-PSSessionConfigurationFile
Alias           nsn -> New-PSSession
Alias           nv -> New-Variable
Alias           ogv -> Out-GridView
Alias           oh -> Out-Host
Alias           popd -> Pop-Location
Alias           ps -> Get-Process
Alias           pushd -> Push-Location
Alias           pwd -> Get-Location
Alias           r -> Invoke-History
Alias           rbp -> Remove-PSBreakpoint
Alias           rcjb -> Receive-Job
Alias           rcsn -> Receive-PSSession
Alias           rd -> Remove-Item
Alias           rdr -> Remove-PSDrive
Alias           ren -> Rename-Item
Alias           ri -> Remove-Item
Alias           rjb -> Remove-Job
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           rmo -> Remove-Module
Alias           rni -> Rename-Item
Alias           rnp -> Rename-ItemProperty
Alias           rp -> Remove-ItemProperty
Alias           rsn -> Remove-PSSession
Alias           rsnp -> Remove-PSSnapin
Alias           rujb -> Resume-Job
Alias           rv -> Remove-Variable
Alias           rvpa -> Resolve-Path
Alias           rwmi -> Remove-WmiObject
Alias           sajb -> Start-Job
Alias           sal -> Set-Alias
Alias           saps -> Start-Process
Alias           sasv -> Start-Service
Alias           sbp -> Set-PSBreakpoint
Alias           sc -> Set-Content
Alias           scb -> Set-Clipboard                               3.1.0.0    Microsoft.PowerShell.Management
Alias           select -> Select-Object
Alias           set -> Set-Variable
Alias           shcm -> Show-Command
Alias           si -> Set-Item
Alias           sl -> Set-Location
Alias           sleep -> Start-Sleep
Alias           sls -> Select-String
Alias           sort -> Sort-Object
Alias           sp -> Set-ItemProperty
Alias           spjb -> Stop-Job
Alias           spps -> Stop-Process
Alias           spsv -> Stop-Service
Alias           start -> Start-Process
Alias           stz -> Set-TimeZone                                3.1.0.0    Microsoft.PowerShell.Management
Alias           sujb -> Suspend-Job
Alias           sv -> Set-Variable
Alias           swmi -> Set-WmiInstance
Alias           tee -> Tee-Object
Alias           trcm -> Trace-Command
Alias           type -> Get-Content
Alias           wget -> Invoke-WebRequest
Alias           where -> Where-Object
Alias           wjb -> Wait-Job
Alias           write -> Write-Output

Как видно из списка для alias использованы аналогичные по значению команды из Linux: ls, man, mount, md, kill и т.п. Видимо чтобы линуксоиду было по привычнее 🙂 Можно создать свой alias используя командлет New-Alias

Конвейер

Конвейер используется для передачи выходных данных командлета идущего вначале во входные данные командлета следующего за ним. Ничего непонятно? 🙂 Давайте на примерах, так всегда яснее.

Возьмем уже известный нам командлет Get-Process, посмотрим на его вывод

Get-Process

Как по мне многовато лишних столбцов. Мне эта информация не нужна, поэтому я выберу только нужные данные. Для таких целей служит командлет Select-Object. Давайте используем его в конвейере.

Get-Process|Select-Object ID,CPU,ProcessName

Get-Process|Sort-Object

Как вы уже наверно догадались конвейер обозначается знаком | и идет сразу следом за командлетом. И так данные по конвейеру можно передавать и дальше другим командлетам. Итак я передал выходные данные (список запущенных процессов) на вход командлета Select-Object. Который в свою очередь выбрал данные по 3 столбцам ID, CPU, ProcessName. Теперь можно передать эти данные дальше. Например выгрузить в текстовый файл

Get-Process|Select-Object ID,CPU,ProcessName|Out-File C:\TMP\out.txt

Просто не правда ли? У нас конвейер из трех командлетов, на выходе которого получаем текстовый файл со списком запущенных процессов и необходимой информацией по ним.

Структура объектов

В Powershell объекты играют самую важную роль. От типа объекта зависит что именно с ним можно сделать. Узнать тип объекта и вывести список всех его элементов позволяет команда Get-Member

Get-Process|Get-member

Get-Process|get-Member

Вот далеко не полный список элементов командлета Get-Process. В данному случае тип данных это System.Diagnostics.Process

Давайте посмотрим тип данных у новой переменной

$new="Test"
$new|Get-Member

Get-Member String

В данном случае тип данных System.String т.е. строка. Что вполне логично. А теперь посмотрите что можно сделать с этой строкой с учетом указанных выше параметров.

Get-Member methods

Как видно на картинке выше мы заключаем нашу тестовую переменную $new в скобки и после них пишем точку и указываем метод. В примере я использовал три метода:

  • ToUpper – перевод всех букв в строке в верхний регистр
  • ToLower – перевод всех букв в строке в нижний регистр
  • Length – подсчитать количество символов в строке

Это всего лишь небольшой пример что можно сделать с параметрами объекта. Чаще используйте Get-Member и вы откроете для себя безграничные возможности манипуляции над объектами.

Скрипты Powershell

В самом начале статьи указал на встроенный инструмент Powershell ISE. Давайте запустим его и создадим свой первый скрипт. Кстати скрипты сохраняются в файлах с расширением ps1

Скрипт будет запускать блокнот, далее выполняется проверка если блокнот запущен выводится сообщение об этом и после блокнот закрывается. Если блокнот не запущен то выводится соответствующее сообщение об этом. На самом деле блокнот будет всегда запущен, т.к. мы вначале скрипта написали Start-Process notepad

Start-Process notepad
$a=Get-Process notepad
if ($a.ProcessName -like "Notepad")
{
Write-Host "Блокнот запущен, давайте его закроем"
Stop-Process -name notepad
}
else 
{
Write-Host "Блокнот не запущен, что поделать"
}

Powershell скрипты

В этом скрипте я использовал цикл if else. О циклах будет подробнее в следующей статье. Итак давайте сохраним скрипт и выполним его.

В ответ мы получим такую ошибку:

Невозможно загрузить файл, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см.
 about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=1351
70.
    + CategoryInfo          : Ошибка безопасности: (:) [], ParentContainsError 
   RecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

Все верно, изначально в WIndows запрещено выполнять скрипты Powershell. Это сделано для повышения безопасности системы. Для включения возможности запуска скриптов Powershell необходимо запустить Powershell от Администратора и ввести командлет Set-ExecutionPolicy с одним из параметров:

  • Restricted – политика по умолчанию. Выполнение всех скриптов запрещено
  • RemoteSigned – разрешено запускать собственные скрипты и подписанные доверенным разработчиком
  • AllSigned – разрешено запускать скрипты, подписанные доверенным разработчиком. Каждый раз перед запуском такого скрипта PowerShell будет запрашивать подтверждение
  • Unrestricted – в системе разрешается запускать любые скрипты

Если вы полностью уверены в запускаемых скриптах можете поставить Unrestricted. Давайте так и сделаем

Set-ExecutionPolicy -Unrestricted

Set-ExecutionPolicy

Будет предупреждение по безопасности, соглашаемся нажав Y

Можем посмотреть текущую настройку политики безопасности при помощи командлета Get-ExecutionPolicy

Get-ExecutionPolicy

Get-ExecutionPolicy

В данной статье мы рассмотрели основы чтобы подготовиться писать скрипты Powershell. В следующих статьях мы более подробно изучим циклы, массивы, функции, работу со строками и много другое. Кстати вот раздел посвященный Powershell. Там много всего интересного 😉

Рекомендую к прочтению:

Десять команд PowerShell, которые должен знать каждый администратор Windows

В последние годы Microsoft активно старается сделать PowerShell Windows 7 ключевым административным инструментом. Практически все новые серверные продукты Microsoft требуют использования команд PowerShell, а целый ряд задач по обслуживанию системы невозможно выполнить без командной строки, поэтому каждый администратор Windows обязан знать основы PowerShell. Представляем десять наиболее полезных команд.

1. Get-Help

Первый командлет, который должен знать каждый администратор, — это Get-Help. С его помощью можно получить справочную информацию по любой другой команде. Например, чтобы узнать полный синтаксис для команды Get-Process, можно воспользоваться следующей командой:

Get-Help -Name Get-Process

Get-Help также можно использовать с отдельными существительными и глаголами. Например, чтобы получить список команд с глаголом Get, можно воспользоваться следующей командой:

Get-Help -Name Get-*

2. Set-ExecutionPolicy

Хотя PowerShell предусматривает возможность создавать и выполнять сценарии, по умолчанию эта опция отключена, чтобы предотвратить исполнение вредоносного программного кода. Управлять разрешениями на выполнение сценариев можно с помощью команды Set-ExecutionPolicy. Доступны четыре уровня безопасности:

• Restricted — выполнение сценариев запрещено. Эта опция установлена по умолчанию. Команды в таком случае можно выполнять только в интерактивном режиме.

• All Signed — разрешено выполнение только сценариев, подписанных доверенным издателем.

• Remote Signed — разрешено выполнение любых сценариев, созданных локально, а сценарии, созданные на удаленных системах, выполняются только в том случае, если подписаны доверенным издателем.

• Unrestricted — разрешено выполнение абсолютно любых сценариев.

Чтобы применить определенную политику выполнения сценариев, можно воспользоваться командой Set-ExecutionPolicy с указанием имени политики. Например, разрешить неограниченное выполнение сценариев можно следующей командой:

Set-ExecutionPolicy Unrestricted

3. Get-ExecutionPolicy

Приступая к работе на незнакомом сервере, стоит для начала выяснить, какая на нем действует политика выполнения сценариев. Узнать это можно с помощью команды Get-ExecutionPolicy.

4. Get-Service

С помощью команды Get-Service можно получить список всех установленных в системе служб. Чтобы проверить состояние определенной службы, можно дополнить команду переключателем -Name с именем службы (допустимо использование групповых символов).

5. ConvertTo-HTML

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

Возьмем для примера команду Get-Service, позволяющую получить список служб, и создадим на ее основе HTML-отчет с указанием имени и состояния каждой установленной в системе службы. Для этого можно воспользоваться следующей командой:

Get-Service | ConvertTo-HTML -Property Name, Status > C:\services.htm

6. Export-CSV

Отчеты можно сохранять не только в HTML, но и экспортировать в формат CSV для просмотра в Microsoft Excel. Синтаксис команды, которая применяется для этой цели, аналогичен ConvertTo-HTML. Обязательно следует указать имя файла для сохранения отчета. Например, экспортировать список служб в CSV-файл можно следующей командой:

Get-Service | Export-CSV c:\service.csv

7. Select-Object

При выполнении описанной выше команды CSV-отчет будет включать огромную массу информации, но иногда бывает полезно ограничить набор сведений. Сделать это можно с помощью команды Select-Object, которая позволяет указать, какие свойства должны быть включены в отчет. Например, чтобы создать CSV-отчет с перечислением имен и состояний всех системных служб, можно воспользоваться следующей командой:

Get-Service | Select-Object Name, Status | Export-CSV c:\service.csv

8. Get-EventLog

Команду Get-EventLog можно использовать для синтаксического анализа журналов событий. К ней предлагается целый ряд дополнительных параметров, но чтобы получить представление о том, как она работает, достаточно указать переключатель -Log и имя файла журнала. Например, посмотреть журнал какого-нибудь приложения, можно воспользоваться следующей командой:

Get-EventLog -Log "Имя приложения"

На практике эта команда применяется довольно редко. Чаще всего вместо нее используются другие команды, позволяющие отфильтровать данные и сохранить их в формате CSV или HTML.

9. Get-Process

Если команда Get-Service выводит список всех системных служб, то команда Get-Process позволяет получить список всех запущенных в данный момент процессов.

10. Stop-Process

Когда тот или иной процесс зависает, можно выяснить его имя или идентификатор с помощью команды Get-Process, а затем завершить процесс командой Stop-Process с указанием его имени или идентификатора. Например, процесс «Notepad.exe» для Блокнота можно завершить одной из следующих команд:

Stop-Process -Name notepad
Stop-Process -ID 2668

Только не стоит забывать, что идентификатор процесса меняется от сеанса к сеансу.

Автор: Brien Posey
Перевод SVET



Оцените статью: Голосов 9

Непонятные штуки — $_ и %

Очень часто нам приходится совершать некую операцию над группой объектов — файлов, процессов, текстовых строк, и т.д. Делать это в PowerShell можно разными способами. Например For:

# Получаем объекты представляющие файлы в переменную $files
$Files = dir C:\root\test
# С помощью for: 
#    1) объявляем переменную $i, и присваиваем ей значение 0
#    2) указываем условие повторения цикла($i меньше количества файлов)
#    3) указываем что после каждого выполнения цикла надо увеличить $i на еденицу
for ($i=0; $i -lt $files.Count; $i++) 
{
    # Пока условие удовлетворяется, вызываем утилиту md5.exe, передавая ей в
    # качестве аргумента элемент массива файлов под номером $i (отсчет идет с 0)
    md5.exe $files[$i]
}

И вот результат:

For очень популярен, присутствует во множестве языков, но тем не менее обладает некоторыми недостатками. Во первых это необходимость использования временной переменной для перебора, во вторых — излишняя сложность конструкции. Гораздо проще для перебора группы объектов использовать ForEach:

# Получаем объекты представляющие файлы в переменную $files
$Files = dir C:\root\test
# Каждый объект из $Files по очереди помещяется в переменную $File
ForEach ($File in $Files)
{
    # ... и выполняется блок кода...
    md5.exe $File
}

Или еще короче:

Способ отличный, но тоже не лишен недостатков. Обычно работая в консоли я сначала выполняю команду dir или get-*, для того чтобы посмотреть на список объектов, а затем уже хочу обработать их. Для использования ForEach мне пришлось бы возвращаться в начало строки, дописывать там Foreach ($obj in ( затем идет код получения объектов, затем закрывающие скобки и затем уже код для выполнения. Не слишком удобно для быстрой работы. Но к счастью есть командлет Foreach-Object. В него можно просто перенаправить полученные объекты, и указать блок кода для выполнения. При этом даже не нужно указывать имя для временного объекта — он всегда будет представлен под именем $_ 😉

Так как этот командлет предназначен в первую очередь для интерактивной работы, то у него есть два псевдонима: ForEach (хоть и почти идентичен ранее упомянутому ключевому слову, путать их не стоит) и % (знак процента). Вот это уже гораздо удобнее для работы в шелле, хоть и выглядит страшновато для непосвященных 😉

Удобнее может быть только использование PowerShell’овских командлетов или скриптов умеющих обрабатывать объекты получаемые по конвейеру. Тут уже не надо никаких For и Foreach 😉

На самом деле я изложил тут лишь одно применение переменной $_ (кстати она называется «Default variable»), хоть и наиболее популярное. $_ используется еще во многих местах, обычно представляя «текущий объект». Но думаю теперь вам будет проще понять и эти случаи. Например в командлете Where-Object $_ исполняет ту же роль что и в ForeEach-Object — содержит текущий объект конвейера. А в блоке обработки ошибок (trap), за $_ будет скрываться объект текущей ошибки.

Понравилось это:

Нравится Загрузка…

Похожее

Запрос на ввод данных Пользователем в PowerShell

Read-Host это простой вариант для получения строки ввода от пользователя.

$name = Read-Host 'What is your username?'

чтобы скрыть пароли, вы можете использовать:

$pass = Read-Host 'What is your password?' -AsSecureString

чтобы преобразовать пароль в обычный текст:

[Runtime.InteropServices.Marshal]::PtrToStringAuto(
    [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))

что касается типа, возвращаемого $host.UI.Prompt(), если вы запустите код по ссылке, опубликованной в комментарии @Christian, вы можете узнать тип возврата, передав его в Get-Member (например, $results | gm). Результатом является словарь, где ключ имя FieldDescription объект, используемый в командной строке. Чтобы получить доступ к результату для первого приглашения в связанном примере, введите:$results['String Field'].

чтобы получить доступ к информации без вызова метода, оставьте скобки:

PS> $Host.UI.Prompt

MemberType          : Method
OverloadDefinitions : {System.Collections.Generic.Dictionary[string,psobject] Pr
                    ompt(string caption, string message, System.Collections.Ob
                    jectModel.Collection[System.Management.Automation.Host.Fie
                    ldDescription] descriptions)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Collections.Generic.Dictionary[string,psobject] Pro
                    mpt(string caption, string message, System.Collections.Obj
                    ectModel.Collection[System.Management.Automation.Host.Fiel
                    dDescription] descriptions)
Name                : Prompt
IsInstance          : True

$Host.UI.Prompt.OverloadDefinitions даст вам определение(определения) метода. Каждое определение отображается как <Return Type> <Method Name>(<Parameters>).

WPF формы для PowerShell скриптов

Иногда, при написании PowerShell скриптов, появляется необходимость отобразить некую форму для ввода каких-нибудь параметров или наоборот для отображения результатов скрипта. Ранее для этого я использовал Windows Forms, но у этого метода есть очевидные недостатки – при создании формы необходимо описывать в коде скрипта каждый элемент формы и его свойства. Недавно натолкнулся на несколько статей от “Hey, Scripting Guy”, по использованию форм WPF в скриптах PowerShell. В одной из них описывается способ использования форм WPF, реализованный Крисом Конте. Суть его сводится к использованию отдельного скрипта-загрузчика формы и отдельного файла с xaml-описанием формы. В данной статье я хочу показать как легко создавать и использовать формы WPF в своих скриптах.

Необходимые инструменты

Для создания скриптов с формами WPF нам понадобится:

Создаем форму

Для создания формы очень удобно пользоваться Visual Studio Express 2013/2014 for Windows Desktop. Создаем новый проект Visual C# –> Windows –> WPF Application и рисуем там форму с необходимыми нам контролами. Я создал для примера такую:

Изменения, которые я внес:

  1. У самой формы я изменил заголовок (свойство Title) и размеры (свойства Height и Width)
  2. На форму поместил Label в свойство Content которой поместил текст “Это форма запущенная из под Powershell”, а так же изменил размер текста на 24pt
  3. Кнопка Button с текстом “Change” в свойстве Content
  4. Кнопка Button с текстом “Exit” в свойстве Content

В итоге мы получаем XAML текст с нашей формой

<Window x:Class="test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Форма Powershell">
    <Grid>
        <Label Content="Это форма запущеная из под Powershell" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontSize="24"/>
        <Button Content="Change" HorizontalAlignment="Left" Margin="352,89,0,0" VerticalAlignment="Top"/>
        <Button Content="Exit" HorizontalAlignment="Left" Margin="432,89,0,0" VerticalAlignment="Top"/>
    </Grid>
</Window>

Это практически готовый XAML для использования его в нашем скрипте, единственное что нужно сделать – это удалить x:Class=“test.MainWindow” и сохранить его отдельном файле с расширением .xaml (например MyForm.xaml).

 

Загрузка формы

Для того что бы загрузить нашу форму Крис написал отличный скрипт который я публикую ниже.

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True,Position=1)]
    [string]$XamlPath
)

[xml]$Global:xmlWPF = Get-Content -Path $XamlPath

try{
    Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} catch {
    Throw "Failed to load Windows Presentation Framework assemblies."
}

$Global:xamGUI = [Windows.Markup.XamlReader]::Load((new-object System.Xml.XmlNodeReader $xmlWPF))

$xmlWPF.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | %{
    Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global
}

Скрипт принимает в качестве параметра $XamlPath путь к файлу XAML. Помещает его содержимое в глобальную переменную $xmlWPF. В блоке try-catch призводится попытка загрузить сборки WPF и в случае ошибки сообщается о невозможности загрузить данные сборки. После чего в глобальную переменную $xamGUI загружается форма из переменной $xmlWPF c помощью сборки Windows.Markup.XamlReader. О последнем блоке ($xmlWPF.SelectNodes…) я расскажу чуть позже. Сохраним данный скрипт под именем loadForm.ps1 и поместим вместе с файлом MyForm.xaml.

 

Использование скрипта загрузки формы

Теперь нам осталось только воспользоваться плодами нашей работы. Создаем в Windows Powershell ISE (или другой IDE разработки, например PowerGUI) новый скрипт powershell и помещаем его в ту же папку, где и предыдущие файлы. Назовем его к примеру Main.ps1. Воспользуемся скриптом Криса что бы загрузить нашу форму:

.\loadForm.ps1 -XamlPath '.\MyForm.xaml'

$xamGUI.ShowDialog() | Out-Null

Теперь если мы запустим это скрипт то увидим что наша форма появилась на экране.

Программирование событий формы

Мы смогли запустить нашу форму, однако пока что толку он нее очень мало, так как она мало функциональна. Нам нужна возможность определять события элементов формы (нажатие кнопок, и т.д.). Однако что бы как то обратиться к элементам формы нам нужны переменные со ссылками на объекты. Тут то нам и пригодится последний блок скрипта loadForm.ps1:

$xmlWPF.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | %{
    Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global
}

Этот блок делает обход всего дерева xaml и при нахождении аргументов типа Name создает переменные со ссылками на объекты (контролы) нашей формы.

Следовательно нам при создании формы нужно указывать имена (свойство Name) тех контролов, с которыми мы хотим в дальнейшем так или иначе взаимодействовать. Откроем файл нашей формы в текстовом редакторе, ISE или Visual Studio и добавим контролам имена, я дал например такие:

<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Форма Powershell">
    <Grid>
        <Label x:Name="Label1" Content="Это форма запущеная из под Powershell" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontSize="24"/>
        <Button x:Name="btnChange" Content="Change" HorizontalAlignment="Left" Margin="352,89,0,0" VerticalAlignment="Top"/>
        <Button x:Name="btnExit" Content="Exit" HorizontalAlignment="Left" Margin="432,89,0,0" VerticalAlignment="Top"/>

    </Grid>
</Window>

Самой форме при этом давать имя не нужно, мы можем обращаться к форме через глобальную переменную $xamGUI.

Сохранив наш новый код XAML в файл MyForm.xaml мы можем перезапустить наш скрипт Main.ps1, после чего увидим, что скрипт loadForm.ps1 создал переменные $btnChange, $btnExit.

Обратите внимание на тип переменной $btnChange – это [Button], так что это действительно ссылки на объекты формы. Теперь мы можем добавить код для событий наших контролов. Например для того что бы корректно работала кнопка Exit, мы должны закрывать форму при нажатии на кнопку. Это достигается через добавление кода для события Click:

.\loadForm.ps1 -XamlPath '.\MyForm.xaml'

$btnExit.Add_Click({
    $xamGUI.Close()
})

$xamGUI.ShowDialog() | Out-Null

Ну а что бы кнопка $btnChange меняла текст контрола Label1 добавим и ей код для события Click:

.\loadForm.ps1 -XamlPath '.\MyForm.xaml'

$btnExit.Add_Click({
    $xamGUI.Close()
})

$btnChange.Add_Click({
    $Label1.Content = "Этот текст изменен кнопкой "+$btnChange.Name
})

$xamGUI.ShowDialog() | Out-Null

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

Собственно это все на сегодня. Если будет интерес к этой теме – буду рад написать еще несколько статей.

Поделиться ссылкой на эту запись:

Похожее

Руководство для самостоятельного изучения

Windows PowerShell — статьи TechNet — США (английский)


Список ниже предназначен для тех, кто желает познакомиться с Microsoft PowerShell 2.0. Все эти ресурсы доступны онлайн и бесплатно, за исключением книги, которая указана для полноты.

Сайт верхнего уровня для PowerShell: http://www.microsoft.com/powershell

Начало работы

Создание сценариев с помощью 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

Пока что серий:

  1. Как использовать параметры в PowerShell, часть I
  2. Как использовать параметры в 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 .

Добавить комментарий

Ваш адрес email не будет опубликован.