【问题标题】:Trying to get a PowerShell script to run a nuget.exe command试图让 PowerShell 脚本运行 nuget.exe 命令
【发布时间】:2014-12-29 13:04:26
【问题描述】:

我正在尝试在 PowerShell 脚本中运行以下命令。

nuget pack MyNuGetSpec.nuspec -Version 1.2.3-alpha

当我有这个 PS 代码时,我得到一个错误..

代码:

"NuGet packing $file to a .nupkg ..."
$exe = $path + "nuget.exe pack $file -Version $version"

$exe

&$exe

和错误信息..

NuGet 将 MyNuGetSpec.nuspec 打包到 .nupkg ... C:\Projects\Foo\NuGet 包规范\nuget.exe 包 MyNuGetSpec.nuspec -Version 1.2.3-alpha &:术语“C:\Projects\Foo\NuGet Package Specifications\nuget.exe pack MyNuGetSpec.nuspec -Version 1.2.3-alpha” 未被识别为 cmdlet、函数、脚本文件的名称,或 可运行的程序。检查名称的拼写,或者路径是否 包括,验证路径是否正确,然后重试。在 C:\Projects\Foo\NuGet 包规范\build.ps1:106 char:10 + &$exe + ~~~~ + CategoryInfo : ObjectNotFound: (C:\Projects\Foo... 0.1.0-alpha:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : CommandNotFoundException

$path == Directory: C:\Projects\Foo\NuGet Package Specifications
$file == `MyNuGetSpec.nuspec`
$version == 0.1.0-alpha`

最后,我将 .exe 与 .nuspec 文件并排放置(在同一文件夹中)。

【问题讨论】:

    标签: powershell nuget


    【解决方案1】:

    您需要将可执行文件名称与参数分开:

    $exe = $path + "nuget.exe"
    
    &$exe pack $file -Version $version
    

    【讨论】:

      【解决方案2】:

      小改动,

       $path="c:\..."
       $file= "MyNuGetSpec.nuspec"
       $version= "0.1.0-alpha"
       Invoke-Expression "$($path)\nuget.exe pack $($file) -Version $($version)"
      

      这应该使用适当的参数执行 nuget.exe

      【讨论】:

      • 这与@mickyBalladelli 的回答有何不同?
      • 当使用& 时,参数分别按原样传递。在这种情况下使用 Invoke-Expression 时,它将首先生成完整的字符串,然后将该字符串评估为 powershell 代码。 & 命令更安全,因为它只会扩展$exe。使用Invoke-Expression 时,如果$file 有分号和第二个命令,你就有问题了。
      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多