Как создать условные аргументы в функции? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть следующая функция, которая скрывает средние символы пароля и оставляет видимыми первый и последний символы

function Hide-ConnectionStringPassword {
    param(
       [parameter(Mandatory,ValueFromPipeline)]
       [System.Data.SqlClient.SqlConnectionStringBuilder]$ConnectionString
    )
    [string]$FistChar = $ConnectionString.Password[0]
    [string]$LastChar = $ConnectionString.Password[($ConnectionString.Password.Length - 1)]
    [string]$Stars = '*' * ($ConnectionString.Password.Length - 2)
    $ConnectionString.Password = $FistChar + $Stars + $LastChar 
    return $ConnectionString.ConnectionString
}

Использование:

Hide-ConnectionStringPassword 'Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password12!553;'

выход:

Источник данных = datasource.com; ID пользователя = UID1; Пароль = p ************ 3; Время ожидания подключения = 120

У меня есть другие строки подключения, которыеотформатированы в JSON, поэтому приведение к sqlbuilder не будет работать с этим типом ввода

{"Тип аутентификации": "Имя пользователяPassword", "Имя пользователя": "someID1", "Пароль": "Yu# gh456! ts "," EncryptConnection ": true}

Я мог бы сделать что-то вроде этого:

$Json = '{"Authentication Kind":"UsernamePassword","Username":"someID1","Password":"Yu#gh456!ts","EncryptConnection":true}'
$Sql = $Json | ConvertFrom-Json
$Sql.Password

с

$Sql.gettype().name 

я получаю

PSCustomObject

Я хотел бы применить это в функции таким образом, чтобы он проверял ввод строки типа pscustomobject, чтобы он не приводил его как sqlbuilder

псевдокод :

function Hide-ConnectionStringPassword {
    if ($input.gettype().name -ne 'PSCustomObject')
    {
    param(
       [parameter(Mandatory,ValueFromPipeline)]
       [System.Data.SqlClient.SqlConnectionStringBuilder]$ConnectionString
    )}
    else
    {
    param(
       [parameter(Mandatory,ValueFromPipeline)]
       $ConnectionString
    )}
    [string]$FistChar = $ConnectionString.Password[0]
    [string]$LastChar = $ConnectionString.Password[($ConnectionString.Password.Length - 1)]
    [string]$Stars = '*' * ($ConnectionString.Password.Length - 2)
    $ConnectionString.Password = $FistChar + $Stars + $LastChar 
    return $ConnectionString.ConnectionString
}

1 Ответ

1 голос
/ 09 июля 2019

Вы можете просто удалить жесткий ввод в параметре.Затем переместите логику if-else в блоки сценариев Process {} или Begin {}.

function Hide-ConnectionStringPassword {

    param(
       [parameter(Mandatory,ValueFromPipeline)]
       $ConnectionString
    )

    if ($ConnectionString.GetType().Name -ne "PSCustomObject") {
    $ConnectionString = $ConnectionString -as [System.Data.SqlClient.SqlConnectionStringBuilder]
    }

    [string]$FistChar = $ConnectionString.Password[0]
    [string]$LastChar = $ConnectionString.Password[($ConnectionString.Password.Length - 1)]
    [string]$Stars = '*' * ($ConnectionString.Password.Length - 2)
    $ConnectionString.Password = $FistChar + $Stars + $LastChar 
    return $ConnectionString.ConnectionString
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...