无论是本地运行还是远程会话,schtasks输出都采用不同的编码方式

时间:2012-11-23 13:52:18

标签: powershell powershell-remoting

我正在尝试检查服务器上的计划任务,并且我想使用后台作业和远程会话来加速脚本的执行。 但是当我在远程会话中运行我的命令时,输出的文化(或编码?)与我的工作站不同。 我尝试使用New-PsSessionOption但结果是一样的:

  1. 本地运行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
    
  2. 在本地运行schtasks打开一个远程会话:

    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
    
  3. 正如你所看到的那样,虽然使用相同的文化,但输出似乎有不同的含义。如何处理?

2 个答案:

答案 0 :(得分:1)

过了一会儿,我发现我可以使用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

答案 1 :(得分:0)

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

配置远程会话以匹配工作/本地会话。