Splatting Arguments напрямую (без сохранения их во временной переменной) - PullRequest
0 голосов
/ 27 декабря 2018

Я получил хеш-таблицу с данными соединения для различных (S) FTP-соединений.Благодаря модулю "WinSCP" я могу легко создавать сеансы для (S) FTP-передач

. В настоящее время я сохраняю Hastable-результат во временную переменную $arguments и впоследствии использую эту переменную для сплаттинга

Даже если это всего одна строка кода, которую можно сэкономить: есть ли способ избежать переменной $arguments?


Sample-Hashtable:

$preferences = @{
    "FTPUser" = @{
        HostName   = "ftp.domain.com"
        PortNumber = 21
        Protocol   = "FTP"
    }
    "SFTPUser"       = @{
        HostName                             = "sftp.otherdomain.com"
        GiveUpSecurityAndAcceptAnySshHostKey = $true
    }
}

Функция Get-FtpSession с текущей временной переменной:

function Get-FtpSession ($user) {
    $arguments = $preferences["$user"]
    $session = New-WinSCPSession @arguments
    return $session
}

Я думал, что могу использовать что-то подобное (что неработа):

$session = New-WinSCPSession @($preferences["$user"])

PS: я знаю, что этот вопрос бессмысленно, но я все еще задавался вопросом, можно ли его решить

1 Ответ

0 голосов
/ 27 декабря 2018

Если вы хотите изменить этот командлет, вы можете добиться чего-то похожего, добавив переключатель ValueFromPipelineByPropertyName в его параметры.Таким образом, вы можете подавать параметры из трубы.

function foo { [CmdletBinding()]param(
    [parameter(ValueFromPipelineByPropertyName=$true)][String]$arg1,
    [parameter(ValueFromPipelineByPropertyName=$true)][String]$arg2
    )

    Write-Host ($arg1 + " " + $arg2 + "!")
}

[pscustomobject]@{arg1="hello"; arg2="there"} | foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...