Поделиться через


О Сплаттинг

КРАТКОЕ ОПИСАНИЕ

Описывает, как использовать Сплаттинг для передачи параметров в команды в PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

[Этот раздел был создан Рохн Edwards Гулфпорт, побережью, системным администратором и победителем расширенного отделения игр со сценариями 2012. Пересмотрено для Windows PowerShell 3,0.]

Сплаттинг — это метод передачи коллекции значений параметров в команду в виде единицы. PowerShell связывает каждое значение в коллекции с параметром команды. Значения параметров сплаттед хранятся в именованных переменных Сплаттинг, которые выглядят как стандартные переменные, но начинаются с символа ( @ ) вместо знака доллара ( $ ). Символ at указывает PowerShell на передачу коллекции значений, а не одно значение.

Сплаттинг делает команды короче и проще в чтении. Вы можете повторно использовать значения сплаттинг в разных вызовах команд и использовать Сплаттинг для передачи значений параметров из $PSBoundParameters автоматической переменной в другие скрипты и функции.

Начиная с Windows PowerShell 3,0, можно также использовать Сплаттинг для представления всех параметров команды.

SYNTAX

<CommandName> <optional parameters> @<HashTable> <optional parameters>
<CommandName> <optional parameters> @<Array> <optional parameters>

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

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

СПЛАТТИНГ С ХЭШ-ТАБЛИЦАМИ

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

В следующих примерах сравниваются две Copy-Item команды, которые копируют файл Test.txt в файл Test2.txt в том же каталоге.

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

Copy-Item -Path "test.txt" -Destination "test2.txt" -WhatIf

Во втором примере используется хэш-таблица Сплаттинг. Первая команда создает хэш-таблицу пар "параметр-имя" и "параметр-значение" и сохраняет их в $HashArguments переменной. Вторая команда использует $HashArguments переменную в команде с параметром Сплаттинг. Символ "at" ( @HashArguments ) заменяет знак доллара ( $HashArguments ) в команде.

Чтобы указать значение параметра WhatIf, используйте $True или $False .

$HashArguments = @{
  Path = "test.txt"
  Destination = "test2.txt"
  WhatIf = $true
}
Copy-Item @HashArguments

Примечание. в первой команде символ "@" обозначает хэш-таблицу, а не значение сплаттед. Синтаксис для хэш-таблиц в PowerShell:@{\<name\>=\<value\>; \<name\>=\<value\>; ...}*

СПЛАТТИНГ С МАССИВАМИ

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

В следующих примерах сравниваются две Copy-Item команды, которые копируют файл Test.txt в файл Test2.txt в том же каталоге.

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

Copy-Item "test.txt" "test2.txt" -WhatIf

Во втором примере используется массив Сплаттинг. Первая команда создает массив значений параметров и сохраняет их в $ArrayArguments переменной. Значения находятся в порядке расположения в массиве. Вторая команда использует $ArrayArguments переменную в команде в Сплаттинг. Символ "at" ( @ArrayArguments ) заменяет знак доллара ( $ArrayArguments ) в команде.

$ArrayArguments = "test.txt", "test2.txt"
Copy-Item @ArrayArguments -WhatIf

Примеры

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

Чтобы изменить цвета всех команд, просто измените значение $Colors переменной.

Первая команда создает хэш-таблицу с именами и значениями параметров и сохраняет хэш-таблицу в $Colors переменной.

$Colors = @{ForegroundColor = "black"; BackgroundColor = "white"}

Вторая и третья команды используют $Colors переменную для сплаттинг в Write-Host команде. Чтобы использовать $Colors variable , замените знак доллара ( $Colors ) на символ at ( @Colors ).

#Write a message with the colors in $Colors
Write-Host "This is a test." @Colors

#Write second message with same colors. The position of splatted
#hash table does not matter.
Write-Host @Colors "This is another test."

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

$PSBoundParametersАвтоматическая переменная — это объект словаря (System. Collections. Generic. Dictionary), содержащий все имена и значения параметров, которые используются при выполнении скрипта или функции.

В следующем примере мы используем $PSBoundParameters переменную для пересылки значений параметров, переданных в скрипт или функцию, в функцию Test2 Test1 . Оба вызова Test1 функции Test2 используют Сплаттинг.

function Test1
{
    param($a, $b, $c)

    $a
    $b
    $c
}

function Test2
{
    param($a, $b, $c)

    #Call the Test1 function with $a, $b, and $c.
    Test1 @PsBoundParameters

    #Call the Test1 function with $b and $c, but not with $a
    $LimitedParameters = $PSBoundParameters
    $LimitedParameters.Remove("a") | Out-Null
    Test1 @LimitedParameters
}
Test2 -a 1 -b 2 -c 3
1
2
3
2
3

ПАРАМЕТРЫ КОМАНДЫ СПЛАТТИНГ

Сплаттинг можно использовать для представления параметров команды. Этот метод полезен при создании прокси-функции, то есть функции, которая вызывает другую команду. Эта функция появилась в Windows PowerShell 3,0.

Чтобы со звездочкой параметры команды, используйте @Args для представления параметров команды. Этот метод проще, чем перечислять параметры команды и работает без редакции, даже если параметры вызванной команды изменятся.

Эта функция использует $Args автоматическую переменную, которая содержит все значения неназначенных параметров.

Например, следующая функция вызывает Get-Process командлет. В этой функции @Args представляет все параметры Get-Process командлета.

function Get-MyProcess { Get-Process @Args }

При использовании Get-MyProcess функции передаются все неназначенные параметры и значения параметров @Args , как показано в следующих командах.

Get-MyProcess -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    463      46   225484     237196   719    15.86   3228 powershell
Get-MyProcess -Name PowerShell_Ise -FileVersionInfo
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.2.9200.16384   6.2.9200.1638... C:\Windows\system32\WindowsPowerShell\...

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

function Get-MyCommand
{
    Param ([switch]$P, [switch]$C)
    if ($P) { Get-Process @Args }
    if ($C) { Get-Command @Args }
}

Get-MyCommand -P -C -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
408      28    75568      83176   620     1.33   1692 powershell

Path               : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Extension          : .exe
Definition         : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Visibility         : Public
OutputType         : {System.String}
Name               : powershell.exe
CommandType        : Application
ModuleName         :
Module             :
RemotingCapability : PowerShell
Parameters         :
ParameterSets      :
HelpUri            :
FileVersionInfo    : File:             C:\Windows\System32\WindowsPowerShell
                     \v1.0\powershell.exe
                     InternalName:     POWERSHELL
                     OriginalFilename: PowerShell.EXE.MUI
                     FileVersion:      10.0.14393.0 (rs1_release.160715-1616
                     FileDescription:  Windows PowerShell
                     Product:          Microsoft Windows Operating System
                     ProductVersion:   10.0.14393.0
                     Debug:            False
                     Patched:          False
                     PreRelease:       False
                     PrivateBuild:     False
                     SpecialBuild:     False
                     Language:         English (United States)

ПРИМЕЧАНИЯ

Настройка требуемого состояния PowerShell (DSC) не была разработана для использования Сплаттинг. Сплаттинг нельзя использовать для передачи значений в ресурс DSC. Дополнительные сведения см. в статье Гаел Колас " псевдо-СПЛАТТИНГ DSC Resources.

СМ. ТАКЖЕ

about_Arrays

about_Automatic_Variables

about_Hash_Tables

about_Parameters