0

使用 powershell ISE,

如果我通过单击 Windows 资源管理器中的 .ps1 文件打开下面的文件,当我使用绿色箭头运行它时,它可以工作。如果使用 File->Open the same file,当我单击绿色箭头时会出现错误。

如果我通过单击打开它然后加载它,那很好,所以当我双击时某些东西(路径?)正在设置,这不是另一种方式......

让我澄清一下...如果我以一种方式打开文件(双击)它“编译”很好,如果我以另一种方式打开它(文件->打开)完全相同的文件不会“编译”。我希望弄清楚这是为什么。我的猜测是,它用于查找所需其他文件的路径变量通过两种打开方法设置不同(因为许多错误都“未找到”)

这是文件的代码(它基本上只是调用了一堆外部的东西)

###########################################################
# RUN (hit the green arrow) TO INITIALIZE
############################################################

############################################################
# set defaults
$path = Get-Location    
$ProjectName = $path.Path 
$ProjectName = $ProjectName.Replace("D:\Project Files\", "")
$ProjectName = $ProjectName.Replace("\_Powershell", "")
$ProjectName = $ProjectName.Replace("\WebApp", "")
$ProjectName = $ProjectName.Replace("\Webapp", "")
write-host "Project Name found: "  $ProjectName 
$Project = $ProjectName 
$RootPath = 'D:\Project Files\' + $Project + '\WebApp'
$ModulePath = 'D:\Project Files\' + $Project + '\WebApp\_PowerShell'


############################################################
# call this one to remove and reload the modules (if modules are modified)
function ReloadTemplates {

    RemoveLoadedModule WPK
    RemoveLoadedModule JcdcAddFileToProjectGui
    RemoveLoadedModule JcdcEoAndMap
    RemoveLoadedModule JcdcEoAndMapGui
    RemoveLoadedModule JcdcDal
    RemoveLoadedModule JcdcDalGui
    RemoveLoadedModule JcdcBll
    RemoveLoadedModule JcdcBLLGui
    RemoveLoadedModule JcdcView
    RemoveLoadedModule JcdcViewGui
    RemoveLoadedModule JcdcController
    RemoveLoadedModule JcdcControllerGui
    RemoveLoadedModule JcdcAutoMap
    RemoveLoadedModule JcdcAutoMapGui
    RemoveLoadedModule JcdcReport
    RemoveLoadedModule JcdcReportGui
    RemoveLoadedModule JcdcCv
    RemoveLoadedModule JcdcCvGui
    RemoveLoadedModule ReadWriteXML

    # load the Templates
    LoadTemplates
}
function RemoveLoadedModule { 
    param($PathAndName) 

    if(Get-Module -name $PathAndName)
    { 
        Remove-Module $PathAndName
    } 
} 


############################################################
# call this one to load the modules
function LoadTemplates {

    Import-Module WPK
    Import-Module "$ModulePath\JcdcAddFileToProjectGui.psm1"
    Import-Module "$ModulePath\JcdcEoAndMap.psm1"
    Import-Module "$ModulePath\JcdcEoAndMapGui.psm1"
    Import-Module "$ModulePath\JcdcDal.psm1"
    Import-Module "$ModulePath\JcdcDalGui.psm1"
    Import-Module "$ModulePath\JcdcBll.psm1"
    Import-Module "$ModulePath\JcdcBLLGui.psm1"
    Import-Module "$ModulePath\JcdcView.psm1"
    Import-Module "$ModulePath\JcdcViewGui.psm1"
    Import-Module "$ModulePath\JcdcController.psm1"
    Import-Module "$ModulePath\JcdcControllerGui.psm1"
    Import-Module "$ModulePath\JcdcAutoMap.psm1"
    Import-Module "$ModulePath\JcdcAutoMapGui.psm1"
    Import-Module "$ModulePath\JcdcReport.psm1"
    Import-Module "$ModulePath\JcdcReportGui.psm1"
    Import-Module "$ModulePath\JcdcCv.psm1"
    Import-Module "$ModulePath\JcdcCvGui.psm1"
    Import-Module "$ModulePath\ReadWriteXML.psm1"

    Initialize-AddFileToProject $RootPath $Project
    Initialize-EOMAPGui $RootPath $Project
    Initialize-DALGui $RootPath $Project
    Initialize-BLLGui $RootPath $Project
    Initialize-ViewGui $RootPath $Project
    Initialize-ControllerGui $RootPath $Project
    Initialize-AutoMapGui $RootPath $Project
    Initialize-ReportGui $RootPath $Project
    Initialize-CVGui $RootPath $Project
    Initialize-XMLArguments
}


############################################################
# load the Templates on Run (when green arrow is clicked)
ReloadTemplates
#

在命令窗口中键入以下内容之一

Select-A + = Select-AddFileToProject - 创建要添加到项目的文件

Select-B + = Select-BLLWhatToBuild - 添加一个 BLL

Select-C + = Select-ControllerWhatToBuild - 添加控制器

Select-D + = Select-DALWhatToBuild - 添加一个 DAL

Select-E + = Select-EoAndMapBuild - 添加 Eo 和 Map

Select-M + = Select-MapBuild - 添加 AutoMap

Select-R + = Select-ReportWhatToBuild - 添加报告

Select-Vi + = Select-ViewWhatToBuild - 添加视图

Select-Vm + = Select-VmCvOrExcel - 添加 CV、VM、D:\PowerShellTemplatesArgsor Excel

这是错误

PS U:> D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1 Project Name found: U:\ Import-Module : 未加载指定的模块 'D:\Project Files\U:\WebApp_PowerShell\JcdcAddFileToProjectGui.psm1'因为在任何模块目录中都没有找到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:61 char:18 + Import-Module <<<< "$ModulePath\JcdcAddFileToProjectGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...ProjectGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcEoAndMap.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:62 char:18 + Import-Module <<<< "$ModulePath\JcdcEoAndMap.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...dcEoAndMap .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcEoAndMapGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:63 char:18 + Import-Module <<<< "$ModulePath\JcdcEoAndMapGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...oAndMapGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcDal.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:64 char:18 + Import-Module <<<< "$ModulePath\JcdcDal.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...ll \JcdcDal.psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcDalGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:65 char:18 + Import-Module <<<< "$ModulePath\JcdcDalGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...JcdcDalGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcBll.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:66 char:18 + Import-Module <<<< "$ModulePath\JcdcBll.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...ll \JcdcBll.psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcBLLGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:67 char:18 + Import-Module <<<< "$ModulePath\JcdcBLLGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...JcdcBLLGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcView.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:68 char:18 + Import-Module <<<< "$ModulePath\JcdcView.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...l \JcdcView.psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcViewGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:69 char:18 + Import-Module <<<< "$ModulePath\JcdcViewGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...cdcViewGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcController.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:70 char:18 + Import-Module <<<< "$ModulePath\JcdcController.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...Controller .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcControllerGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:71 char:18 + Import-Module <<<< "$ModulePath\JcdcControllerGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...trollerGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcAutoMap.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:72 char:18 + Import-Module <<<< "$ModulePath\JcdcAutoMap.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...cdcAutoMap .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcAutoMapGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:73 char:18 + Import-Module <<<< "$ModulePath\JcdcAutoMapGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...AutoMapGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcReport.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:74 char:18 + Import-Module <<<< "$ModulePath\JcdcReport.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...JcdcReport .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcReportGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:75 char:18 + Import-Module <<<< "$ModulePath\JcdcReportGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...cReportGui .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcCv.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:76 char:18 + Import-Module <<<< "$ModulePath\JcdcCv.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...ell \JcdcCv.psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\JcdcCvGui.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:77 char:18 + Import-Module <<<< "$ModulePath\JcdcCvGui.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...\ JcdcCvGui.psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

Import-Module:未加载指定的模块“D:\Project Files\U:\WebApp_PowerShell\ReadWriteXML.psm1”,因为在任何模块目录中都找不到有效的模块文件。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:78 char:18 + Import-Module <<<< "$ModulePath\ReadWriteXML.psm1" + CategoryInfo : ResourceUnavailable: (D:\Project File...adWriteXML .psm1:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

术语“Initialize-AddFileToProject”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:80 char:29 + Initialize-AddFileToProject <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-AddFileToProject:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-EOMAPGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:81 char:24 + Initialize-EOMAPGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-EOMAPGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-DALGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:82 char:22 + Initialize-DALGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-DALGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-BLLGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:83 char:22 + Initialize-BLLGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-BLLGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-ViewGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:84 char:23 + Initialize-ViewGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-ViewGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-ControllerGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:85 char:29 + Initialize-ControllerGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-ControllerGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-AutoMapGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:86 char:26 + Initialize-AutoMapGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-AutoMapGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-ReportGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:87 char:25 + Initialize-ReportGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-ReportGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-CVGui”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:88 char:21 + Initialize-CVGui <<<< $RootPath $Project + CategoryInfo : ObjectNotFound: (Initialize-CVGui:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

术语“Initialize-XMLArguments”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\Project Files\CIS3G\Webapp_Powershell\ManualRun.ps1:89 char:28 + Initialize-XMLArguments <<<< + CategoryInfo : ObjectNotFound: (Initialize-XMLArguments:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException


当我打开文件时,有什么方法可以设置路径,这样就不会发生这种情况?

每个项目都有不同版本的这个文件夹和文件,因为它用于生成项目特定的代码......所以请注意,solution 也需要适用于该场景。

非常感谢任何帮助。

4

4 回答 4

1

不确定是否理解您的问题,但如果您想真正从脚本的位置开始,您可以使用$MyInvocation自动 var。

$MyInvocation.MyCommand.Path将为您提供脚本的路径(.PS1 文件),然后您可以使用Split-Path它来查找其目录位置。我认为在您的情况下Get-Location并不总是返回您考虑的路径。

于 2012-09-12T03:49:14.560 回答
1

我个人喜欢使用默认的 Var $PSScriptRoot

在你的情况下,我会启动脚本
Set-Location $PSScripRoot

这会将位置设置为您的脚本所在的位置,因此双击或打开文件位置并按播放将执行您的脚本

您可以在前面添加我的行,$path = Get-Location也可以完全消除 $path 行并仅使用 $PSScriptRoot 行,但是您还需要在整个脚本中将 $path 变量替换为 $PSScriptRoot

正如其他人所说,当您双击脚本时,如果您通过 ISE 手动打开,Powershell 将使用该路径,但它不会(它使用您在 ISE 中设置的任何最后一条路径)Set-Location $PSScriptRoot 行所做的是采用本地路径你的脚本总是不管你选择如何启动它

我希望这有帮助!

于 2018-08-22T15:46:20.087 回答
1

模块像脚本一样位于同一目录中?如果它是真的,那么问题的原因在于当前的直接。在开始或使用模块之前添加以下行:

Set-Location "<...>"

并让我们用您的脚本输入文件夹的路径,而不是 <...>。

于 2017-04-04T11:17:59.873 回答
1
$ModulePath = 'D:\Project Files\' + $Project + '\WebApp\_PowerShell'
Import-Module "$ModulePath\JcdcAddFileToProjectGui.psm1"

结果是

'D:\Project Files\U:\WebApp_PowerShell\JcdcAddFileToProjectGui.psm1' 

Windows 不允许单个路径中有多个驱动器号。你的里面有 U:​​。$Project = 'U:' 在当时$ModulePath进行了评估。这是 PowerShell 的起始工作目录。

底线是您使用的是相对于脚本运行位置的路径。当您打开 powershell 时,它会从您的个人资料中设置起始位置,如果您的个人资料中没有,则设置默认位置。从文件启动时,它使用该文件的位置。

您似乎在为每个项目硬编码一组单独的脚本 + 模块等,但它们定义的名称在项目范围内是一致的。 我建议您对每个脚本中的模块位置进行硬编码。

我还建议您重新考虑这种编码风格。改变某些东西一定是一场噩梦。如果您创建了一个加载单个模块的脚本会怎样。然后为每个项目创建一个配置文件,并为您的脚本创建一个快捷方式,该脚本加载主脚本以及从配置文件中读取的自定义部分。

于 2016-08-23T23:14:45.643 回答