直接展开参数(不将其保存在temp变量中)

时间:2018-12-27 14:12:26

标签: powershell hashtable

我有一个哈希表,其中包含各种(S)FTP连接的连接数据。多亏了模块“ WinSCP”,我可以轻松地为(S)FTP传输创建会话

当前,我将Hastable结果保存在一个临时变量$arguments中,然后将该变量用于后继操作

即使仅保留一行代码,是否有办法避免使用变量$arguments


示例哈希表:

$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"])

P.S:我知道这个问题是毫无意义的,但我仍在想是否可以解决

1 个答案:

答案 0 :(得分:1)

如果您愿意修改该cmdlet,则可以通过向其参数添加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