Powershell点源在记事本

时间:2017-07-31 02:23:35

标签: powershell notepad

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

埃克:

.\MyScript.ps1

脚本运行正常 - 它真的很烦人,一直弹出这些。有没有办法压制这个?

我使用的是Windows 7 x64并使用最新版本的PowerShell。

Ex2:这仍然是启动记事本。

cls

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

3 个答案:

答案 0 :(得分:5)

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

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

虽然不常见,但您也可以使用Export-ModuleMember从模块中导出变量。

答案 1 :(得分:1)

除了对Raziel的回答外,还有很多想法,使他们只能点缀扩展名为.ps1的源文件,否则就会尝试为什么将其作为系统可执行文件运行。这是PeterWhittakerGitHub的摘录:

. ./afile仅在存在 无扩展名但在当前目录中可执行aFile或 (不需要执行)afile.ps1文件,前者采用 如果两者同时存在,则优先;如果文件存在,但都不存在 可执行文件也没有扩展名.ps1,它就像是一个 文档。

. <filename>,其中<filename>是一个单纯的名字(没有路径成分) (出于安全考虑)设计只会在以下位置查找具有该名称的文件: $env:PATH中列出的目录(请参见下文),而不是当前目录中的目录 目录。

答案 2 :(得分:0)

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

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

所以,这个现象不是针对.PSM1,如果你把扩展名改成TXT,也会有同样的效果。它对任何后缀不是 .PS1 的文件都具有相同的效果。

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

在 PowerShell 7 中,使用 New-Item 可以轻松创建链接。