powercli - SNMPTRAPD下Powershell中的TypeInitializationException导入模块
问题描述
所以,这是我的设置:我有一个戴尔 UPS,我想从中捕获一个特定的 SNMP 陷阱。为此,我将 SNMPTRAPD 设置为在 Debian 9 上作为服务运行。我在配置文件中有两个“Traphandle”语句,它们在检测到特定的陷阱 OID 时会启动一个 Powershell 脚本(后面的代码)。这些脚本做的第一件事就是导入 VMware PowerCLI 模块,这会因 TypeInitializationException 而失败。
我尝试在 Google 和 Powershell Core Github 上查找 TypeInitializationExceptions 的类似问题,但这些问题针对不同情况下的不同模块,或者问题解决方案有点超出我的想象。我尝试将 .Net Core 更新到最新的预览版(SDK 3.0.100-preview7-012821),但无济于事。在 SNMPTRAPD 服务之外运行脚本时不会发生此问题,模块导入非常好。
这是我将代码缩减为:
#!/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 文件,如果还需要显示:
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脚本按原样导入模块并退出而没有错误,但是,这是我得到的错误。
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
我试图得到内部异常,但是,它似乎是空的。也许我在那里做错了什么。提前致谢
解决方案
这里的问题是它需要一个用户文件夹来在某处写入一些设置 xml。它搜索当前用户的主目录,我敢打赌这个用户没有定义。
您可以执行以下操作:
在您的 powershell 脚本中,在导入模块之前添加以下内容:
$env:HOME = "/home/myuser"
并为此用户创建一个主目录:
mkdir myuser
chown myuser:myuser 我的用户
chmod 700 我的用户
然后我建议进入一个交互式 pwsh 会话并设置:
密码
Set-PowerCLIConfiguration -Scope AllUsers -ParticipateInCeip $false
为了完整起见:我为所有用户使用了这个模块路径:/usr/local/share/powershell/Modules 如果该文件夹尚不存在,则必须创建该文件夹。
我在 Centos7 上对此进行了测试,但我想它也应该适用于其他发行版。
推荐阅读
- ruby-on-rails - AWS Ruby SDK 中的无效配置选项 `:dynamodb' 错误
- github - Jenkinsfile 中的条件环境变量
- python - 重新排序工作簿python中的一些工作表
- amazon-web-services - TypeError:无法读取未定义的属性“AwsCredentialsProvider”
- ruby-on-rails - Rails 不区分嵌套在相同命名空间中的两个资源
- java - 如果您更改实体标识符,Hibernate 不会从数据库中删除实体。它只是添加新的
- php - php get_headers() 函数 - 有没有办法告诉这个函数不要跟随重定向?
- scipy - Solve_ivp 变量求解函数
- javascript - 如何将字符串拆分为单个字符,其中每个新字符作为 json 对象添加到数组中
- c++ - 无法在 Visual Studio 代码中使用初始化列表初始化向量