2015-08-29 103 views
1

我已经开始使用powershell昨天,很惊讶它是多么容易与批处理相比。我能够通过在谷歌搜索一下搜索解决大多数问题,但在这种特殊情况下,我只是没有得到任何错误消息。powershell nuget推送失败,没有错误

这是有问题的脚本:

https://github.com/taori/AjaxHub/blob/master/build/executePackaging.ps1

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt") 

foreach ($package in $packages){ 
    [xml]$xml = Get-Content($package + ".nuspec") 
    $version = $xml.package.metadata.version; 

    "Setting up packacking for $package $version" 

    $packagePath = ".\packages\$package\$version"; 

    If(Test-Path $packagePath){ 
     Remove-Item -Recurse -Force $packagePath 
    } 

    md -Force $packagePath 

    $packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    "Packaging with Nuget.exe $packArguments" 
    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop 


    $pushArguments = "push $packagePath\$package.$version.symbols.nupkg $apiKey" 
    "Pushing with Nuget.exe $pushArguments" 

    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop 
    Start-Process -FilePath "https://www.nuget.org/packages/$package" 
} 

Read-Host -Prompt "Script done. Press <enter>" 

这只是不工作推动部(至少有上nuget.org没有更新)或产生的任何错误。有谁知道如何使它工作或抛出错误,我可以合作?

+0

什么是你调用'nuget.exe'后检查'$'的价值? – briantist

+0

@ briantist没什么可悲的。试图从进程调用中分配返回值并输出它。 – Dbl

+0

您可以尝试运行'。\ Nuget.exe'作为'&Nuget.exe',它可能会干净地退出,但会将错误文本打印到缺少的控制台。通常我会避免使用'Start-Process'启动命令行应用程序。 –

回答

1

发现我的推送尝试有多个问题。我不知道为什么我没有得到任何错误,用普通的呼叫,但帮我展示他们:

Invoke-Expression "$nugetPath $pushArguments" -ErrorVariable $pushOutput 
"pushOutput: $pushOutput"; 

有很多方法从CLI调用尝试捕获错误,但是这一次似乎是最简单的(似乎与异步调用错误一起工作)。不幸的是,树先生的建议没有奏效。我也试过版本为“2> & 1”,但只指出语法错误/不返回任何内容。

的问题,我有过有以下几条:

  • 我没有在组命令适用-Wait
  • ,因为我没有做那个包进程异步
  • 我推走了尝试发生做包过程之前 - >文件未找到(我以为我没有得到的错误,因为我推了异步太)
  • DNS解析失败偶尔

脚本状态,而不会错误:

$packages = @("AjaxHub.Core","AjaxHub.MVC5") 

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt") 

$nugetPath = ".\Nuget.exe"; 

Resolve-DnsName "www.nuget.org" -ErrorAction Stop | Out-Null 
Resolve-DnsName "www.symbolsource.org" -ErrorAction Stop | Out-Null 

foreach ($package in $packages){ 
    [xml]$xml = Get-Content($package + ".nuspec") 
    $version = $xml.package.metadata.version; 

    "Setting up packacking for $package $version" 

    $packagePath = ".\packages\$package\$version"; 

    If(Test-Path $packagePath){ 
     Remove-Item -Recurse -Force $packagePath 
    } 

    md -Force $packagePath | Out-Null 

    # todo add sources for -Symbols pack process 
    #$packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    $packArguments = "pack -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    "Packaging with Nuget.exe $packArguments" 
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop -Wait 

    $pushArguments = "push $packagePath\$package.$version.nupkg -ApiKey $apiKey -Timeout 60 -Verbosity normal" 
    "Pushing with Nuget.exe $pushArguments" 
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop -Wait 

    Start-Process -FilePath "https://www.nuget.org/packages/$package" 

    ""; 
    ""; 
} 

Read-Host -Prompt "Script done. Press <enter>"