每当我在PowerShell中点源文件时,它会在记事本中打开该文件的副本。
埃克:
.\MyScript.ps1
脚本运行正常 - 它真的很烦人,一直弹出这些。有没有办法压制这个?
我使用的是Windows 7 x64并使用最新版本的PowerShell。
Ex2:这仍然是启动记事本。
cls
Set-Location "\\PSCWEBP00129\uploadedFiles\psDashboard\"
. .\assets\DCMPull\Powershell\SqlServerTransfer.psm1
. .\assets\DCMPull\Powershell\RunLogging.psm1
答案 0 :(得分:5)
您无法使用.psm1
文件扩展名来源PowerShell文件。一种选择是将它们重命名为.ps1
。
或者(在我看来,更好的方法),您可以使用Import-Module <module.psm1>
加载PowerShell模块。请注意Import-Module
的行为与点源的行为不同。点源在当前范围内运行脚本,并且还在当前范围内保留所有变量,函数等。 Import-Module
不这样做。
虽然不常见,但您也可以使用Export-ModuleMember从模块中导出变量。
答案 1 :(得分:1)
除了对Raziel的回答外,还有很多想法,使他们只能点缀扩展名为.ps1
的源文件,否则就会尝试为什么将其作为系统可执行文件运行。这是PeterWhittaker上GitHub的摘录:
. ./afile
仅在存在 无扩展名但在当前目录中可执行aFile或 (不需要执行)afile.ps1
文件,前者采用 如果两者同时存在,则优先;如果文件存在,但都不存在 可执行文件也没有扩展名.ps1,它就像是一个 文档。
. <filename>
,其中<filename>
是一个单纯的名字(没有路径成分) (出于安全考虑)设计只会在以下位置查找具有该名称的文件:$env:PATH
中列出的目录(请参见下文),而不是当前目录中的目录 目录。
答案 2 :(得分:0)
我遇到了完全一样的情况:如果点源导入.psm1
文件,会直接打开文件,而不是导入文件中的代码。
由于点源导入的功能只对后缀为.ps1
的文件有效,如果后缀不符合要求,则不会被视为路径,而是作为代码,所以就像直接运行对应的字符串一样,效果自然就是打开文件了。
所以,这个现象不是针对.PSM1
,如果你把扩展名改成TXT
,也会有同样的效果。它对任何后缀不是 .PS1
的文件都具有相同的效果。
你可以通过创建符号链接或硬链接来绕过这个问题!
在 PowerShell 7 中,使用 New-Item
可以轻松创建链接。