Set-Secret

Добавляет секрет в зарегистрированное хранилище SecretManagement.

Синтаксис

Set-Secret
   [-Name] <String>
   -SecureStringSecret <SecureString>
   [[-Vault] <String>]
   [[-Metadata] <Hashtable>]
   [-NoClobber]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Secret
   [-Name] <String>
   -Secret <Object>
   [[-Vault] <String>]
   [[-Metadata] <Hashtable>]
   [-NoClobber]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Secret
   -SecretInfo <SecretInformation>
   [-Vault] <String>
   [-NoClobber]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

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

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

Примеры

Пример 1

Set-Secret -Name Secret1 -Secret "SecretValue"
Get-Secret -Name Secret1

System.Security.SecureString

В этом примере добавляется секрет с именем Secret1 со значением SecretValueобычного текста . Так как имя хранилища не указано, секрет добавляется в хранилище текущего пользователя по умолчанию. Get-Secret показывает, что секрет был добавлен.

Пример 2

PS C:\> Set-Secret -Name Secret2 -Vault LocalStore

cmdlet Set-Secret at command pipeline position 1
Supply values for the following parameters:
SecureStringSecret: ***********

PS C:\> Get-Secret -Name Secret2
System.Security.SecureString

В этом примере в хранилище добавляется секрет с LocalStore именем Secret2 . Так как значение секрета не указано, командлет запрашивает значение SecureString . Консоль скрывает строковое значение по мере его ввода. Get-Secret показывает, что секрет был добавлен.

Пример 3

$Metadata = @{ Expiration = ([datetime]::new(2022, 5, 1)) }
Set-Secret -Name TargetSecret -Secret $targetToken -Vault LocalStore -Metadata $Metadata
Get-SecretInfo -Name TargetSecret | Select-Object Name,Metadata

Name         Metadata
----         --------
TargetSecret {[Expiration, 5/1/2022 12:00:00 AM]}

В этом примере в хранилище добавляется LocalStore секрет TargetSecret с метаданными, указывающими дату окончания срока действия секрета. Get-SecretInfo извлекает метаданные для созданного секрета.

Пример 4

$Metadata = @{ Expiration = ([datetime]::new(2022, 5, 1)) }
Set-Secret -Name PublishSecret -Secret $targetToken -Vault LocalStore2 -Metadata $Metadata

Set-Secret: Cannot store secret PublishSecret. Vault LocalStore2 does not support secret metadata.

В этом примере в хранилище добавляется LocalStore2 секрет с именем PublishSecret с дополнительными метаданными. Однако хранилище LocalStore2 не поддерживает метаданные секрета, и операция возвращает ошибку.

Параметры

-Confirm

Запрос подтверждения перед выполнением командлета.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Metadata

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

  • строка
  • int
  • DateTime

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

Type:Hashtable
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Указывает имя секрета для добавления или обновления. Подстановочные знаки (*) не допускаются.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NoClobber

Вызывает ошибку, если в хранилище уже существует секрет с тем же именем. По умолчанию этот командлет обновляет секрет новым значением, если он уже существует.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Secret

Задает значение секрета. Объект должен иметь один из поддерживаемых типов:

  • Byte[]
  • String
  • Securestring
  • PSCredential
  • Хэш-таблица
Type:Object
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SecretInfo

Указывает объект SecretInformation , описывающий сохраненный секрет, возвращаемый Get-SecretInfo. Это позволяет копировать секреты из одного хранилища расширений в другое.

Type:SecretInformation
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SecureStringSecret

Задает значение секрета в виде объекта SecretString .

Type:SecureString
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Vault

Указывает имя хранилища, в котором добавляется или обновляется секрет. Подстановочные знаки (*) не допускаются. По умолчанию секрет добавляется или обновляется в хранилище текущего пользователя по умолчанию.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

Hashtable

Выходные данные

None

Примечания

При запуске Set-Secret с параметром Name для указания имени секрета командлет вызывает GetSecret() , который реализуется расширением хранилища. Set-Secret передается через имя, предоставленное пользователем. Расширение хранилища ищет секрет по такому имени. Если GetGecret() возвращает совпадение, перезаписывает секрет, Set-Secret если не используется параметр NoClobber . Расширение хранилища всегда записывает полученные секретные сведения.

Решение о том, следует ли использовать сравнение с учетом регистра для имени, зависит от реализации расширения хранилища. Например, имена секретов в хранилище расширений Microsoft.PowerShell.SecretStore не учитывают регистр. Если имя, передаваемое Set-Secret в , отличается только по регистру именем существующего секрета в хранилище SecretStore, имя перезаписывается новым значением.