Blog

Essayez les valeurs par défaut dans les paramètres PowerShell pour plus de flexibilité – Les meilleures astuces pour son serveur

Le 5 avril 2021 , mis à jour le 4 septembre 2021 - 5 minutes de lecture

[bzkshopping keyword= »Minecraft » count= »8″ template= »grid »]

Le code PowerShell hautement personnalisé fonctionne bien jusqu'à ce qu'il atteigne un mur de briques.

Une fois que vous avez appris à écrire des fonctions PowerShell, vous pouvez commencer par résoudre un problème spécifique. Au fur et à mesure que vous utilisez la fonctionnalité et que vous gagnez en expérience en matière de scripts, vous verrez comment la fonctionnalité serait plus utile si elle avait la polyvalence pour résoudre le même problème, mais d'une manière légèrement différente.

Apprendre à utiliser les valeurs par défaut dans les paramètres rend votre code à la fois adaptable à différentes situations et plus facile à comprendre.

L'utilisation des valeurs par défaut étend l'utilitaire à un paramètre

Supposons que vous ayez un VPN configuré sur votre client ou serveur Windows. Vous souhaitez qu'une fonctionnalité se connecte au VPN avec un ensemble spécifique d'informations d'identification stockées dans le gestionnaire d'informations d'identification Windows local.

Voici à quoi pourrait ressembler cette fonction:

Fonction Connect-WorkVpn 
$ cred = Get-StoredCredential -Target & # 39; Work VPN & # 39;
$ vpn = Get-VpnConnection -Nom & # 39; Travail & # 39;
if ($ vpn.ConnectionStatus -ne & # 39; Connecté & # 39;)
rasdial.exe $ ($ vpn.name) $ ($ cred.username) $ ($ cred.GetNetworkCredential (). password)

L'applet de commande Get-StoredCredential fait partie du module CredentialManager, qui crée et récupère les informations d'identification stockées dans Windows Credential Manager. Dans ce scénario, l'applet de commande évite d'avoir à saisir le nom d'utilisateur et le mot de passe chaque fois que vous vous connectez, mais vous pouvez toujours stocker vos informations d'identification en toute sécurité. le But paramètre est le nom des informations d'identification à récupérer.

Le reste de la fonction obtient la connexion VPN à l'aide de Get-VpnConnection, et si elle n'est pas connectée, elle est connectée à l'aide de l'application Windows rasdial.exe.

Connectez-vous au VPN en appelant la fonction:

Connect-WorkVpn

Ceci est une fonction unique: il se connecte au nom VPN Travail Utilisateur VPN de travail identification sans accepter aucun paramètre. Lorsque vous ajoutez d'autres VPN à votre système, vous pouvez le convertir en une fonctionnalité plus personnalisable avec plus de fonctionnalités, tout en utilisant les valeurs de paramètres par défaut pour le garder simple à utiliser.

La fonctionnalité mise à jour ajoute plus de paramètres pour prendre en compte un environnement avec plusieurs VPN:

Fonction Connect-Vpn 
param (
[string]$ VpnName,
[string]$ VpnCredName
)
$ cred = Get-StoredCredential -Target $ VpnCredName
$ vpn = Get-VpnConnection -Name $ VpnName
if ($ vpn.ConnectionStatus -ne & # 39; Connecté & # 39;)
rasdial.exe $ ($ vpn.name) $ ($ cred.username) $ ($ cred.GetNetworkCredential (). password)

La fonctionnalité révisée vous oblige à entrer manuellement le nom du VPN et le nom des informations d'identification pour vous connecter au même VPN qu'auparavant:

Connect-Vpn -VpnName & # 39; Travail & # 39; -VpnCredName & # 39; VPN de travail & # 39;

Cette fonctionnalité mise à jour se connecte à tous les VPN configurés avec des informations d'identification stockées, mais elle a perdu sa facilité d'utilisation. Vous pouvez ajouter des valeurs par défaut pour ramener cette flexibilité. Pour commencer, attribuez une valeur à ces paramètres dans le bloc de paramètres. Si aucune valeur n'atteint ces paramètres lorsque vous appelez la fonction, le script utilise à la place les valeurs par défaut codées en dur.

Fonction Connect-Vpn 
param (
[string]$ VpnName = & # 39; Travail & # 39;,
[string]$ VpnCredName = & # 39; VPN fonctionnel & # 39;
)
$ cred = Get-StoredCredential -Target $ VpnCredName
$ vpn = Get-VpnConnection -Name $ VpnName
if ($ vpn.ConnectionStatus -ne & # 39; Connecté & # 39;)
rasdial.exe $ ($ vpn.name) $ ($ cred.username) $ ($ cred.GetNetworkCredential (). password)

Comme l'affectation de variable habituelle, le code est attribué Travail à VpnName et VPN de travail à VpnCredName variables. Le script va maintenant se connecter VPN de travail en conduisant Connect-Vpn fonction en affectant ces valeurs par défaut aux paramètres du bloc de paramètres.

Pour configurer un VPN supplémentaire et un jeu d'informations d'identification, vous pouvez vous connecter à un autre VPN en soumettant les paramètres corrects:

Connect-Vpn -VpnName & # 39; Site1 & # 39; -VpnCredName & # 39; Site1 VPN & # 39;

Une valeur par défaut permet de gérer les connexions externes et locales

Une autre technique PowerShell utile consiste à écrire une fonction qui fonctionne sur des ordinateurs locaux et distants. Pour capturer le nom de la machine, nous pouvons écrire une fonction qui utilise un Nom de l'ordinateur paramètre. Le script est flexible car Nom de l'ordinateur Le paramètre est par défaut l'ordinateur sur lequel la fonction s'exécute.

Dans cet exemple, nous voulons parcourir les journaux d'événements et renvoyer tous les événements qui sont des tentatives de connexion infructueuses. Les événements sont affichés dans le journal de sécurité avec l'ID 4646. Le script ci-dessous utilise une fonction qui n'accepte pas les paramètres et renvoie 4648 événements à partir de l'ordinateur local.

Fonction Get-ExplicitLogins 
Get-WinEvent -FilterHashtable @
LogName = & # 39; Sécurité & # 39;
Id = 4648

Comme l'exemple précédent, nous pouvons rendre la fonction plus utile avec un paramètre pour le nom de l'ordinateur et lui donner une valeur par défaut. À moins que vous n'ayez besoin du script pour vérifier les journaux d'un système particulier, utilisez le nom de l'ordinateur local comme valeur par défaut.

Fonction Get-ExplicitLogins 
param (
[string]$ ComputerName = $ env: COMPUTERNAME
)
Get-WinEvent -ComputerName $ ComputerName -FilterHashtable @
LogName = & # 39; Sécurité & # 39;
Id = 4648

Tu peux appeler Get-ExplicitLogins fonction sans paramètres, et faites-lui renvoyer toutes les connexions explicites pour l'ordinateur local.

Vous pouvez transférer la fonction vers un nom d'ordinateur pour qu'il renvoie les événements à partir d'un ordinateur distant:

Get-ExplicitLogins -ComputerName & # 39; Test-PC01 & # 39;