Tester la présence d'une clef registre
Bonjour,
je me lance dans le scripting PowerShell. D'où ma question à caractère néophyte. Ma question est la suivante : comment tester l'existence d'une clef dans le registre et récupérer sa valeur.
Admettons que je souhaite tester puis récupérer la valeur de la clef HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown
J'ai donc utilisé le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
# Chemins registre
$HKLM_Mem_management = "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"
[...]
# Création du label $label_utilisateur
$label_utilisateur = New-Object System.Windows.Forms.Label
[...]
$clef_registre_existe = Test-Path $HKLM_Mem_management
if($clef_registre_existe -eq $true)
{
$value = (Get-Item -Path $HKLM_Mem_management)."ClearPageFileAtShutdown"
valeur de la clef si elle existe sinon "Clef registre inexistante !"
} else {
$value = "Chemin registre inaccessible !"
}
$label_utilisateur.Text = "Utilisateur : $resultat" |
Seulement, j'ai beau avoir testé différentes méthodes pour faire cette condition (celle en gras) mais aucune ne fonctionne. J'ai essayé de comparer avec"", $null et consorts mais rien.
Autre question, est-il possible de tester directement la présence (ou non) d'une clef ? Visiblement (et d'après l'aide en ligne de MS), Test-Path retourne toujours FALSE si on souhaite lui passer la clé directement.
Je fais donc appel à votre aide et vous remercie par avance.
while($null -ne ""){write-host "Stupid scripter !"}
J'ai trouvé !
Puré, c'est la 2ème fois que je me fais avoir...
La différence entre $null et "" ?
Et bien dans l'application, il y en a pas, un blanc est un blanc.
Par contre $null (sans type et sans valeur,variable vide) n'est pas de type string, contrairement à "".
Ce qui donne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
$HKML_IPall = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLSERVER\SuperSocketNetLib\Tcp\IPAll"
$Set_TcpPort = Set-ItemProperty $HKML_IPall -name "TcpPort" -value "1433"
$Set_TcpDynamicPorts = Set-ItemProperty $HKML_IPall -name "TcpDynamicPorts" -value ""
$Get_TcpPort = (Get-ItemProperty $HKML_IPall).TcpPort
$Get_TcpDynamicPorts = (Get-ItemProperty $HKML_IPall).TcpDynamicPorts
## la première condition est bonne, la seconde change de $null à ""
if (($Get_TcpPort -eq 1433) -and ($Get_TcpDynamicPorts -eq ""))
{
write-host "Tcp End"
}
else
{
write-host "Tcp Error"
} |
A mon avis ça peut aider...