在下面的示例模块文件中,有没有办法在导入模块时传递myvar值。
例如,
import-module -name .\test.psm1 -?? pass a parameter? e.g value of myvar
#test.psm1
$script:myvar = "hi"
function Show-MyVar {Write-Host $script:myvar}
function Set-MyVar ($Value) {$script:myvar = $Value}
#end test.psm1
(此片段是从另一个问题复制而来的。)
答案 0 :(得分:5)
这对我有用:
您可以使用–ArgumentList
cmdlet的import-module
参数在加载模块时传递参数。
您应该在模块中使用param
块来定义参数:
param(
[parameter(Position=0,Mandatory=$false)][boolean]$BeQuiet=$true,
[parameter(Position=1,Mandatory=$false)][string]$URL
)
然后像这样调用import-module
cmdlet:
import-module .\myModule.psm1 -ArgumentList $True,'http://www.microsoft.com'
正如可能已经注意到的那样,您只能向–ArgumentList
提供值(无名称)。因此,您应该使用position
参数仔细定义参数。
答案 1 :(得分:0)
不幸的是,-ArgumentList
的{{1}}参数不接受Import-Module
或[hashtable]
之类的东西。固定位置的列表对于我来说太静态了,因此我更喜欢使用一个[psobject]
参数,它必须像这样“手动分派”:
[hashtable]
导入模块或脚本执行以下操作:
param( [parameter(Mandatory=$false)][hashtable]$passedVariables )
# this module uses the following variables that need to be set and passed as [hashtable]:
# BeQuiet, URL, LotsaMore...
$passedVariables.GetEnumerator() |
ForEach-Object { Set-Variable -Name $_.Key -Value $_.Value }
...
上面的代码在两个模块中使用相同的名称,但是您当然可以轻松地将导入脚本的变量名称任意映射到导入模块中使用的名称。