Vers la fin des mises à jour manuelles de PowerShell?

Bonne nouvelle pour les utilisateurs de PowerShell. La version 7.2 supporte les mises à jour via Windows Update.

La mise à jour est activable lors de l'installation via msi.

powershell72uodate

Ce choix peut aussi être effectué lors de l'installation en ligne de commande (lien vers la documentation) .

Jérémy Jeanson

Comment supporter .net Standard avec Visual Studio 2015?

Si vous utilisez toujours Visual Studio 2015 aujourd'hui, vous êtes confronté à un problème de taille. Cette édition ne supporte pas .net Standard sans quelques aménagements.

Deux éléments doivent être installés :

Si vous n'utilisez que des librairies .net standard en version 1 (de 1.0 à 1.6), ces deux composant suffisent.

Si vous avez besoin d'utiliser .net standards 2 ou 2.1, vous pouvez être dans l'incapacité de compiler certains projets. Pour contourner le problème, il faut ajouter <ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades> au fichier .csproj ou .vbproj.

Jérémy Jeanson

Créer vos benchmarks .net plus rapidement!

Que vous utilisiez BenchmarkDotnet pour la première fois, ou que vous soyez déjà très expérimenté, la création de nouveaux projets n'est pas franchement drôle. Elle peut même être très chronophage (recherche dans la documentation, configurations, recherche des arguments à utiliser lors de l'exécution, etc. ).

Pour simplifier les choses, j'ai créé l'extension Benchmark Templates pour Visual Studio.

Celle-ci intègre les Templates permettant de :

  • Créer un nouveau projet console, avec benchmarks et configuration (C# ou VB).
  • Ajouter une classe de benchmarks (C# ou VB).
  • Lancer les benchmarks via un script PowerShell.

L'extension peut être installée directement à partir de Visual Studio (rechercher : Benchmark Templates). Elle peut aussi être téléchargée à partir du markeplace.

Bien évidemment, cette extension est ouverte. Si vous avez envie de participer, le projet est hébergé sur GitHub.

Templates C# et VB dans Visual Studio

Jérémy Jeanson

Préparer une application avant sa migration vers .NET 6

J'ai eu le plaisir d'écrire un nouvel article pour le numéro 249 de Programmez!.

Cette fois-ci, je vous propose de découvrir les préparatifs d'une migration vers .net 6 réussie. Cet article explique l'ensemble des actions qui peuvent être entreprises pour fiabiliser une application écrite aujourd'hui ou il y a 20 ans. Il liste aussi des solutions pour anticiper les breaking changes et diverses embuches qui se trouveront sur votre chemin.

Bonne lecture!

Couverture du numéro 249 du magazine Programmez!

Jérémy Jeanson

"Failed to release DHCP lease." avec une IP fixe et SConfig?

Si vous utilisez l'outil SConfig avec Windows Server, vous êtes peut-être déjà tombé sur le problème que je m'apprête à décrire.

Au moment de changer la configuration IP d'un serveur, le message suivant s'affiche :

Failed to release DHCP lease.

De prime aborde, le message n'est pas inquiétant. On pourrait lancer un ipconfig /renew et retourner dans SConfig.
Oui, mais voilà, tout n'est pas toujours aussi simple. Il se trouve que ce message d'erreur peut survenir alors que l'on utilise déjà une IP fixe.

Quelles solutions?

Pour s'en sortir, deux approches sont possibles :

  • Déconnecter le câble réseau, changer la configuration et reconnecter le câble.
  • Utiliser PowerShell pour ajouter une seconde IP fixe, et retirer ensuite l'ancienne IP.

La première approche est parfaitement envisageable sur une machine virtuelle. Elle n'est cependant pas envisageable sur un serveur physique géré entièrement à distance.

La seconde approche a donc ma préférence.

Comment s'y prendre?

Pour l'exemple qui suit, je vais ajouter l'IP 10.0.0.40 puis retirer l'IP 10.0.0.30.

Dans un premier temps, il faut identifier la carte réseau qui doit être manipulée. Pour cela, il suffit d'utiliser la commande :

Get-NetIPConfiguration -All

Ce qui produira un résultat similaire à ceci :

InterfaceAlias       : vEthernet (Lan)
InterfaceIndex       : 9
InterfaceDescription : Hyper-V Virtual Ethernet Adapter
NetProfile.Name      : home.lan
IPv6Address          : fe80::4%30
IPv4Address          : 10.0.0.30
IPv6DefaultGateway   :
IPv4DefaultGateway   : 10.0.0.1
DNSServer            : fe80::10
                       fe80::11
                       10.0.0.10
                       10.0.0.11

Si les informations affichées ne vous permettent pas d'identifier votre carte, il est possible d'utiliser la variante :

Get-NetIPConfiguration -All -Detailed

Celle-ci fournit l'intégralité des informations des différentes cartes réseau du serveur.

L'information qui nous intéresse est InterfaceIndex. Dans le cas présent, sa valeur est 9.

Cet index peut alors être utilisé pour ajouter une nouvelle IP via la commande New-NetIPAddress.

Exemple :

New-NetIPAddress -InterfaceIndex 9 -IPAddress 10.0.0.40 -PrefixLength 24

Ce qui donne :

IPAddress         : 10.0.0.40
InterfaceIndex    : 9
InterfaceAlias    : vEthernet (Lan)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 10.0.0.40
InterfaceIndex    : 9
InterfaceAlias    : vEthernet (Lan)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : PersistentStore
                                                                                                                                                                                                                                                                                                                                                                                                                                    [shost1]: PS C:\Users\Jeremy\Documents> Get-NetIPConfiguration -All                                                                                                                                                                                                                                                                                                                                                                 InterfaceAlias       : vEthernet (Lan)                                                                                                      InterfaceIndex       : 9                                                                                                                    InterfaceDescription : Hyper-V Virtual Ethernet Adapter                                                                                     NetProfile.Name      : home.lan                                                                                                             IPv6Address          : fe80::4%9
IPv4Address          : 10.0.0.8
                       10.0.0.4
IPv6DefaultGateway   :
IPv4DefaultGateway   : 10.0.0.1
DNSServer            : fe80::10
                       fe80::11
                       10.0.0.10
                       10.0.0.11

Pour finir, il suffit d'utiliser la commande Remove-NetIPAddress pour retirer l'ancienne adresse.

Exemple :

Remove-NetIPAddress -InterfaceIndex 8 -IPAddress 10.0.0.30


Et voilà ;)

Jérémy Jeanson