I've been creating some NuGet packages recenly and to automate the process I created the following script that:
- reads the package id from the script name
- reads the package version from the nuspec file
- can rebuild the solution, create a package and upload it by specifying the - jklparameters where:- j - 0/1 - disables/enables project rebuild
- k - 0/1 - disables/enables package creation
- l - 0/1 - disables/enables package upload to the server
 
Usage:
./MyPackage.ps1 110
This would create a package called MyPackage with rebuilding the solution but not uploading it to the server yet
param([String]$cmd)
$build = $cmd.Substring(0,1) -eq "1"
$pack = $cmd.Substring(1,1) -eq "1"
$push = $cmd.Substring(2,1) -eq "1"
$packageId=[System.IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Definition)
[xml]$nuspec = Get-Content $PSScriptRoot\$packageId.nuspec
$version = $nuspec.SelectSingleNode("//package/metadata/version").InnerText
if ($build)
{
    msbuild `
        /t:Rebuild `
        /nologo `
        /p:Configuration=Release `
        /p:TargetFrameworkVersion=v4.5.2 `
        /p:Platform="Any CPU" `
        /p:OutDir="$PSScriptRoot\lib\net452" `
        `"$PSScriptRoot\..\Foo.sln`"
}
if ($pack)
{
    nuget pack `
        $PSScriptRoot\$packageId.nuspec `
        -properties configuration=release `
        -outputdirectory C:\NuGet\packages\
}
if ($push)
{
    nuget push `
        C:\NuGet\packages\$packageId.$version.nupkg `
        -configfile $PSScriptRoot\NuGet.config
}

