IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Start-Transcript ne fonctionne pas correctement sous Windows 8.1


Sujet :

Scripts/Batch

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Start-Transcript ne fonctionne pas correctement sous Windows 8.1
    Bonjour,

    J'ai des soucis avec Start-Transcript sous Windows 8.1
    Le script suivant :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $logName="C:\_logs\transcript_"+(Get-Date -format 'yyyyMMdd-HHmmss')+".log"
    #Write-Host $logName
     
    Start-Transcript -path $logName -force | Out-Null
     
    Write-Host
    Write-Host "script version 2"
    Write-Host
     
    Stop-Transcript

    Sous W7 :
    **********************
    Début de la transcription Windows PowerShell
    Heure de début*: 20150604115904
    Nom d’utilisateur*: POSTE\MOI
    Ordinateur : POSTE (Microsoft Windows NT 6.1.7601 Service Pack 1)
    **********************

    script version 2

    **********************
    Fin de la transcription Windows PowerShell
    Heure de fin*: 20150604115904
    **********************
    Sous W8.1 :
    **********************
    Début de la transcription Windows PowerShell
    Heure de début : 20150604115904
    Nom d’utilisateur : POSTE\MOI
    Utilisateur RunAs : POSTE\MOI
    Ordinateur : POSTE (Microsoft Windows NT 6.3.9600.0)
    Application hôte : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    ID de processus : 3636
    **********************
    **********************
    Fin de la transcription Windows PowerShell
    Heure de fin : 20150604115904
    **********************
    Il n'y a pas traces des Write-Host !!! De +, les caractères spéciaux sont mal encodés (Dos\Windows en UCS-2 Little Endian) sous NotePad++

    Des idées ???

    Merci d'avance !

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Quelqu'un pourrait-il avoir la gentillesse de reproduire ce test SVP ?

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    a priori c'est un bug de la v4.

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Apparemment l'ajout (surcharge) de la fonction Write-Host semble résoudre ce problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Write-Host ($message,$nonewline,$backgroundcolor,$foregroundcolor) {$Message | Out-Host}
    Je vais faire d'autres tests.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Malheureusement ce n'est pas encore opérationnel...
    Ce genre d'appel de Write-Host génère des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Write-Host "aaaaaaaaaaaaa" -NoNewLine
    Write-Host "bbbbbbbbbb" -ForegroundColor White
    J'ai essayé en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function Write-Host {
    Param(
    	[Parameter(Mandatory=$true)]
    	[string] $Message = $(throw "message required."),
    	[string] $NoNewLine,
    	[string] $ForegroundColor
    )
    $Message | Out-Host
    }
    Mais je ne maitrise pas les "Param"...
    Comment pourrais-je adapter ma fonction Write-Host ?

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    Comment pourrais-je adapter ma fonction Write-Host ?
    Teste avec un proxy de cmdlet, qui reprend la définition des paramètres du cmdlet d'origine.
    C'est ce mécanisme qui permet de créer une 'surcharge' de cmdlet.

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Merci Laurent,

    Pas facile tout ça... sincèrement je vois pas par où commencer.
    Un p'tit début de code STP ???
    Merci d'avance.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    La génération :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $MetaData= New-Object System.Management.Automation.CommandMetaData((Get-Command Write-Host))
    $MetaProg=[System.Management.Automation.ProxyCommand]::create($MetaData)
    $MetaProg > ProxyWriteHost.ps1
    type ProxyWriteHost.ps1
    Renvoi ceci :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #ATTENTION exécuté avec la v4, le code de la v2 peut être différent
     
    [CmdletBinding(HelpUri='http://go.microsoft.com/fwlink/?LinkID=113426', RemotingCapability='None')]
    param(
        [Parameter(Position=0, ValueFromPipeline=$true, ValueFromRemainingArguments=$true)]
        [System.Object]
        ${Object},
     
        [switch]
        ${NoNewline},
     
        [System.Object]
        ${Separator},
     
        [System.ConsoleColor]
        ${ForegroundColor},
     
        [System.ConsoleColor]
        ${BackgroundColor})
     
    begin
    {
        try {
            $outBuffer = $null
            if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
            {
                $PSBoundParameters['OutBuffer'] = 1
            }
            $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Write-Host', [System.Management.Automation.CommandTyp
    es]::Cmdlet)
            $scriptCmd = {& $wrappedCmd @PSBoundParameters }
            $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
            $steppablePipeline.Begin($PSCmdlet)
        } catch {
            throw
        }
    }
     
    process
    {
        try {
            $steppablePipeline.Process($_)
        } catch {
            throw
        }
    }
     
    end
    {
        try {
            $steppablePipeline.End()
        } catch {
            throw
        }
    }
    <#
     
    .ForwardHelpTargetName Write-Host
    .ForwardHelpCategory Cmdlet
     
    #>
    Je te laisse consulter le tutoriel cité pour implémenter la solution de contournement ( a priori une ligne à modifier) , comme tu vas le mettre en prod et le maintenir (en tout cas assumer ce choix) autant comprendre un minimum le principe.
    Une fois le proxy créé et chargé tout code utilisant Write-Host pointera sur le code du proxy.

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Une remarque, la solution de contournement basée sur un proxy comme sur une fonction perd la possibilité d'utiliser des couleurs.
    Si tu as le temps teste si le bug se situe dans les API du host ou dans le cmdlet, à l'aide de la fonction suivante :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $host.ui.write
     
    OverloadDefinitions
    -------------------
    void Write(string value)
    void Write(System.ConsoleColor foregroundColor, System.ConsoleColor backgroundColor, string value)

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Merci Laurent !!

    Je n'avais pas compris le principe de "l'exportation"...
    J'essaye de faire ça.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/03/2011, 14h05
  2. Réponses: 3
    Dernier message: 15/05/2009, 09h57
  3. [MySQL] Mon code ne fonctionne pas correctement
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2007, 13h27
  4. Le débogage ne fonctionne pas correctement
    Par BNS dans le forum Visual C++
    Réponses: 4
    Dernier message: 13/07/2006, 13h59
  5. Réponses: 13
    Dernier message: 31/08/2005, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo