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
创建链接很容易。
每次我在 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
创建链接很容易。