2010-10-07 33 views
3

J'écris une classe C# qui exécute un processus (REG) pour exporter les clés de registre. REG exige que vous spécifiez un nom de fichier à exporter mais je préfère que la sortie de REG soit dirigée vers la sortie standard afin que je puisse le capturer directement dans mon code C# (en utilisant Process.StandardOutput). Existe-t-il un moyen dans PowerShell de spécifier la sortie standard comme nom de fichier?PowerShell: comment utiliser la sortie standard à la place du nom de fichier

Répondre

4

Si vous devez utiliser le programme REG (plutôt que d'utiliser PowerShell pour interroger/vider le registre - ou même simplement le faire dans le programme C# lui-même), le mieux que vous obtiendrez est probablement de lui permettre de vider dans un fichier temporaire, puis conduit le contenu du fichier à sortir standard et capturer dans votre programme C# de cette façon:

$guid = [Guid]::NewGuid().ToString("N") 
REG EXPORT HKCU\Software\Microsoft\Windows "$env:temp\$guid" | Out-Null 
Get-Content "$env:temp\$guid" 
Remove-Item "$env:temp\$guid" 

Si vous ne saviez pas: l'aide PowerShell, vous pouvez naviguer dans le registre comme même si cela faisait partie du système de fichiers. Peut-être que cela est utile à d'autres égards?

cd HKCU:\Software\Microsoft\Windows 
dir 
1

utilisez simplement « CONOUT $ » comme nom de fichier (comme pojnted dans les commentaires, cela ne fonctionne que sous Windows XP):

PS C:\> reg export HKLM\SOFTWARE\FileZilla 'CONOUT$' 
■W i n d o w s R e g i s t r y E d i t o r V e r s i o n 5 . 0 0 

[ H K E Y _ L O C A L _ M A C H I N E \ S O F T W A R E \ F i l e Z i l l a ] 
" I n s t a l l _ D i r " = " C : \ \ P r o g r a m F i l e s \ \ F i l e Z i l l a " 
" R u n i n S e c u r e M o d e " = " 0 " 
" U s e R e g i s t r y " = " 0 " 
" L a n g u a g e " = " E n g l i s h " 

Il y a quelques problèmes de codage UNICODE dans la sortie présentés ici , mais vous devriez être capable de gérer cela dans le tampon lorsque vous l'analyserez.

+0

Astuce intéressante, mais cela n'a pas fonctionné pour Win7 ou Server2003 (tout ce que j'ai à tester). Je reçois cette erreur ... ERREUR: Impossible d'écrire dans le fichier. Il peut y avoir une erreur de disque ou de système de fichiers. – JasonMArcher

+0

Aussi ne fonctionne pas pour moi. Je reçois le même message que ci-dessus (ERREUR: impossible d'écrire dans le fichier, il peut y avoir une erreur de disque ou de système de fichiers). – Trevor

+0

Lorsque j'ai testé sur XP (SP3), il semble bien fonctionner. Échoue aussi pour moi sur Server2003. On dirait que Reg a été mis à jour, ce qui a brisé le tour. – zdan