通过Jerry Lee Ford Jr.的Powershell 2.0编写《绝对入门》一书。我已经能够解决并纠正(大量练习)这本书代码中的许多打印错误,但我似乎根本无法弄清。从同伴网站下载了他的股票代码,并且他的代码抛出了完全相同的错误。代码如下:
# *************************************************************************
#
# Script Name: GameConsole.ps1 (The PowerShell Game Console)
# Version: 1.0
# Author: Jerry Lee Ford, Jr.
# Date: January 1, 2007
#
# Description: This PowerShell script provides a listing of PowerShell
# game scripts and allows the player to play any game by
# entering its menu number.
#
# *************************************************************************
# Initialization Section
$menuList = @() #Stores an array containing information about script games
$playAgain = "True" #Controls the execution of a loop that controls game
#execution
# Functions and Filters Section
#This function gets the player's permission to begin the game
function Get-GameListing {
$gameList = @() #Stores and array containing a list of PowerShell scripts
$i = 0 #Used to set the index value of the array when adding elements to it
Clear-Host #Clear the screen
Write-Host #Display a game console header
Write-Host " --------------------------------------------------------------"
Write-Host " Windows PowerShell Game Console" -foregroundColor darkred
Write-Host " --------------------------------------------------------------"
$location = Set-Location C:\ShellScripts\Games #Specify the location of the game scripts
#Load an array with a list of all the PowerShell scripts in the specified folder
$gameList = Get-ChildItem . *.ps1 # | ForEach-Object -process {$i++; $gameList[$i] = $_.Name }
$gameList #Return the contents of the array to the calling statement
}
#This function displays a menu listing of PowerShell games
function Write-MenuList {
param($list) #The list of games to be displayed is passed as an array
$Counter = 0 #Used to number each menu item
Write-Host ""
ForEach ($i in $list) { #Iterate for each script stored in the array
$counter++ #Increment the counter by 1
if ($counter -lt 10) { #Format the display of the first 9 scripts
Write-Host " $counter. $i" -foregroundColor blue
}
else { #Format the display of all remaining scripts
Write-Host " $counter. $i" -foregroundColor blue
}
}
Write-Host "`n --------------------------------------------------------------"
}
function End-ScriptExecution {
Clear-Host #Clear the screen
Write-Host "`n Thank you for using the Windows PowerShell Game Console"
Start-Sleep 3 #Pause the execution of the script for 3 seconds
Clear-Host #Clear the screen
}
# Main Processing Section
$response = 0 #Stores player input
#Continue playing new games until the player decides to close the game console
while ($playAgain -eq "True") {
#Call the function that generates an array containing a list of game scripts
$menuList = Get-GameListing
#Call function that converts the contents of the array into a list of menu items
Write-MenuList $menuList
#Prompt the player to pick a game to play
$response = Read-Host "`n Enter the menu number for a game or Q to quit"
#Prepare to close the game console when the user decides to quit
if ($response -eq "Q") {
$playAgain = "False" #Modify variable value in order to terminate the loop
continue #Repeat the loop
}
#Convert the player's input to a integer and then validate the player's input
if ([int]$response -lt 1) { #Anything below 1 is not a valid menu number
Clear-Host #Clear the screen
Write-Host "`n `a`aInvalid selection."
Read-Host #Pause the script until the player presses the Enter key
continue #Repeat the loop
}
if ([int]$response -gt $menuList.length) {
Clear-Host #Clear the screen
Write-Host "`n `a`aInvalid selection."
Read-Host #Pause the script until the player presses the Enter key
continue #Repeat the loop
}
Invoke-Expression $menuList[$response] #Executed the selected game script
Clear-Host #Clear the screen
}
End-ScriptExecution
引发的错误是:
The term 'fortuneteller.ps1' is not recognized as the name of a cmdlet, functio
n, script file, or operable program. Check the spelling of the name, or if a pa
th was included, verify that the path is correct and try again.
At line:1 char:18
+ fortuneteller.ps1 <<<<
+ CategoryInfo : ObjectNotFound: (fortuneteller.ps1:String) [], C
ommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
无论我选择什么ps脚本菜单项,都会遇到相同的错误。任何帮助将不胜感激!
最佳答案
修改此行:
Invoke-Expression $menuList[$response] #Executed the selected game script
至:
Invoke-Expression $menuList[$response].FullName
或我的偏好:
& $menuList[$response].FullName
它最有可能失败是因为它试图执行“FortuneTeller.ps1”,并且工作目录不在该目录中,即使它不在该目录中,PowerShell也不会在不指定路径的情况下从当前目录执行脚本。 “。\ FortuneTeller.ps1”。通过通过
FullName
属性指定完整路径,可以避免此问题。
关于powershell - Windows PowerShell 2.0(绝对入门)-书中最后一个项目的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744455/