Powershell dot sourcing 在记事本中打开文件

Powershell dot sourcing opens up file in notepad

每次我在 PowerShell 中点源文件时,它都会在记事本中打开该文件的副本。

执行:

.\MyScript.ps1

脚本运行良好 - 一直弹出这些消息真的很烦人。有没有办法抑制这种情况?

我在 windows 7 x64 上并使用最新版本的 PowerShell。

例2:这还在启动记事本。

cls

Set-Location "\PSCWEBP00129\uploadedFiles\psDashboard\"
. .\assets\DCMPull\Powershell\SqlServerTransfer.psm1
. .\assets\DCMPull\Powershell\RunLogging.psm1

您不能使用 .psm1 文件扩展名点源 PowerShell 文件。一种选择是将它们重命名为 .ps1.

或者(在我看来是更好的方法),您可以使用 Import-Module <module.psm1> 加载 PowerShell 模块。请注意 Import-Module 的行为与点源不同。 Dot sourcing 在当前范围内运行脚本,并保留所有变量、函数、etc.in 当前范围。 Import-Module 不会那样做。

虽然不是很常见,但您也可以使用 Export-ModuleMember.

从模块中导出变量

除了 Raziel 的回答之外,还有很多想法是只能用 .ps1 扩展名来点源文件,否则为什么它会尝试 运行 它作为系统可执行文件。这是来自 PeterWhittaker on GitHub 的片段:

. ./afile would only execute something if there's either an extension-less but executable aFile in the current dir, or a (not-required-to-be-executable) afile.ps1 file, with the former taking precedence if both are present; if the file exists, but is neither executable nor has extension .ps1, it is opened as if it were a document.

. <filename> with <filename> being a mere name (no path component) by (security-minded) design only ever looks for a file of that name in the directories listed in $env:PATH (see below), not in the current directory.

我遇到了完全一样的情况:如果点源导入.psm1文件,会直接打开文件,而不是导入文件中的代码。

因为点源导入功能只对后缀为.ps1的文件有效,如果后缀不符合要求,则不会作为路径,而是作为代码,所以就好比直接运行对应的字符串,效果自然是打开文件

所以,这个现象不是针对.PSM1,如果你把扩展名改成TXT,也是一样的效果。对于任何后缀不是 .PS1.

的文件都具有相同的效果

您可以通过创建符号链接或硬链接来绕过这个问题!

在 PowerShell 7 中,使用 New-Item 创建链接很容易。