如何将参数传递给动态模块?

时间:2018-01-29 13:49:01

标签: powershell closures powershell-v3.0

我试图通过另一个函数参数将参数传递给New-module。 但它没有用。

function new-remotenode
{
    param
    (
        $hostName,
        $UserName,
        $Password,
        $UniqueName
    )
    New-Module -ArgumentList @($hostName,$UserName,$Password) -Name $UniqueName {

    $HostName = $hostName
    $UserName = $UserName
    $Password = $Password 
    function remoteExec
        { 
          param ( 
            $ScriptBlock
        )
            "Running the command $Scriptblock in " + $Script:HostName + "With " + $Script:UserName + $Script:Password
            #. $ScriptBlock
        }
    } | Import-Module -PassThru
}

function Remove-remotenode
{
    param
    (
        $name
    )
    Remove-module $name
}

$remoteNode = New-RemoteNode -hostName "<Some ip address>" -UserName "Admin" -Password "Password1" -uniqueName "Node1"

remoteExec { Get-childitem }

我正在传递用户名,密码和主机名,但我无法在remoteExec函数中访问它们。结果显示如下,没有UserName,Password和hostname

  

使用

运行命令Get-childitem

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

声明Module scriptblock中的参数:

New-Module -ArgumentList @($hostName,$UserName,$Password) -Name $UniqueName {
    param(
        $HostName,
        $UserName,
        $Password
    )

    function remoteExec
    { 
        param ( 
            $ScriptBlock
        )
        "Running the command $Scriptblock in " + $Script:HostName + "With " + $Script:UserName + $Script:Password
        #. $ScriptBlock
    }
} | Import-Module -PassThru