在多个函数之间使用哈希表会给我System.Collections.Hashtable

时间:2019-01-05 18:45:17

标签: powershell hashtable

我调用一个脚本并传递约50个参数来创建哈希表。在脚本中,我调用了一个函数来创建哈希表。在此函数中,它调用$env:中设置的一些变量,并基于此变量将哈希表解析为服务器特定的,并将其返回到脚本。因此,生成1个大的多级哈希,然后根据服务器上的信息通过密钥从中创建一个新的$hash。然后,这个新的$var会在脚本中稍后使用,以调用其他脚本,并在此服务器特定的哈希中传递另一个脚本,但是我得到的不是可用信息,而是System.Collections.Hashtable。最终,这个$hash最终完成了预定任务,但那时它只是System.Collections.Hashtable

我可以在PowerShell中手动运行代码,并获得一个哈希表,并且可以对其进行操作,当我开始尝试使用它时会出现问题。

第二个问题是我滥用了这些脚本,并用另一种方法调用它们,因此进行故障排除和获取日志记录确实是一个痛苦。我确实有很多日志调用,它们最终都存储在一个文件中,不确定该日志功能是否也引起了$hash的实际问​​题。

我的脚本经过代码签名,这有问题吗?

如果我调用函数或ps1,我可以将$hash传递给它吗?我有什么特别的事吗?

我基本上只想将所有信息传递给$hash

foo-dostuff $hash

开始以为我做不到。

2 个答案:

答案 0 :(得分:1)

最有可能您正在将该哈希表强制转换/强制转换为字符串。哈希表的tostring()方法实际上只输出类型名称:

(@{name = 'whatev'}).ToString()

检查使用哈希表的函数参数之一是否为[string]类型。

答案 1 :(得分:0)

我知道我需要提供一些代码,但是要在网上发布大量的代码并不容易。我深感抱歉。

我发现的关键是代码的先前编写者由于特殊权限而利用Windows Task Scheduler在服务帐户上下文中运行代码。

我遇到的问题是试图将包含哈希数据的变量传递给此计划任务。我最终将哈希输出到文件,然后再次导入。

因此,请勿尝试将哈希表与计划任务一起使用。