Copying a NuGet repository, all packages and all versions, using PowerShell

Today I needed to copy a full repo to my machine, and then I found some good ready-to-use commands in PowerShell. I created this based on the solution in this post, but it didn’t suffice for me as I would like to have all versions downloaded and not only the lastest.

It is simple, just we have to do it:

# Set the nuget source as trusted first, then it won't show any pop-ups
Set-PackageSource -Name NuGet-Source -Trusted

# Downloading...
Find-Package -AllVersions -Source NuGet-Source| ForEach-Object {
        Install-Package -Name $_.Name -MaximumVersion $_.Version -Destination 'C:\Temp\Nuget\' -Source NuGet-Source -SkipDependencies
}

 

Sometimes for some reason, the code above doesn’t return all packages from the remote repository. Then I found a way to do it from Package Manager Console within Visual Studio.
First I create a list of all packages this way (this code must be executed from Visual Studio, in Package Manager Console):

Get-Package -ListAvailable -AllVersions -IncludePrerelease -PageSize 122831 | ForEach-Object { $id = $_.Id; $_.Versions | ForEach-Object { ($id + ',' + $_.Version) } } > C:\Temp\Nuget\AllPackages.txt

Then I use PowerShell (out of Visual Studio):

Get-Content C:\Temp\Nuget\AllPackages.txt | ForEach-Object {
$package = $_.Split(',')
$id = $package[0]
$version = $package[1]

$path = ('C:\Temp\Nuget\' + $id + '.' + $version)

Write-Host $path
if(! (Test-Path -Path $path)) {
Install-Package -Name $id -MaximumVersion $version -Destination 'C:\Temp\Nuget\' -Source NuGetSource -SkipDependencies -AllowPrereleaseVersions
}
}

Easy way to upload TFS 2015 build tasks (using TFX)

First of all, we are talking about TFS 2015 build tasks, TFX tool and powershell tasks.

What do you need?

  • TFX installed
  • json file
  • ps1 file
  • full TFS access

 

How to authenticate with TFX:

I’m using basic authentication,

tfx login –auth-type basic

It will ask for:

Service-URL: http://tfs.yourdomain.com:8080/tfs

Username: domain\ID

Password: password

 

Once authenticated, go to the folder where your files are and execute this command to push all to the server:
tfx build tasks upload –task-path .\

 

The json file

Use another task as base for your new task, you must set a new GUID for your new task, it will identify your task. You must increase the version before each upload. And you can define the GUI in this file.

TFS API to manipulate your server Workspaces

Hi all, one in a while we need to do some changes within our TFS Build process template, and a easy way to do it is using powershell in pre or post build command.

I will add a sample code to find the current workspace and then you can program what you need from this point on.

Code:

# load the needed client dll’s
[void][System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.TeamFoundation.VersionControl.Client”)

#here I’m considering that your workspace is one folder up

$rootBuildPath = (get-item $PSScriptRoot ).parent.FullName

#here I get the workspaces set for that local folder

$workspaceInfos = [Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.GetLocalWorkspaceInfoRecursively($rootBuildPath)

#here I can get the tfs collection

$tfsCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($workspaceInfos[0].ServerUri);

#then I can get the version control service

$vc = $tfsCollection.GetService([type] “Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer”);

#and for example, download something

$fileXml = Join-Path -Path $rootBuildPath -ChildPath “file.xml”
$itemToDownload = $vc.GetItem(“$/teamProjectName/file.xml”, [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest);
$itemToDownload.DownloadFile($fileXml)

 

It works for all xaml builds and also for the new build system.

Using PowerShell to read xml-files

That’s a really common task when it comes to PowerShelling. Shall we manipulate some config files right after deploy it, preparing it to have the correct values, automatically?

At a first glance it seems to be difficult, but it’s actually completely straightfoward.

Take a look on these links and do wherever you want with your config files:
http://blogs.msdn.com/b/kalleb/archive/2008/07/19/using-powershell-to-read-xml-files.aspx
http://www.pluralsight-training.net/community/blogs/dan/archive/2006/11/28/43561.aspx 

Now you just need to use your creativity.