所以我想在导入模板中设置一个函数,它返回一个哈希表。但是当发生这种情况时,我遇到了一个奇怪的转换问题。主脚本:
$MigrationConfig = 'Migrate.Default',
$MigrationConfigPath = '.\MigrationConfigs\' + $MigrationConfig + '.psm1';
Import-Module -Name $($MigrationConfigPath);
if (((Get-Command -Module $MigrationConfig -ListImported) | Where-Object Name -eq 'GetSections').Length -ne 1) {throw "Migration Config $MigrationConfig which should be located at $MigrationConfigPath must export a function named 'GetSections'.";}
我们的想法是在$MigrationConfig(param)中给它一个新的值来加载一个新的查询集,然后主脚本通过名称GetSections来查找函数,然后使用该函数的返回值(期望HashTable易于使用)来运行脚本的其余部分,下面是psm文件的示例。
function GetSections {
return [HashTable]@{
'MigrationProc' = [ordered]@{
'1' = @{<#...#>}
};
};
};
然而,我已经在安装程序上运行测试,手动导入文件并尝试将输出视为哈希表……
foreach($f in ((Get-Command -Module 'Migrate.Default' -ListImported) | Where-Object Name -eq 'GetSections')) {([HashTable]([ScriptBlock]::Create($f.ScriptBlock).Invoke('1'))).Keys}
但我得到的结果是:
Cannot convert the "System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject]" value of type
"System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35]]" to type "System.Collections.Hashtable".
我如何构造主脚本或导入模块,以将函数输出视为哈希表?
1条答案
按热度按时间gv8xihay1#
按如下方式调用您的命令,该命令利用调用操作符
&
的功能来调用表示为System.Management.Automation.CommandInfo
类型示例的命令,作为Get-Command
的输出:如果不担心 * 命名冲突 *(即,如果您只希望 * 一个 * 安装的模块导出名为
Get-Sections
的命令):