模块自动加载就意味着可靠吗?

2024-03-05

环境

我有以下文件夹结构,用于保存 powershell 模块:

C:
  PsModules
     ...
     util
        util.psm1 (this contains implementation of 'Test-Function')
        util.test.ps1
     ftp
        ftp.psm1
        http.test.ps1
     ... 

大约有50个文件夹和模块c:\PsModules.

我已经设置了环境变量PSModulePath包括c:\PsModules。这似乎满足“格式良好的模块”的条件微软文档中有描述 https://msdn.microsoft.com/en-us/library/dd878350%28v=vs.85%29.aspx and 这个答案 https://stackoverflow.com/a/23168236/1404637.

Symptoms

有时 Test-Function从 ISE 调用时不会自动找到。事实上,在任何新推出的 ISE 中,总会有一些(看似不可预测的)模块无法自动找到。自动查找失败Test-Function,例如,看起来像这样:

PS C:\> Test-Function
Test-Function : The term 'Test-Function' is not recognized as the name 
of a cmdlet, function, script file, or operable program. Check the 
spelling of the name, or if a path was included, verify that the path is 
correct and try again.
...
+ FullyQualifiedErrorId : CommandNotFoundException

乍一看,这似乎表明util.psm1不是“格式良好”。如果它不是“格式良好”,那么可用列表不应该工作。但它确实有效:

c:\> get-module -ListAvailable util
Directory: c:\PsModules\util

ModuleType Version    Name                 ExportedCommands
---------- -------    ----                 ----------------
Script     0.0        util

PS C:\> Test-Function
...
+ FullyQualifiedErrorId : CommandNotFoundException

此外,调用后Get-Command对于模块来说,模块中的命令是可以通用的:

c:\> Get-Command -Module util
CommandType     Name                             ModuleName
-----------     ----                             ----------
Function        Test-Function                    util
c:\> Test-Function
Call to Test-Function succeeded!

问题

  1. 自动发现和模块自动加载应该是可靠且可预测的吗?

  2. 如何排查为什么 powershell 有时在调用之前找不到命令Get-Command -module?

  3. 依赖 powershell 自动加载模块是不好的做法吗?如果是这样,自动加载模块的良好做法是什么?


我无法谈论模块是否自动加载intended可靠,但我个人并不在完成的代码中依赖它。

如果我正在编写脚本或模块,我总是使用Import-Module TheModule -ErrorAction Stop,并且经常使用#Requires -Module AciveDirectory,TheModule,SQLPs以确保模块可用。

对于 PowerShell 控制台或 ISE 中的交互式使用,我通常依赖自动加载,但如果失败,我只是Import-Module手动进行会话。

在我总是希望为交互式会话加载特定模块的情况下,我将其加载到配置文件中。要查看各种配置文件,请运行以下命令(从 ISE 和控制台):

$profile | Get-Member -MemberType NoteProperty

您可以根据您希望模块可用的用户和主机来决定将导入模块的代码放置在何处。

到目前为止我只这样做posh-git https://github.com/dahlbyk/posh-git,但它似乎很适合您的用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模块自动加载就意味着可靠吗? 的相关文章

  • 使用 powershell 删除文件夹中的特定文件

    我想使用 powershell 脚本从我的文件夹 D Test 中删除特定的文本文件 以下是我的文件夹中的文件列表 需要删除文件名中名为 Defrag 的文件 Test txt Log txt Defrag 20180111 txt Def
  • 如何在powershell中获取登录用户的电子邮件

    使用 Vbscript 我们获取当前用户的电子邮件 ID 它就像下面几行一样简单 Option Explicit Dim objUser objADSysInfo Set objADSysInfo CreateObject ADSystem
  • 查找多模块 Maven Reactor 项目的根目录

    有没有一种简单的方法可以找到多模块 Maven 项目的根 例如 Gradle 的rootDir 背景 我想使用 maven dependency plugin 将多模块项目的所有子模块中的工件复制到相对于整个项目的根目录的目录 也就是说 我
  • 如何使用 PowerShell 从 Azure 函数查询 Azure 表

    我有一个名为的 Azure 表csvtable大约有一百万行 我想使用 Azure 函数查询并返回一行 我尝试过的是使用与表的输入集成 但是据我所知 这只给了我一个数据的子集 inputTable要过滤的变量 我也尝试过打开identity
  • 将表部署到表存储中的最佳方法

    你能让我知道吗 进行表存储部署的最佳方法是什么 因为我的开发团队询问他们有很多表 每个表都有数千个条目 因此 他们要求我咨询任何微软团队或博客人们检查进行表存储部署的最佳方法 您知道我们该怎么做吗 因为脚本每次都会耗尽和插入数千个条目 我们
  • Powershell添加系统变量

    我正在尝试使用 PowerShell 在此处添加系统变量 我已经尝试过两种方式使用 env MyTestVariable My test variable and Environment SetEnvironmentVariable Tes
  • 使用 Powershell 尊重原始大小写重命名文件中的文件名和内容

    关于按照解决方案使用 Powershell 重命名文件和文件内内容的问题here https stackoverflow com questions 77081055 renaming of files and content within
  • 为什么我不能在类方法中使用预定义变量?

    我尝试在类方法中使用预定义变量 例如 PSVersionTable 或 PSScriptRoot 他们失败并显示错误消息 方法中未分配变量 Example Class Foo String Version GetVersion If PSV
  • 如何使用 PowerShell 递归合并/“展平”文件夹结构

    我正在寻求帮助来重组许多子文件夹中的大量文件 示例来源 folderX aaa txt bbb txt folderY ccc txt folderZ ddd txt eee txt 理想结果 folderX aaa txt folderX
  • Powershell - 解析 PSDrive 别名之外的路径

    我有一个很长的路径名 我为其创建了一个 PS 驱动器 new psdrive name blah psprovider filesystem root c foo bar bizz bazz grozz grizz blah blow 我需
  • 有没有办法通过 PowerShell 检测声音?

    我想检测电脑是否正在播放任何类型的声音 如果它没有播放任何类型的声音 我可以在 Powershell 中使用其他条件并执行下一步需要执行的操作 那么有没有办法通过 PowerShell 来检测声音呢 Thanks 方法一 Import Mo
  • 如何在另一个powershell脚本中包含另一个powershell脚本文件?

    假设我有一个 powershell 脚本 其中包含位于当前路径相对路径的 Powershell 哈希 我们称之为 name ps1 它包含 names bob bobby john jones danial davis etc 现在 我有另
  • Powershell脚本运行缓慢

    我正在编写一个脚本来检查大约 15 个远程服务器上的版本 但该脚本的执行时间比我预期的要长得多 listServers compName1 compName2 compName3 compName15 Out File C temp jav
  • 无法找到模块提供者

    我在使用 PowerShell 时遇到问题 几乎就像没有完全安装一样 这很奇怪 因为它是 Windows 10 并且是附带的 在没有锁定的情况下 我尝试使用另一台正在运行的 Windows 10 计算机上的全新副本替换以下目录 C User
  • 使用 Powershell 关闭 Excel 应用程序

    我正在从 powershell 启动工作簿中的宏 以自动化流程 下面在 powershell 中打开 Excel 工作簿并运行宏 而不可视化该过程 问题是 即使我没有看到宏运行 从宏生成的新 excel 实例仍然打开 start Excel
  • 捕获 Exchange 命令行管理程序中的错误

    我正在尝试编写一个创建 Exchange 邮箱的 powershell 脚本 只要邮箱尚不存在 这种方法就可以正常工作 但是当我尝试捕获任何错误并将其报告回来时 脚本就会运行 就好像一切都很好一样 我在现有用户上运行该脚本 它显示了错误 但
  • 如何执行远程计算机上可用的 powershell 脚本?

    我试图在远程计算机上执行脚本 I did Enable PSremoting 在远程机器中 我放置了一个脚本hello ps1在远程机器中 我的客户端计算机是Windows XP 远程计算机是Windows 2003 然后我试图从我的客户端
  • 发生错误时如何停止powershell脚本?

    我有一个 主 powershell 脚本 它执行多个在虚拟机上安装应用程序的脚本 我正在尝试在主脚本上实现错误控制 意思是 如果安装应用程序的脚本之一失败 则不会执行其余脚本 这是我的主要脚本 try powershell exe Exec
  • 具有运行空间池的 SessionStateProxy 变量

    我想在 PowerShell 中使用运行空间池来执行后台操作 但我需要从主线程访问 WPF 窗口变量 普通运行空间有以下选项 runspace SessionStateProxy SetVariable xamGUI xamGUI 但是我如
  • 使用 Powershell 查找字符并重命名文件名

    我的目录中有大量具有此类命名约定的文件 1050 14447 Letter Extension pdf 等 我需要删除第二个下划线之前的所有字符 包括第二个下划线 因此新文件名将是 Letter Extension pdf 如何相应地迭代单

随机推荐

  • 如何在 pypi 上为新项目创建 API 令牌?

    我正在尝试使用 API 令牌将包上传到 PyPI 我想使用项目特定的 API 令牌而不是帐户特定的令牌 因为这看起来更安全 但是 由于尚未在 PyPI 上创建该项目 因此当我尝试在 PyPI 网站上创建新的 API 令牌时 没有可供选择的项
  • 如何使用 KeyEvent 定位正在运行的应用程序?

    我的目标是通过键事件来定位在后台服务的前台或后台运行的特定应用程序 我尝试了很多解决方案 但还没有成功 尝试的几个解决方案 全部来自后台运行的服务 通过广播 我尝试定位第一个管理关键事件的应用程序 例如电话应用程序 KeyEvent lKe
  • JAXB - 具有多个名称和类型的 XmlElement

    我有以下类层次结构 XmlRootElement public abstract class Animal XmlRootElement public class Dog extends Animal XmlRootElement publ
  • 函数内部与外部循环的速度差异

    Out of 这个帖子 https stackoverflow com questions 53971364 split a vector and summing values 53971606 53971606在对各种解决方案进行基准测试
  • 在 SQL Server 2012 上运行 DTS 包

    我读到 SQL Server 2012 不支持 DTS 包 我知道有一个向后兼容性包 选项 我们用于 SQL Server 2008R2 来运行 DTS 包 该向后兼容包不适用于 SQL Server 2012 吗 2008 R2http
  • JQuery 动画在 Internet Explorer 中不起作用

    我在使这个 JQuery 在 Internet Explorer 中工作时遇到了一些麻烦 它在 FF WebKit 等中工作得很好 向上滑动 弹起并落回原位 但在 Internet Explorer 中它什么也不做 按钮不起作用并且内容在页
  • didCreatePaymentResult stripeID 是一个card_ token,似乎无法保存给客户

    我有一个 swift iOS 应用程序 它要求用户提供应用程序中付款和未来付款的付款详细信息 它使用带有 Apple Pay 的 stripe SDK 并且似乎都已正确设置 我有以下方法 func paymentContext paymen
  • 检查类常量是否存在

    如何检查 PHP 类中是否定义了常量 class Foo const BAR 1 有没有类似的东西property exists or method exists 对于类常量 或者我可以使用defined Foo BAR 您可以使用以下代码
  • 根据 GPS 坐标将 Google 地图嵌入 HTML 页面

    我有一个 PHP 照片库 可以从图像中读取 GPS 坐标 我想修改它以使用坐标并在照片页面上包含谷歌地图 有没有一种简单的方法可以通过仅提供这对信息来在 HTML 页面上显示谷歌地图 Thanks 以下是一些可以帮助您入门的示例 使用谷歌地
  • 当我指定机器名时,无法在自己的机器上查询SystemIndex

    我正在尝试编写一个简单的程序来连接到远程计算机并查询索引状态 这是在我的机器上执行此操作的代码 这工作正常 using System using Microsoft Search Interop namespace IndexStatus
  • NServiceBus升级到3.3.8版本后出现WebException错误404

    我刚刚将 NServiceBus 解决方案更新到版本 3 3 8 我之前的版本是3 2 2 当我运行我的解决方案时 我收到以下错误 发生Web异常 远程服务器返回错误 404 未找到 发生 System Net WebException H
  • 将 csv 中的列转换为日期 powershell

    我有一个与此类似的 csv fundName MMFcusip ticker AsOfDate SumHoldingPercent BlackRock OH Muni MMP Instit 091927236 COIXX 2 29 2012
  • 在 LISP 中如何检查闭包中的自由变量?

    在 lisp 中 我可以像这样绑定在闭包中绑定的自由变量 let x 1 y 2 z 3 defun free variables x y z free variables 结果是 6 我想知道是否可以动态检查绑定的闭包变量 E g ins
  • 嵌入 python 错误 不支持按文件名导入

    我正在尝试将 python 嵌入到我的应用程序中 但很早就陷入了困境 我将 python 嵌入到我的 C 应用程序中并使用本教程中找到的代码 http docs python org 2 extending embedding html p
  • Android:使用 DrawableCompat 着色

    我正在尝试对 Android API 级别 21 之前的图像进行着色 我已经使用以下方法成功对项目进行了着色
  • XHR跨域限制的目的是什么?

    我一直想知道XHR跨域限制的目的是什么 其目的似乎是防止恶意注入的 Javascript 将私有数据发送给攻击者 然而 通过注入可以轻松地将数据发送到任何域script or img标签 或任何其他与此相关的外部资源 如果任意网站可以对您的
  • django Rest框架::传递原始查询

    是否可以在 django Rest 框架 如 django rest 中执行原始查询 https docs djangoproject com en dev topics db sql performing raw queries http
  • 在平板电脑模式下在最上面启动另一个应用程序

    当我从应用程序运行另一个 exe 时 它 在后台启动 并且不会在屏幕顶部显示该应用程序 而是显示平板电脑模式主屏幕 它在正常桌面模式下工作正常 但当我在 Windows 10 平板电脑模式下运行它时它不会显示在顶部 而是在后台启动 我用过m
  • 什么是UUID?

    嗯 什么是一 它是唯一标识某物的标识号 这个想法是 id 号码将是普遍地独特的 因此 任何两个事物都不应该具有相同的 uuid 事实上 如果您要生成 10 万亿个 uuid 则两个 uuid 相同的概率为 0 00000006
  • 模块自动加载就意味着可靠吗?

    环境 我有以下文件夹结构 用于保存 powershell 模块 C PsModules util util psm1 this contains implementation of Test Function util test ps1 f