我在这里有两个问题,为什么在运行脚本时脚本中无法识别以下函数:
脚本:
$pathN = Select-Folder
Write-Host "Path " $pathN
function Select-Folder($message='Select a folder', $path = 0) {
$object = New-Object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, $message, 0, $path)
if ($folder -ne $null) {
$folder.self.Path
}
}
我收到错误:
The term 'Select-Folder' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try aga
在
但是,如果我在Windows Powershell ISE中加载并运行它,它将在第一次给我错误,然后表现得已经“注册”了该函数并在此之后工作。
如果这是一个程序问题,我已经尝试将功能列在顶部而没有更好的运气。
注意我尝试过简单的功能,如:
Write-host "Say "
Hello
function Hello {
Write-host "hello"
}
使用完全相同的结果/错误,它会抱怨Hello不是函数....
此外,它仍然不会在PowerShell中运行脚本(仅在第一次初始尝试后的ISE中)。
答案 0 :(得分:12)
在尝试使用之前,您需要声明Select-Folder
函数。该脚本是从上到下阅读的,所以当您尝试使用Select-Folder
时,第一遍就不知道这意味着什么。
当你将它加载到Powershell ISE中时,它会找出Select-Folder
在第一次运行时的含义,它仍然会知道第二次尝试运行它(所以你不会得到它)那么错误。)
因此,如果您将代码更改为:
function Select-Folder($message='Select a folder', $path = 0) {
$object = New-Object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, $message, 0, $path)
if ($folder -ne $null) {
$folder.self.Path
}
}
$pathN = Select-Folder
Write-Host "Path " $pathN
每次运行时都应该有效。