通过别名将脚本加载到 PowerShell 控制台
Load script into a PowerShell console via an alias
要将脚本文件加载到打开的 PS 控制台(例如导入函数),需要点源或导入模块小程序。
在函数内部使用它(创建别名)不起作用,例如:
Function psinit1 { . C:\Scripts\scriptFunktions.ps1 }
Function psinit2 { Import-module C:\Scripts\scriptFunktions.ps1 -force}
当我调用 psinit1
或 psinit2
时,我没有收到错误消息,但我的功能不可用。为什么这不起作用,我是否正确地假设该函数打开一个加载脚本的新范围(并在函数完成后关闭)?
我怎样才能让它工作?
除非您通过 .
调用函数,dot-sourcing 运算符,其主体在 子作用域中执行 ,以便您在其中执行的任何操作 - 除非您明确针对不同的范围 - 仅限于 该子范围及其后代范围 .
因此,为了使您的函数按预期工作,即使定义对 调用者的 作用域可见,dot-source 它们的调用 也是:
. psinit1
一般来说,注意 while Import-Module
also accepts .ps1
scripts, its primary purpose is to act on modules。对于 .ps1
脚本,它的行为实际上类似于 dot-sourcing,除了 重复 一个 Import-Module
调用与子范围内的 .ps1
脚本失败,除非还指定了 -Force
(以强制重新加载)。
结果:不要将 Import-Module
与 .ps1
脚本一起使用:
避免的主要原因是它做出了无法兑现的承诺:因为简单的 dot-sourcing 发生了,没有实际的 模块 已导入 - 尽管 名义上 出现在 Get-Module
的输出中,以脚本文件的基本文件名命名(例如,foo
用于脚本 foo.ps1
).
因为发生了简单的dot-sourcing,你可以不使用Remove-Module
来卸载 稍后脚本的定义;虽然您可以在导入的 pseudo-module 上 调用 Remove-Module
,但它 没有效果 : dot-sourced定义仍然有效。
要将脚本文件加载到打开的 PS 控制台(例如导入函数),需要点源或导入模块小程序。
在函数内部使用它(创建别名)不起作用,例如:
Function psinit1 { . C:\Scripts\scriptFunktions.ps1 }
Function psinit2 { Import-module C:\Scripts\scriptFunktions.ps1 -force}
当我调用 psinit1
或 psinit2
时,我没有收到错误消息,但我的功能不可用。为什么这不起作用,我是否正确地假设该函数打开一个加载脚本的新范围(并在函数完成后关闭)?
我怎样才能让它工作?
除非您通过 .
调用函数,dot-sourcing 运算符,其主体在 子作用域中执行 ,以便您在其中执行的任何操作 - 除非您明确针对不同的范围 - 仅限于 该子范围及其后代范围 .
因此,为了使您的函数按预期工作,即使定义对 调用者的 作用域可见,dot-source 它们的调用 也是:
. psinit1
一般来说,注意 while Import-Module
also accepts .ps1
scripts, its primary purpose is to act on modules。对于 .ps1
脚本,它的行为实际上类似于 dot-sourcing,除了 重复 一个 Import-Module
调用与子范围内的 .ps1
脚本失败,除非还指定了 -Force
(以强制重新加载)。
结果:不要将 Import-Module
与 .ps1
脚本一起使用:
避免的主要原因是它做出了无法兑现的承诺:因为简单的 dot-sourcing 发生了,没有实际的 模块 已导入 - 尽管 名义上 出现在
Get-Module
的输出中,以脚本文件的基本文件名命名(例如,foo
用于脚本foo.ps1
).因为发生了简单的dot-sourcing,你可以不使用
Remove-Module
来卸载 稍后脚本的定义;虽然您可以在导入的 pseudo-module 上 调用Remove-Module
,但它 没有效果 : dot-sourced定义仍然有效。