Примеры сценариев Azure PowerShell.Azure PowerShell Samples. Powershell примеры


Использование оператора Switch в PowerShell

Обычно для проверки какого либо условия в PowerShell используется конструкция If — Else. Напомню, что оператор If предназначен для проверки условия и выполнения определенного действия, связанного с этим условием. Если заданное условие соблюдено, то выполняем одно действие, если не соблюдено — то другое.

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

Поэтому при большом количестве проверяемых условий лучше применять оператор Switch, который позволяет объединять список условий в одной инструкции. Switch поочередно сопоставляет проверяемое значение (value) с каждым заданным условием (condition), и если находит совпадение, то выполняет действие (action), связанное с этим условием. Синтаксис выглядит так:

Switch (value) {condition 1 {action}condition 2 {action}condition n {action}}

В качестве простого примера возьмем скрипт, в котором производится проверка значения переменной $a на соответствие одному из трех значений. При совпадении выводится найденное значение переменной:

$a = 1 Switch ($a) { 1 {″one″} 2 {″two″} 3 {″three″}} Write-Host ″switched″

 

Как видно из предыдущего примера, действие производится только при совпадении значений. Если вы хотите, чтобы действие выполнялось и при отсутствии совпадений, то можно указать ключевое слово Default.  В этом случае если ни одно из условий не будет выполнено, то будет произведено действие по умолчанию, указанное после Default. Например:

$a = 4 Switch ($a) { 1 {″one″} 2 {″two″} 3 {″three″} Default {″Out of range″; exit} } Write-Host ″switched″

 

Может быть так, что в списке окажется несколько одинаковых условий, как в следующем примере:

$a = 1 switch ($a) { 1 {″one″} 2 {″two″} 3 {″three″} 1 {″another one″} DEFAULT {″Out of range″; exit} } Write-Host ″switched″

 

Как видите, в этом случае оператор Switch выполнил оба действия. Если значение переменной совпало с одним из условий и код выполнился, обработка не прерывается, а производится сравнение со следующим условием и так далее. Избежать этого можно с помощью ключевых слов Break и Continue.

Указанное в конце инструкции, Break предписывает в случае совпадения прекратить дальнейший поиск и выполнить указанное действие. Ключевое слово Break означает, что обработка больше не выполняется и оператор Switch завершает свою работу.

$a = 1 switch ($a) { 1 {″one″, break} 2 {″two″} 3 {″three″} 1 {″another one″} DEFAULT {″Out of range″; exit} } Write-Host ″switched″

Ключевое слово Continue указывает, что обработка текущего условия завершена и не будет продолжаться, после чего начнется поиск следующего условия. Т.е. в отличие от Break, Continue не завершает работу Switch, а переходит к следующему условию:

$a = 1 switch ($a) { 1 {″one″, continue} 2 {″two″} 3 {″three″} 1 {″another one″} DEFAULT {″Out of range″; exit} } Write-Host ″switched″

 

Switch позволяет работать не только с константами. Так в качестве проверяемого значения можно указать одно выражение PowerShell, а вместо условия — другое. Для примера проверим состояние сервиса Spooler, и если он в выключенном состоянии, то включим его:

switch (Get-Service | where {$_.name -eq ″spooler″}) { {$_.status -eq ″Running″} {″Service is running″} {$_.status -eq ″Stopped″} {″Service is stopped, starting…″; Start-Service  spooler} }

 

Еще оператор Switch имеет несколько дополнительных параметров, предназначенных для обработки строк:

Exact — условие является строкой и должно точно соответствовать критерию;Wildcard — условие является строкой, содержащей подстановочные символы;Regex — условие содержит регулярные выражения;CaseSensitive — условие чувствительно к регистру. Если условие не является строкой, то параметр игнорируется;File — условие берется из файла.

Для примера возьмем текстовый файл с отрывком из ″Хоббита″, а в условии используем подстановочные символы. Условие срабатывает при каждом нахождении слов Hobbit и Baggins:

$content = Get-Content C:\Files\Hobbit.txt Switch -Wildcard ($content) { ″*Hob*″ {″Word Hobbit is found″} ″*Bagg*″ {″Word Baggins is found″} }

 

В статье я привел лишь несколько простых примеров. На самом деле возможности Switch гораздо шире, особенно в сочетании с регулярными выражениями. Но это уже совсем другая история 🙂

windowsnotes.ru

Примеры Azure PowerShell. Служба приложений

Создание приложенияCreate app
Создание веб-приложения с непрерывным развертыванием из GitHubCreate a web app with deployment from GitHub Создание веб-приложения Azure, которое вытягивает код из GitHub.Creates an Azure web app that pulls code from GitHub.
Создание веб-приложения с непрерывным развертыванием из GitHubCreate a web app with continuous deployment from GitHub Создание веб-приложения Azure, которое непрерывно развертывает код из GitHub.Creates an Azure web app that continuously deploys code from GitHub.
Создание веб-приложения и развертывание кода с помощью протокола FTPCreate a web app and deploy code with FTP Создает веб-приложение Azure и передает файлы из локального каталога с помощью протокола FTP.Creates an Azure web app and upload files from a local directory using FTP.
Создание веб-приложения и развертывание кода из локального репозитория GitCreate a web app and deploy code from a local Git repository Создает веб-приложение Azure и настраивает отправку кода из локального репозитория Git.Creates an Azure web app and configures code push from a local Git repository.
Создание веб-приложения и развертывание кода в промежуточной средеCreate a web app and deploy code to a staging environment Создает веб-приложение Azure со слотом развертывания для изменений промежуточного кода.Creates an Azure web app with a deployment slot for staging code changes.
Настройка приложенияConfigure app
Сопоставление пользовательского домена с веб-приложениемMap a custom domain to a web app Создает веб-приложение Azure и сопоставляет c ним имя пользовательского домена.Creates an Azure web app and maps a custom domain name to it.
Привязка пользовательского SSL-сертификата к веб-приложениюBind a custom SSL certificate to a web app Создает веб-приложение Azure и привязывает к нему SSL-сертификат имени личного домена.Creates an Azure web app and binds the SSL certificate of a custom domain name to it.
Масштабирование приложенияScale app
Масштабирование веб-приложения вручнуюScale a web app manually Создает веб-приложение Azure и масштабирует его по двум экземплярам.Creates an Azure web app and scales it across 2 instances.
Глобальное масштабирование веб-приложения с помощью высокодоступной архитектурыScale a web app worldwide with a high-availability architecture Создает два веб-приложения Azure в двух разных географических регионах и делает их доступными через одну конечную точку с помощью диспетчера трафика Azure.Creates two Azure web apps in two different geographical regions and makes them available through a single endpoint using Azure Traffic Manager.
Подключение приложения к ресурсамConnect app to resources
Подключение веб-приложения к базе данных SQLConnect a web app to a SQL Database Создает веб-приложение Azure и базу данных SQL, а затем добавляет строку подключения базы данных к параметрам приложения.Creates an Azure web app and a SQL database, then adds the database connection string to the app settings.
Подключение веб-приложения к учетной записи храненияConnect a web app to a storage account Создает веб-приложение Azure и учетную запись хранения, а затем добавляет строку подключения хранилища к параметрам приложения.Creates an Azure web app and a storage account, then adds the storage connection string to the app settings.
Резервное копирование и восстановление приложенияBack up and restore app
Резервное копирование веб-приложенияBack up a web app Создание веб-приложения Azure и однократное создание его резервной копии.Creates an Azure web app and creates a one-time backup for it.
Создание резервной копии веб-приложения по расписаниюCreate a scheduled backup for a web app Создание веб-приложения Azure и запланированное создание его резервной копии.Creates an Azure web app and creates a scheduled backup for it.
Удаление резервной копии веб-приложенияDelete a backup for a web app Удаление существующей резервной копии веб-приложения.Deletes an existing backup for a web app.
Мониторинг приложенияMonitor app
Мониторинг веб-приложения с помощью журналов веб-сервераMonitor a web app with web server logs
Создает веб-приложение Azure, включает ведение журналов и скачивает их на локальный компьютер.Creates an Azure web app, enables logging for it, and downloads the logs to your local machine.

docs.microsoft.com

Пример сценария PowerShell — создание охватывающей всю компанию команды в Microsoft Teams

Пример сценария PowerShell — создание охватывающей всю компанию команды в Microsoft TeamsPowerShell Script Sample - Create a company-wide team in Microsoft Teams

  • 02/07/2018
  • Время чтения: 5 мин
  • Соавторы

В этой статье

Этот сценарий PowerShell создает в Teams открытую команду, охватывающую всю компанию.This PowerShell script creates a public, company-wide team in Teams. Сценарий использует для этого PowerShell-модуль MicrosoftTeams, который сейчас находится в бета-версии.The script uses the MicrosoftTeams PowerShell module (currently in beta) to create a public, company-wide team. В нем также используется PowerShell-модуль AzureAD для получения списка пользователей вашего клиента.It also uses the AzureAD PowerShell module to fetch the list of users in your tenant.

Полные инструкции по использованию этого сценария PowerShell см. в нашем учебном руководстве Создание в Teams охватывающей всю компанию команды с помощью PowerShell.For complete instructions on using this PowerShell script, check out our tutorial, Create a company-wide team in Teams using PowerShell.

Если вы новичок в PowerShell и вам требуется помощь, см. раздел Общие сведения об Azure PowerShell.If you're new to PowerShell and need help getting started, see Overview of Azure PowerShell.

Пример сценарияSample script

Совет

Файл сценария PowerShell — это текстовый файл с расширением .PS1.A PowerShell script file is a text file with a .PS1 extension. Чтобы использовать этот сценарий, щелкните Копировать и вставьте код в текстовый файл.To use this script, click Copy and then paste the code into a text file. Сохраните файл под именем CreateCompanyWideTeam.ps1, и вы получите сценарий PowerShell.Save it with the filename CreateCompanyWideTeam.ps1, and you've got a PowerShell script.

<# .SYNOPSIS This script allows you to create a company-wide team. .DESCRIPTION Use this script with the MicrosoftTeams PowerShell version 0.9.0 beta module to create a team with members and channels that you specify. Also leverages the AzureAD module to find all members to add. .PARAMETER Owners The comma-separated list of owners for your Team, who handle team settings and membership management. The owners should be specified by their User Principal Name. You must specify a minimum of two owners. .PARAMETER TeamName The name of your company-wide team. For example, this could be your company name. .PARAMETER TeamDescription The description of your company-wide team, in quotes. .PARAMETER Channels The comma-separated list of names of all the initial channels you want to set up. For example: "Announcements","Social at Work","Teamwork at Contoso". .PARAMETER GroupID If you have already created the group for your company-wide team, specify its GroupID. You can get this value from the display of the “Get-AzureADGroup | Sort DisplayName | Select DisplayName,ObjectID” command. This script had an issue during the rest of the execution and stopped early. .PARAMETER Members The comma-separated list of members for your team that you want to manually add. To use this script a minimum of two members must be added. The members should be specified by their User Principal Name. To manually just add a single member, use the “Add-TeamUser -GroupId $IdOfGroup -Role Member -User $member” command. #> param( [Parameter(Mandatory=$false)][System.Collections.ArrayList]$Owners, [Parameter(Mandatory=$false)][System.String]$TeamName, [Parameter(Mandatory=$false)][System.String]$TeamDescription, [Parameter(Mandatory=$false)][System.Collections.ArrayList]$Channels, [Parameter(Mandatory=$false)][System.String]$GroupID, [Parameter(Mandatory=$false)][System.Collections.ArrayList]$Members ) function Create-Team(){ Write-Host("Starting Team Creation") $GroupID = (New-Team -DisplayName $TeamName -AccessType Public -Description $TeamDescription).GroupId if([string]::IsNullOrEmpty($GroupID)){ Write-Host("Team creation failed, please investigate and try again") Return } Write-Host("Team GroupID:", $GroupID) return ,$GroupID } function Add-Channels($IdOfGroup){ Write-Host("Starting Channel addition") foreach($channel in $Channels) { Write-Host("Enter Channel Description for " + $channel + " channel") $channelDescription = Read-Host New-TeamChannel -GroupId $IdOfGroup -DisplayName $channel -Description $channelDescription } } function Add-Members ($IdOfGroup){ Write-Host("Starting Member addition") $allUsersInTenant = $Members ## Only fetch full user list, if one isn't supplied if([string]::IsNullOrEmpty($Members)) { $Error.Clear() Write-Host("Starting connection to AzureAD module") Connect-AzureAD if($Error){ Write-Host("Unable to connect to AzureAD. Please investigate and try again. To install the commandlet, use this command: Install-Module AzureAD") Return } ## Fetch all the users and create the member list $allUsersInTenant = (Get-AzureADUser).UserPrincipalName Disconnect-AzureAD } $NotAddedMembers = [System.Collections.ArrayList]@() $existingTeamMembers = (Get-TeamUser -GroupId $IdOfGroup).User foreach($user in $allUsersInTenant){ $Error.Clear() if(!$existingTeamMembers.Contains($user)){ Write-Host($user) if($Owners.Contains($user)){ Add-TeamUser -GroupId $IdOfGroup -Role Owner -User $user.ToString() if($Error){ $NotAddedMembers.Add([Tuple]::Create($user,"Owner")) } } else{ Add-TeamUser -GroupId $IdOfGroup -Role Member -User $user.ToString() if($Error) { $NotAddedMembers.Add([Tuple]::Create($user,"Member")) } } } } if($NotAddedMembers.Count > 0) { Write-Host("There are some members that did not get added, please retry these specific users") Write-Host($NotAddedMembers) } ##Clear member addition errors $Error.Clear() } ##Main Script $Error.Clear() Write-Host("Starting connection to MicrosoftTeams module") Connect-MicrosoftTeams if($Error){ Write-Host("There was an error installing\connecting to the Microsoft Teams PowerShell module. Please investigate. To install the module use the follow command: Install-Module MicrosoftTeams ") Return } ##Create the team if existing GroupID isn't supplied. It's possible a Tenant Wide team was created, but there was an error adding members. if([string]::IsNullOrEmpty($GroupID)){ if([string]::IsNullOrEmpty($TeamName)){ Write-Host("Missing an argument for parameter 'TeamName' and 'GroupID'. Specify a parameter of type 'System.String' and try again for either GroupID or TeamName and TeamDescription") Return } $GroupID = Create-Team } if($Channels.Count -gt 0){ Add-Channels $GroupID } Add-Members $GroupID Disconnect-MicrosoftTeams

Пояснение сценарияScript explanation

Полные инструкции по использованию этого сценария PowerShell см. в нашем учебном руководстве Создание в Teams охватывающей всю компанию команды с помощью PowerShellFor complete instructions on using this PowerShell script, check out our tutorial, Create a company-wide team in Teams using PowerShell

Этот сценарий состоит из 5 частей (перечислены сверху вниз).There are 5 sections to this script (listed in order from top to bottom):

  1. Документация и описание переменныхDocumentation and variable definitions
  2. Функция Create-Team: создает команду, если это необходимо.Function Create-Team: Creates a team if necessary. Если GroupID не указан, в этой части будет создана команда с заданными TeamName и TeamDescription.If you don't specify a GroupID, this section will create the team with the specified TeamName and TeamDescription.
  3. Функция Add-Channels: если вы указали каналы, то эта функция запрашивает описание канала и создает канал.Function Add-Channels: If you've specified channels, this is where the channel description gets requested, and then the channel gets created.
  4. Функция Add-Members: выполняет все управление участниками.Function Add-Members: This does all member management. Эта часть сценария подключается к модулю AzureAD, получает список пользователей и добавляет их в команду, если вы не указали список пользователей.This section connects to AzureAD, fetches a set of users, and adds them to the team if you don’t provide a member list. Она обрабатывает логику добавления владельцев и участников и не добавляет тех участников, которые уже включены в команду.It handles the logic of adding owners and members, and not adding members who already belong to the team.
  5. Основная программа: это порядок, в котором выполняются функции.Main program: This is the order in which the functions get executed.

docs.microsoft.com

Передача параметров в PowerShell

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

Самый простой вариант передачи данных — использовать встроенную переменную $args, которая имеет тип одномерный массив (hashtable). Для этого создадим скрипт с именем service.ps1 вот такого содержания:

Get-Service -Name $args[0] -ComputerName $args[1]

Этот скрипт должен вывести состояние заданного сервиса\сервисов для одного или нескольких компьютеров. Имя сервиса и компьютера передаются в скрипт в качестве аргументов.

Теперь выполним его, указав в качестве аргументов сервис печати (spooler) и имя компьютера SRV1:

.\service.ps1 spooler SRV1

Получив эту команду, PowerShell подставит вместо $args[0] название сервиса, вместо $args[1] имя компьютера и выведет полученный результат.

 

При использовании $args каждое из указываемых значений добавляется в массив, в результате мы получаем возможность передавать в сценарий любое необходимое количество параметров. Однако аргументы должны вводиться ровно в том порядке, в каком они указаны в сценарии, что при большом количестве аргументов может привести к путанице. Кроме того, этот способ ограничивает нас в определении параметров.

Более эффективным способом передачи параметров является использование в сценарии блока param. Для примера возьмем наш сценарий и изменим его:

Param ( [string]$service, [string]$computer )

Get-Service -ServiceName $service -ComputerName $computer

Разбивать сценарий на строки необязательно, вполне возможно записать все в одну строку. Если блок param имеется в сценарии или функции, PowerShell сам считывает его и разделяет знаками табуляции. Поскольку имена параметров явно указаны, то их можно вводить в любом порядке, например так:

.\service.ps1 -Service spooler -Computer SRV1

 

Чтобы вводить меньше текста, имена параметров можно сократить, например так:

.\service.ps1 -Serv spooler -Comp SRV1

Имена можно и совсем опустить, хотя это и не очень правильно. В этом случае PowerShell примет значения параметров в том порядке, в каком они указаны в команде. Так же как и при использовании $args, значения надо указывать в том же порядке, в котором они перечислены в сценарии:

.\service.ps1 spooler SRV1

 

Есть в PowerShell и более сложный способ передачи параметров, позволяющий задавать параметры как обязательные, указывать для каждого позицию и многое другое. Для примера изменим сценарий следующим образом:

[CmdletBinding()]

Param ( [Parameter (Mandatory=$true, Position=1)] [string]$service,

[Parameter (Mandatory=$true, Position=2)] [string]$computer )

Get-Service -ServiceName $service -ComputerName $computer

Здесь оба параметра указаны как обязательные (Mandatory=$true) и для каждого задана своя позиция. Это значит, что оба параметра обязательно должны быть указаны и должны идти строго в определенном порядке. Теперь если не указать один из параметров, то PowerShell автоматически напомнит об этом и предложит ввести недостающую информацию.

 

Использование расширенного синтаксиса позволяет задавать различные ограничения для вводимых параметров. Еще раз изменим сценарий, указав в нем для имени компьютера ограничение в 3 символа (ValidateLength(1,3):

CmdletBinding()]

Param ( [Parameter (Mandatory=$true)] [string]$service,

[Parameter (Mandatory=$true)] [ValidateLength(1,3)] [string]$computer )

Get-Service -ServiceName $service -ComputerName $computer

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

.\service.ps1 -Service spooler -Computer SRV1.contoso.com

А такая отработает нормально:

.\service.ps1 -Service spooler -Computer SRV1

 

Подобным образом можно задавать практически любые ограничения для входных параметров. Для этого есть возможность использовать регулярные выражения, скрипты и пр. Узнать подробнее об этих возможностях можно, выполнив в PowerShell команду help about_functions_advanced_parameters.

windowsnotes.ru

Примеры скриптов Azure PowerShell для базы данных SQL

Создание отдельной базы данных и эластичного пулаCreate a single database and an elastic pool
Создание отдельной базы данных и настройка правила брандмауэраCreate a single database and configure a firewall rule Этот скрипт PowerShell создает отдельную базу данных SQL Azure и настраивает правило брандмауэра на уровне сервера.This PowerShell script creates a single Azure SQL database and configures a server-level firewall rule.
Создание эластичных пулов и перемещение баз данных в составе пуловCreate elastic pools and move pooled databases Этот сценарий PowerShell создает эластичные пулы базы данных SQL Azure и перемещает базы данных в составе пулов, а также изменяет их вычислительную мощность.This PowerShell script creates Azure SQL Database elastic pools, and moves pooled databases, and changes compute sizes.
Создание управляемого экземпляра и управление имCreate and manage a Managed Instance Эти сценарии интерфейса командной строки демонстрируют создание управляемого экземпляра и управление им с помощью Azure PowerShell.These CLI scripts show you have to create and manage a Managed Instance using the Azure PowerShell
Настройка георепликации и отработка отказаConfigure geo-replication and failover
Настройка активной георепликации для отдельной базы данных SQL Azure с помощью PowerShellConfigure and failover a single database using active geo-replication Этот скрипт PowerShell настраивает активную георепликацию для отдельной базы данных SQL Azure и выполняет для нее отработку отказа во вторичную реплику.This PowerShell script configures active geo-replication for a single Azure SQL database and fails it over to the secondary replica.
Настройка активной георепликации для базы данных SQL Azure в составе пула с помощью PowerShellConfigure and failover a pooled database using active geo-replication Этот скрипт PowerShell настраивает активную георепликацию для базы данных SQL Azure в эластичном пуле SQL и выполняет для нее отработку отказа во вторичную реплику.This PowerShell script configures active geo-replication for an Azure SQL database in a SQL elastic pool, and fails it over to the secondary replica.
Настройка и отработка отказа для группы отработки отказа для отдельной базы данныхConfigure and failover a failover group for a single database Этот скрипт PowerShell настраивает группу отработки отказа для экземпляра сервера базы данных SQL Azure, добавляет базу данных в группу отработки отказа и выполняет для нее отработку отказа на сервер-получатель.This PowerShell script configures a failover group for an Azure SQL Database server instance, adds a database to the failover group, and fails it over to the secondary server
Масштабирование отдельных баз данных и эластичного пулаScale a single databases and an elastic pool
Масштабирование отдельной базы данныхScale a single database Этот сценарий PowerShell отслеживает метрики производительности базы данных SQL Azure, увеличивает ее вычислительную мощность и создает правило генерации оповещений для одной из метрик производительности.This PowerShell script monitors the performance metrics of an Azure SQL database, scales it to a higher compute size and creates an alert rule on one of the performance metrics.
Масштабирование эластичного пулаScale an elastic pool Этот сценарий PowerShell отслеживает метрики производительности эластичного пула базы данных SQL Azure, увеличивает его вычислительную мощность и создает правило генерации оповещений для одной из метрик производительности.This PowerShell script monitors the performance metrics of an Azure SQL Database elastic pool, scales it to a higher compute size, and creates an alert rule on one of the performance metrics.
Аудит и обнаружение угрозAuditing and threat detection
Настройка аудита и обнаружения угрозConfigure auditing and threat-detection Этот скрипт PowerShell настраивает политики аудита и обнаружения угроз для базы данных SQL Azure.This PowerShell script configures auditing and threat detection policies for an Azure SQL database.
Восстановление, копирование и импорт базы данныхRestore, copy, and import a database
Восстановление базы данныхRestore a database Этот скрипт PowerShell восстанавливает базу данных SQL Azure из геоизбыточной резервной копии и восстанавливает последнюю резервную копию удаленной базы данных SQL Azure.This PowerShell script restores an Azure SQL database from a geo-redundant backup and restores a deleted Azure SQL database to the latest backup.
Копирование базы данных на новый серверCopy a database to new server Этот скрипт PowerShell создает копию существующей базы данных SQL Azure на новом сервере SQL Azure.This PowerShell script creates a copy of an existing Azure SQL database in a new Azure SQL server.
Импорт базы данных из BACPAC-файлаImport a database from a bacpac file Этот скрипт PowerShell импортирует базу данных из BACPAC-файла на сервер SQL Azure.This PowerShell script imports a database to an Azure SQL server from a bacpac file.
Синхронизация данных между базами данныхSync data between databases
Синхронизация данных между базами данных SQLSync data between SQL databases Этот сценарий PowerShell настраивает синхронизацию данных между несколькими базами данных SQL Azure.This PowerShell script configures Data Sync to sync between multiple Azure SQL databases.
Синхронизация данных между базой данных SQL и локальной базой данных SQL ServerSync data between SQL Database and SQL Server on-premises Этот сценарий PowerShell настраивает синхронизацию данных между базой данных SQL Azure и локальной базой данных SQL Server.This PowerShell script configures Data Sync to sync between an Azure SQL database and a SQL Server on-premises database.
Изменение схемы синхронизации данных SQLUpdate the SQL Data Sync sync schema Этот сценарий PowerShell добавляет или удаляет элементы в схеме синхронизации данных.This PowerShell script adds or removes items from the Data Sync sync schema.

docs.microsoft.com

Функции в Windows PowerShell | вебисторий

В предыдущей статье мы говорили о командлетах в Windows PowerShell. Теперь поговорим о следующем типе команд — функциях.

Функции — это блоки кода на языке PowerShell, имеющие название и находящиеся в памяти до завершения текущего сеанса командной оболочки. Функции в PowerShell это не совсем то же самое, что функции в языках программирования.

Создадим простейшую функцию Primer, которая просто выводит сообщение. Для этого введем в PowerShell

Function Primer{"Это пример функции."}

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

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

Изменим нашу функцию Primer, добавив в неё переменную $Args.

Function Primer{"Это пример $Args."}

Тогда при вызове функции нам необходимо будет прописать аргумент или аргументы. Внимательно посмотрите на скриншот ниже.

Пример функции с аргументами в PowerShell

В данном случае «функции», «с» и «аргументами» — три элемента массива $Args. Как видим, они выводятся через пробел. Для того, чтобы убедиться, что это именно три отдельных элемента, введем разделитель в виде точки с помощью специальной переменной $OFS.

Function Primer{ >> $OFS="." >> "Это пример $Args."} >>

 Смотрим результат.

Использование переменной $OFS

Второй способ обработки аргументов функций в Windows PowerShell это использование формальных параметров. Формальные параметры указываются в круглых скобках после имени функции.

Продолжим наш пример с выводом сообщения. Снова изменим функцию Primer, приведя её к следующему виду

Function Primer ($a, $b, $c) {"Это пример $a $b $c."}

Результат будет тем же самым.

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

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

Создадим функцию Summa, которая складывала бы значения двух аргументов.

Function Summa ($a, $b) {$a+$b}

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

Видоизменим функцию Summa.

Function Summa ($chislo1=15,$chislo2=20) {$chislo1+$chislo2}

Мы обозначили параметры как $chislo1 и $chislo2, задав им значения соответственно 15 и 20. Поскольку значения всех параметров здесь указаны, аргументы нам не нужны. Но, если мы всё-таки запустим эту функцию с дополнительным аргументом, то он заменит собой значение $chislo1, а $chislo2 останется без изменений.

PowerShell также позволяет указывать тип параметра функции. Например, тип [int] это целые числа, [string] — текст, а [boolean] — логический тип данных.

Вот следующий пример.

Использование типов данных в Windows PowerShell

Как видим, в результате деления $a на $b должно было получиться 1,15. Но, поскольку мы указали интерпретатору воспринимать все параметры функции как целые числа, дробные значения были округлены до целых. Обратите внимание на округления, которые представлены ниже.

Они не совсем соответствуют тем законам математики, к которым мы привыкли.

Среди типов параметров есть так называемые «параметры-переключатели» обозначающиеся типом [Switch]. Их смысл состоит в логическом выборе, а сами параметры могут принимать только значения $True или $False.

Создадим функцию с таким переключателем.

Function Vybor ([Switch] $a) { >> if ($a) { >> "Это первый вариант." >> } >> else { "Это второй вариант." >> } >> } >>

В данном случае, если мы запустим функцию Vybor с параметром -a (аналогично, как мы запускали dir с параметрами -recurse и -filter в прошлой статье), то нам выйдет одно сообщение, а если без параметра, то другое.

Использование переключателя Switch в Windows PowerShell

На этом с функциями пока всё. Далее мы продолжим изучать типы команд в Windows PowerShell.

webistore.ru