Powershell schtasks输出采用不同的编码,无论是在本地运行还是在远程会话中运行

Powershell schtasks输出采用不同的编码,无论是在本地运行还是在远程会话中运行,powershell,powershell-remoting,Powershell,Powershell Remoting,我正在尝试检查服务器上的调度任务,我希望使用后台作业和远程会话来加快脚本的执行。 但是,当我在远程会话中运行命令时,输出的区域性(或编码?)与在工作站上的不同。 我尝试使用新的PsSessionOption,但结果相同: 本地运行schtasks检查远程服务器,输出正常: PS>Get-Culture LCID Name DisplayName ---- ---- ----------- 10

我正在尝试检查服务器上的调度任务,我希望使用后台作业和远程会话来加快脚本的执行。 但是,当我在远程会话中运行命令时,输出的区域性(或编码?)与在工作站上的不同。 我尝试使用新的PsSessionOption,但结果相同:

  • 本地运行schtasks检查远程服务器,输出正常:

    PS>Get-Culture
    
    LCID             Name             DisplayName
    ----             ----             -----------
    1036             fr-FR            French (France)
    
    PS>schtasks -s servername /v /query /fo csv |ConvertFrom-Csv |select -first 1
    
    
    Nom de l'hôte                                             : servername
    Nom de la tâche                                           : \BITS_CCM_Incoming_{16
                                                                674A29-EDDD-43C3-9EF2-
                                                                2B2D64EFA6F5}
    Prochaine exécution                                       : 23/11/2012 22:38:00
    Statut                                                    : Prêt
    
  • 打开远程会话并在本地运行任务:

    PS>$pso = New-PSSessionOption -Culture "fr-fr"
    PS>etsn servername -SessionOption $pso
    [servername]: PS C:\> get-culture
    
    LCID             Name             DisplayName
    ----             ----             -----------
    1036             fr-FR            Français (France)
    [servername]: PS C:\> schtasks /query /v /fo csv |ConvertFrom-Csv |select -First 1
    
    
    Nom de l'h"te                                             : servername
    Nom de la tƒche                                           :     \BITS_CCM_Incoming_{16674A29-EDDD-43C3-9EF2-2B2D64EFA6F5}
    Prochaine ex'cution                                       : 23/11/2012 22:38:00
    Statut                                                    : Pr^t
    

  • 正如您所看到的,尽管使用了相同的文化,但输出的内容似乎不同。如何处理这个问题?

    我无法提供确切的答案,但请检查$outpuneCoding和[Console]::outpuneCoding本地和远程会话


    将远程会话配置为与工作/本地会话匹配。

    过了一会儿,我发现我可以使用COM对象“Schedule.Service”检索不依赖于语言的任务信息:

    icm -AsJob -JobName getTasks -ComputerName $servers -ScriptBlock{
        $Schedule = new-object -com("Schedule.Service")
        $Schedule.connect($env:computername)
        $Tasks = $Schedule.getfolder("\").gettasks(0)
        $Tasks | Select-Object  Name,Path,State,Enabled,LastRunTime,LastTaskResult
    }
    
    $resu=wait-job getTasks |receive-job
    remove-Job getTasks
    
    $resu|sort PSComputerName
    

    使用此代码并不更好:
    $ce=[console]::OutputEncoding$oe=$OutputEncoding icm-Session$s-ScriptBlock{[console]::OutputEnconding=$using:ce;$OutputEncoding=$using:oe;schtasks}
    我发现我可以在本地会话中更改[console]::OutputEncoding,但是,当我在远程会话中运行相同的命令时,会引发一个异常:
    [localhost]:PS C:\>[console]::outpunecoding=[system.text.encoding]::ascii异常lors de la dfinition de.outpunecoding/:.Descripteur non-valide/Au-caract-re-Ligne:1:1+[console]::outpunecoding=[system.text.encoding]::ascii+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[],SetValueInvocationException+FullyQualifiedErrorId:设置时的例外