Параметры Powershell

Сертификат, Вы пытаетесь импортировать в .cer или .pfx формате? Если это находится в .cer формате, то это - ответ на Сертификат подписывая запрос (CSR), и это должно быть импортировано на сервере, где CSR был создан для корректного создания пары ключей; в случае неудачи Вы закончите с сертификатом без закрытого ключа (который является точно, что происходит).

Где Вы создавали запрос сертификата? На этом сервере на или другом? Где точно "Полная ссылка" Запроса Сертификата, Вы нажимаете?

Если это действительно - сервер, где Вы создали CSR, и Вы правильно просите, чтобы IIS завершил его, то Вы, возможно, поразили эту ошибку: http://support.microsoft.com/kb/959216.

10
задан 12 July 2012 в 00:09
3 ответа

Достаточно указать правильный тип пароля, попробуйте:

Param (
    [Parameter(Mandatory=$True)]
    [string]$FileLocation,

    [Parameter(Mandatory=$True)]
    [Security.SecureString]$password
)

PowerShell «замаскирует» пароль (как и для read-host - asSecureString) и тип результата будет тем типом, который может потребоваться другим командлетам.

РЕДАКТИРОВАТЬ: После недавних комментариев: решение, это дает возможность указать пароль в виде обычного текста или заставить пользователя ввести пароль (но замаскировать его так же, как Read-Host -AsSecureString), и в обоих случаях в конце получить [Security.SecureString]. И в качестве бонуса вы получите причудливую подсказку для вашего секретного пароля. ;)

[CmdletBinding(
    DefaultParameterSetName = 'Secret'
)]
Param (
    [Parameter(Mandatory=$True)]
    [string]$FileLocation,

    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Secret'
    )]
    [Security.SecureString]${Type your secret password},
    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Plain'
    )]
    [string]$Password
)

if ($Password) {
    $SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
    $SecretPassword = ${Type your secret password}
}

Do-Stuff -With $SecretPassword

Здесь я использовал уловку Джайкула, чтобы обмануть с запросом надежного пароля. ;) Это сделает этот параметр очень трудным для использования в режиме CLI (-Введите ваш секретный пароль не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо опустить пароль (и получить замаскированное приглашение), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики сценария.

или заставить пользователя ввести пароль (но замаскировать его так же, как Read-Host -AsSecureString), и в обоих случаях получить в конце [Security.SecureString]. И в качестве бонуса вы получите причудливую подсказку для вашего секретного пароля. ;)

[CmdletBinding(
    DefaultParameterSetName = 'Secret'
)]
Param (
    [Parameter(Mandatory=$True)]
    [string]$FileLocation,

    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Secret'
    )]
    [Security.SecureString]${Type your secret password},
    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Plain'
    )]
    [string]$Password
)

if ($Password) {
    $SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
    $SecretPassword = ${Type your secret password}
}

Do-Stuff -With $SecretPassword

Здесь я использовал уловку Джайкула, чтобы обмануть с запросом надежного пароля. ;) Это сделает этот параметр очень трудным для использования в режиме CLI (-Введите ваш секретный пароль не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо опустить пароль (и получить замаскированное приглашение), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики сценария.

или заставить пользователя ввести пароль (но замаскировать его так же, как Read-Host -AsSecureString), и в обоих случаях получить в конце [Security.SecureString]. И в качестве бонуса вы получите причудливую подсказку для вашего секретного пароля. ;)

[CmdletBinding(
    DefaultParameterSetName = 'Secret'
)]
Param (
    [Parameter(Mandatory=$True)]
    [string]$FileLocation,

    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Secret'
    )]
    [Security.SecureString]${Type your secret password},
    [Parameter(
        Mandatory = $True,
        ParameterSetName = 'Plain'
    )]
    [string]$Password
)

if ($Password) {
    $SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
    $SecretPassword = ${Type your secret password}
}

Do-Stuff -With $SecretPassword

Здесь я использовал уловку Джайкула, чтобы обмануть с запросом надежного пароля. ;) Это сделает этот параметр очень трудным для использования в режиме CLI (-Введите ваш секретный пароль не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо опустить пароль (и получить замаскированное приглашение), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики сценария.

Уловка здесь, чтобы обмануть с запросом надежного пароля. ;) Это сделает этот параметр очень трудным для использования в режиме CLI (-Введите ваш секретный пароль не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо опустить пароль (и получить замаскированное приглашение), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики сценария.

Уловка здесь, чтобы обмануть с запросом надежного пароля. ;) Это сделает этот параметр очень трудным для использования в режиме CLI (-Введите ваш секретный пароль не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо опустить пароль (и получить замаскированное приглашение), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики сценария.

16
ответ дан 2 December 2019 в 22:02

Сложно понять, что вы пытаетесь сделать ...

Edit; как упомянул Райан, в настоящее время вы уже указываете его как строку ...

Но в некотором коде я использовал следующую функцию при использовании Read-Host и SecureStrings

function AskSecureQ ([String]$Question, [String]$Foreground="Yellow", [String]$Background="Blue") {
    Write-Host $Question -ForegroundColor $Foreground -BackgroundColor $Background -NoNewLine
    Return (Read-Host -AsSecureString)
}

В вашем случае вы бы назвали это выполнив следующие действия:

Param (
    [Parameter(Mandatory=$True)]
    [string]$FileLocation,

    [Parameter(Mandatory=$True)]
    [string]$password = AskSecureQ "Type the password you would like to set all the users to"
)

РЕДАКТИРОВАТЬ: Учитывая комментарии, и, черт возьми, вот альтернативный метод, используемый для преобразования указанной выше защищенной строки в простой текст в Powershell;

# Taking a secure password and converting to plain text
Function ConvertTo-PlainText( [security.securestring]$secure ) {
    $marshal = [Runtime.InteropServices.Marshal]
    $marshal::PtrToStringAuto( $marshal::SecureStringToBSTR($secure) )
}

Вы бы использовали это так;

$PWPlain = ConvertTo-PlainText $password

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

4
ответ дан 2 December 2019 в 22:02

Я не уверен, что понимаю ... похоже, что вы уже это делаете. Установив параметр как обязательный, Powershell предложит вам его, если вы не укажете его в командной строке, а с помощью [string] вы гарантируете, что единственный тип данных, который может входить в эту переменную, - это System.string.

РЕДАКТИРОВАТЬ: Основываясь на ответе Бартека, сделайте это в своем скрипте:

Param ([Parameter(Mandatory=$true,ValueFromPipeline=$true)][Security.SecureString]$Password)       

Затем вам нужно передать вашему скрипту объект SecureString следующим образом:

PS:> Read-Host -AsSecureString | .\YourScript.ps1
1
ответ дан 2 December 2019 в 22:02

Теги

Похожие вопросы