Salut,
parfois on est confronté devant des cas ou l'affichage des données dans le prompt n'est plus adéquate, pour cette raison
l'equipe de developpeur de PS nous a fourni une cmdlet spécial du nom 'invoke-item'
cette cmdlet, nous permet d'executer des actions sur les objets, tel que:
* ouvrir le fichier 'a.txt' avec l'application qui lui est associée
* ou bien "ouvrir le dossier 'c:\tree'"
* ou bien "ouvrir tous les fichiers qui commencent par 't' et qui se termine par 'txt'"
cette cmdlet est plus complète que la commande 'start' parcequ'elle permet l'utilisation des wildcards et permet de filtrer les élements selon certains critères.
malheureusement cette cmdlet n'est pas suporter par le psprovider 'Registry' .... si on fait une chose du genre:
PS Walid2mi>> Invoke-Item HKCU:\Software
ça va nous retourner une erreur:
Invoke-Item : L'exécution du fournisseur s'est arrêtée, car le fournisseur ne prend pas en charge cette opération.
comme vous venez de constatez, le 'Registry' n'est pas le même environement que le 'FileSystem'
une des solutions possibles est de créer notre propre fonction 'Invoke-Registry' qui va nous permettre d'afficher le registre sur la clef qu'on entrera comma paramètre...voici la fonction
function Invoke-Registry {
<#
.SYNOPSIS
affiche le registre sur la clef spécifié
.DESCRIPTION
affiche le registre sur la clef spécifié
.PARAMETER Path
Spécifie le chemin d'accès de la clef de registre sélectionné
.PARAMETER Maximize
maximize la fenêtre du registre
.EXAMPLE
PS HKLM:\Softawre> invoke-Registry .
.EXAMPLE
PS C:\> Invoke-Registry -Path 'Registry::\HKEY_Classes_Root\txtfile'
.EXAMPLE
PS C:\> Invoke-Registry HKCU:\Environment -Max
.LINK
invoke-item
.INPUTS
none
vous ne pouvez pas diriger des objets pour cette fonction
.OUTPUTS
none
.NOTES
Author: Walid Toumi
Blog: http://walidtoumi.blogspot.com
Date: 2/28/2012
Keywords: Registry - Invoke-Item
#>
param(
[Parameter(Mandatory=$true)]
[ValidateScript({
if(((item $_).PSProvider.Name -eq 'Registry') -or $_ -eq '.')
{$true} else {throw 'le paramètre "Path" doit correspondre à une clef de registre valide'}})]
$Path,
[Switch]$Maximize)
try{
$ErrorActionPreference = 1
$key = (Get-Item $Path).Name
$item = get-itemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit -Name lastkey
$item.LastKey = "My Computer\$key"
Set-ItemProperty -Path $item.PSPath -Name lastkey $item.LastKey
if($Maximize) { invoke-expression "$env:comSpec /c start /max regedit.exe" } else { regedit.exe }
}
catch {
Write-Error $_.Exception.message
}
finally{
$ErrorActionPreference = 2
}
}
cette solution n'est peux être pas la plus optimale, mais elle fonctionne.
si je trouve un peux de 'temps' et de 'paix'...ces jours-ci...je pourrais même envisagé de créer une fonction proxy du cmdlet 'invoke-item' qui utiliserait cette technique..
à bientôt alors...que la paix soit avec nous! ;)
Aucun commentaire:
Enregistrer un commentaire