powershell - 使用带有错误捕获的 Module 语句
问题描述
我有一个脚本,出于多种原因,我想迁移到 PS5 和 Classes。这是一个很大的脚本,因此需要为各种类提供一些模块。但是,我有一些客户仍在使用 Windows 7 和 PS2。我最初的想法是提供一种自动更新 PowerShell 的方法,但据我所知,在模块中使用类的唯一方法涉及 Using Module 语句,它必须是脚本中的第一个语句。而且据我所知,任何尝试在 Windows 7/PS2 上运行所述脚本的人都会遇到严重错误,我没有任何机制来捕获该错误并提供日志或其他有意义的方式来传达正在发生的事情. 这是一个正确的评估,也许 PS 5 中的课程还没有为这种情况做好准备?我曾希望在 Classes 的帮助下转向更好的日志记录,但从表面上看,要么事情正常,要么我的脚本把床弄得一团糟,看起来真的很不专业。:(
解决方案
如果使用两个版本的脚本是你前进的方向,但你仍然想避免代码重复,也许可以这样重构你的脚本:
有三个文件,script_main.ps1
,script_using_imports.ps1
和script_legacy.ps1
.
在script_main.ps1
中,执行以下操作:
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
if (getPowershellVersion() > $VersionNeeded) { #Pseudocode function names
$scriptFile = "script_using_imports.ps1"
} else {
$scriptFile = "script_legacy.ps1"
}
get-content -path "$scriptPath\$scriptFile" -raw | invoke-expression
# The rest of main goes on assuming imports worked.
然后在script_using_imports.ps1
and中script_legacy.ps1
,您可以根据需要处理模块/类导入。
不确定这是否对您的用例有帮助,但这是一个想法!
我不得不参考这个来弄清楚如何做路径名的东西。
推荐阅读
- django - 将旧版经典 asp 网站移至 django 应用程序,但 django URL 重定向应用程序出现问题 - 带有参数的旧 URL 出现 500 错误
- vb.net - 索引超出数组范围?
- excel - 如何在 2 行中打破这个形状参考代码?
- python - 给定列表和整数时返回列表中的元素
- python - Broyden 在 Python 中的方法实现
- jquery - 在DIV结束后使固定元素滚动内容(滚动,不会在一瞬间消失)
- javascript - SQL 在数据库中插入空记录 - 使用 JavaScript
- xslt - XSLT 操作字符串,移动最后一个单词
- c++ - 访问冲突写入位置 0xCCCCCCCC 创建二维数组
- node.js - 需要验证我对开发依赖项和依赖项的理解