powershell nuget推送失败,无错误

powershell nuget推送失败,无错误,powershell,nuget,Powershell,Nuget,我昨天开始使用powershell,与批处理相比,它是多么简单,这让我感到惊讶。在谷歌上搜索一下,我就可以解决大多数问题,但在这个特殊情况下,我没有收到任何错误消息 这是正在讨论的脚本: $apiKey=[IO.File]::ReadAllText(“publish.apiKey.txt”) foreach($package中的package){ [xml]$xml=获取内容($package+“.nuspec”) $version=$xml.package.metadata.version;

我昨天开始使用powershell,与批处理相比,它是多么简单,这让我感到惊讶。在谷歌上搜索一下,我就可以解决大多数问题,但在这个特殊情况下,我没有收到任何错误消息

这是正在讨论的脚本:

$apiKey=[IO.File]::ReadAllText(“publish.apiKey.txt”)
foreach($package中的package){
[xml]$xml=获取内容($package+“.nuspec”)
$version=$xml.package.metadata.version;
“为$package$版本设置打包”
$packagePath=“.\packages\$package\$version”;
If(测试路径$packagePath){
删除项-递归-强制$packagePath
}
md-强制$packagePath
$packArguments=“pack-Symbols-Version$Version$package.nuspec-OutputDirectory$packagePath”;
“使用Nuget.exe$PackageGuments打包”
启动进程-文件路径“.\Nuget.exe”-WindowsStyle隐藏-ArgumentList$PackageGuments-ErrorAction停止
$pushArguments=“push$packagePath\$package.$version.symbols.nupkg$apiKey”
“使用Nuget.exe$pushArguments推送”
启动进程-文件路径“.\Nuget.exe”-WindowsStyle隐藏-ArgumentList$pushArguments-ErrorAction停止
启动进程-文件路径“https://www.nuget.org/packages/$package“
}
读取主机-提示“脚本完成。按”

只有推送部分不起作用(至少nuget.org上没有更新)或产生任何错误。有人知道如何使它工作或抛出我可以处理的错误吗?

结果表明,我的推送尝试存在多个问题。我不知道为什么我在一次普通通话中没有收到任何错误,但这有助于我显示错误:

Invoke-Expression "$nugetPath $pushArguments" -ErrorVariable $pushOutput
"pushOutput: $pushOutput";
有很多方法可以尝试从cli调用中捕获错误,但这一种似乎是最简单的(并且似乎可以处理异步调用错误)。不幸的是,特里先生的建议没有奏效。我还尝试了使用“2>&1”的版本,但只指出语法错误/没有返回任何内容

我遇到的问题如下:

  • 我没有应用-等待pack命令
  • 因为我没有这样做,所以包进程异步运行
  • 我的推送尝试发生在包进程完成之前->找不到文件(我假设我没有收到错误,因为我的推送也是异步的)
  • 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>"
$packages=@(“AjaxHub.Core”、“AjaxHub.MVC5”)
$apiKey=[IO.File]::ReadAllText(“publish.apiKey.txt”)
$nugetPath=“。\Nuget.exe”;
解析DnsName“www.nuget.org”-ErrorAction Stop | Out Null
解析DnsName“www.symbolsource.org”-ErrorAction Stop | Out Null
foreach($package中的package){
[xml]$xml=获取内容($package+“.nuspec”)
$version=$xml.package.metadata.version;
“为$package$版本设置打包”
$packagePath=“.\packages\$package\$version”;
If(测试路径$packagePath){
删除项-递归-强制$packagePath
}
md-强制$packagePath |输出为空
#todo为符号包进程添加源
#$packArguments=“pack-Symbols-Version$Version$package.nuspec-OutputDirectory$packagePath”;
$packArguments=“pack-Version$Version$package.nuspec-OutputDirectory$packagePath”;
“使用Nuget.exe$PackageGuments打包”
启动进程-文件路径$nugetPath-隐藏窗口样式-参数列表$packArguments-错误操作停止-等待
$pushArguments=“push$packagePath\$package.$version.nupkg-ApiKey$ApiKey-Timeout 60-Verbosity normal”
“使用Nuget.exe$pushArguments推送”
启动进程-文件路径$nugetPath-WindowsStyle Hidden-ArgumentList$pushArguments-ErrorAction停止-等待
启动进程-文件路径“https://www.nuget.org/packages/$package“
"";
"";
}
读取主机-提示“脚本完成。按”

调用
nuget.exe
?@briantist之后,您检查
$的值是什么。试图从进程调用分配返回值并将其输出。您可以尝试以
&Nuget.exe
的身份运行
\Nuget.exe
,它可能正在干净地退出,但控制台上打印了您丢失的错误文本。通常,我会避免使用
Start Process
启动命令行应用程序。
$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>"