首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SNMPTRAPD下Powershell中的TypeInitializationException导入模块

SNMPTRAPD下Powershell中的TypeInitializationException导入模块
EN

Stack Overflow用户
提问于 2019-07-29 20:18:23
回答 1查看 645关注 0票数 0

所以,这是我的设置:我有一个戴尔UPS,我想从一个特定的SNMP陷阱。为此,我将SNMPTRAPD设置为在Debian 9上作为服务运行。配置文件中有两个"Traphandle“语句,在检测到特定的陷阱OID后,启动一个Powershell脚本(下面的代码)。这些脚本首先要做的事情之一是导入VMware PowerCLI模块,这在TypeInitializationException中失败。

我试着在谷歌上和Powershell核心Github上查找类似的TypeInitializationExceptions问题,但是这些都是针对不同情况下的不同模块的,或者问题解决方案在我的头上。我尝试将.Net内核更新到最新的预览版本(SDK3.0.100-preview7-012821),但没有效果。当在SNMPTRAPD服务之外运行脚本时,此问题不会发生,该模块完全可以导入。

下面是我将代码缩减为:

代码语言:javascript
复制
#!/usr/bin/pwsh

$env:PSModulePath += ":/root/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/6/Modules"


Import-Module VMWare.Vim
exit 0

我必须将环境变量赋值放在其中,以解决不同的错误,其中Powershell无法找到模块目录。下面是SNMPTRAPD.conf文件,如果还需要显示该文件的话:

代码语言:javascript
复制
snmpTrapAddr 192.168.1.69:162
ignoreAuthFailure yes
doNotFork no
AuthCommunity log,execute,net public
traphandle .1.3.6.1.4.1.674.10902.2.140.0.47 /root/Desktop/pwshtest
traphandle .1.3.6.1.4.1.674.10902.2.140.0.48 /root/Desktop/killerpwsh

pwshtest就是这样运行的。

我希望powershell脚本能够导入模块并在没有错误的情况下退出,但这是我得到的错误。

代码语言:javascript
复制
Import-Module : The type initializer for 'VMware.VimAutomation.ViCore.Util10.SettingsManager' threw an exception.
Jul 29 16:11:54 debian-upsmon snmptrapd[2184]: At line:6 char:1
Jul 29 16:11:54 debian-upsmon snmptrapd[2184]: + Import-Module VMware.Vim
Jul 29 16:11:54 debian-upsmon snmptrapd[2184]: + ~~~~~~~~~~~~~~~~~~~~~~~~
Jul 29 16:11:54 debian-upsmon snmptrapd[2184]: + CategoryInfo          : OperationStopped: (:) [Import-Module], TypeInitializationException
Jul 29 16:11:54 debian-upsmon snmptrapd[2184]: + FullyQualifiedErrorId : System.TypeInitializationException,Microsoft.PowerShell.Commands.ImportModuleCommand

我试图得到内在的例外,但是,它似乎是空的。也许我做错了什么。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 15:33:26

这里的问题是,它需要一个用户文件夹来编写一些设置xml。它搜索当前用户的主目录,我打赌这个用户没有定义。

您可以执行以下操作:

在powershell脚本中,在导入模块之前添加以下内容:

$env:HOME = "/home/myuser“

并为该用户创建一个主目录:

mkdir myuser chown myuser:myuser myuser chmod 700 myuser

然后,我建议输入一个交互式pwsh会话并设置:

普什 设置- AllUsers配置-Scope AllUsers -ParticipateInCeip $false

为了完整起见:我为所有用户使用了这个模块路径: /usr/local/share/powershell/Modules --如果文件夹还不存在,就必须创建它。

我在Centos7上测试了这个,但我想它也会在其他发行版上工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57260845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档