Powershell enregistrement à partir de invoke-command
J'ai un script qui inclut une fonction de journalisation.
La fonction écrit le journal pour $variable msg ensuite écrit le message à l'écran.
je peux rediriger cette sortie à un .txt fichier pour l'enregistrement.
J'ai besoin pour exécuter le script à plusieurs serveurs à l'aide de commande invoke-command
et d'écrire le journal de la sortie vers un fichier txt sur l'ordinateur qui exécute le script.
Je suis à essayer de comprendre comment la sortie à $msg dans l'écriture du journal fonction de la Possession et de le retourner afin que je puisse créer un maître de fichier journal pour tous les serveurs. Dois-je créer et remplir un objet personnalisé? Pas sûr de la façon de faire et d'obtenir les résultats de la session à distance.
Cela peut-il être fait?
Voici un exemple de code, je suis à l'aide et que le fichier journal de sortie devrait ressembler à:
$servers = 'Server1','Server2'
$logfile = 'c:\scripts\logs\Reg-DLL-log.txt'
foreach($server in $servers){
invoke-command -cn $server -sb{
Param($server)
Function write-log{
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeline=$true,Mandatory=$true)] [ValidateNotNullOrEmpty()]
[string] $Message,
[Parameter()] [ValidateSet(“Error”, “Warn”, “Info”)]
[string] $Level = “Info”,
[Parameter()] [ValidateRange(1,30)]
[Int16] $Indent = 0
)
$msg = "{0} {1}{2}:{3}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Level.ToUpper(), (" " * $Indent), $Message
#This is output to screen
switch ($Level) {
'Error' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Red'}
'Warn' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Yellow'}
'Info' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'white'}
}}
write-log -message 'Begin DLL registration for $server' -level Info
$RegFile = "cimwin32.dll"
regsvr32 $RegFile /s
write-log -message 'registered $RegFile' -level Info
write-log -message 'End DLL registration for $server' -level Info
} -ArgumentList $server
}
La sortie du journal de Reg-DLL-log.txt devrait ressembler à ceci:
2013-06-19 11:25:12 INFO:Begin DLL registration for Server1
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server1
2013-06-19 11:25:12 INFO:Begin DLL registration for Server2
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server2
OriginalL'auteur GreetRufus | 2013-06-19
Vous devez vous connecter pour publier un commentaire.
Comme documenté,
Invoke-Command
retourne toutes les sorties de commande, vous pouvez utiliserWrite-Output
au lieu deWrite-Host
et le tuyau de la sortie retournées dans un fichier. Il n'y a pas de fantaisie de couleur avecWrite-Output
, cependant. Vous pouvez, cependant, écrire 'Info', 'Avertir' et 'Erreur' niveau des messages pour les corriger flux à l'aideWrite-Output
,Write-Warning
etWrite-Error
. Aussi, vous pouvez supprimer la sortie deregsvr32
.OriginalL'auteur Ansgar Wiechers
J'ai fini par rendre l'ensemble de la foreach une variable en début du script:
$out = Foreach{.......}.
J'ai ensuite transmis la variable à la fin
$out | out-Fichier logfile $
Voici un exemple:
OriginalL'auteur GreetRufus