【发布时间】:2011-10-27 16:53:47
【问题描述】:
我有一个正在运行的主脚本。它的作用是读取一个充满其他 powershell 脚本的目录,点包含所有脚本并在每个由点分隔文件名的第一部分组成的预定义方法中运行。示例:
- 运行master.ps1
- Master.ps1 点源 .\resource\sub.ps1
- Sub.ps1 定义了一个名为“dosub”的函数
- Master.ps1 使用 Invoke-Expression 运行“dosub”
在 sub.ps1 中还定义了函数“saysomething”。在'dosub' 中实现的是对'saysomething' 的调用。
我的问题是我不断收到错误:
“saysomething”一词未被识别为 cmdlet 的名称, 函数、脚本文件或可运行的程序。检查拼写 名称,或者如果包含路径,请验证路径是否正确并 再试一次。
为什么方法'dosub'找不到在同一个文件中定义的方法'saysomething'?
master.ps1:
$handlersDir = "handlers"
$handlers = @(Get-ChildItem $handlersDir)
foreach ( $handler in $handlers ) {
. .\$handlersDir\$handler
$fnParts = $handler.Name.split(".")
$exp = "do" + $fnParts[0]
Invoke-Expression $exp
}
sub.ps1:
function saysomething() {
Write-Host "I'm here to say something!"
}
function dosub() {
saysomething
Write-Host "In dosub!"
}
【问题讨论】:
-
你的例子对我有用。您发布的内容正是您正在运行的内容吗?
标签: powershell