Powershell ';chcp&x27;在计划任务中运行时功能不工作

Powershell ';chcp&x27;在计划任务中运行时功能不工作,powershell,character-encoding,scheduled-tasks,Powershell,Character Encoding,Scheduled Tasks,我编写了一个PowerShell函数,它按名称查找计划任务。像这样 $null = chcp 1252 schtasks /query /v /fo csv | Where-Object { $_.TaskName -like $ScheduledTaskName } 当我自己运行函数时,它工作得很好,但在计划任务中运行时,它不工作 问题在于字符编码。一些计划任务名称中包含像ä和ö这样的字符。由于某些原因,chcp在计划任务中运行时无法按预期工作 为了确保执行chcp,我添加了两行 chcp

我编写了一个PowerShell函数,它按名称查找计划任务。像这样

$null = chcp 1252
schtasks /query /v /fo csv | Where-Object { $_.TaskName -like $ScheduledTaskName }
当我自己运行函数时,它工作得很好,但在计划任务中运行时,它不工作

问题在于字符编码。一些计划任务名称中包含像ä和ö这样的字符。由于某些原因,chcp在计划任务中运行时无法按预期工作

为了确保执行
chcp
,我添加了两行

chcp | Out-File $filePath -Append
当然,
chcp
在函数中从
850
更改为
1252
。然后,我使用函数将
schtasks
查询的结果输出到一个文件中

$tasks = schtasks /query /v /fo csv | ConvertFrom-Csv
$tasks | Out-File $filePath -Encoding utf8
在那里我可以看到字符编码是不正确的

默认情况下,
$outpunecoding
也设置为
1252


我该如何解决计划任务中的字符编码问题?

我终于解决了这个问题

$Encoding = 1252
try {
    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding($Encoding)
}
catch {
    Write-Warning 'Console OutputEncoding is not settable on older versions of PowerShell ISE.'
}
$OutputEncoding = [System.Text.Encoding]::GetEncoding($Encoding)
$null = chcp $Encoding

现在,请正确执行任务。

我不明白您想要实现什么目标。为什么不使用UTF16(unicode)或UTF8呢。输入是什么?为什么你要强迫编码不同于unicode?嗯?可以schtasks是本机应用程序,而不是PowerShell cmdlet。1252是一种适用于字符的编码,如带有schtasks的ö和ä。UTF8编码(65001)不适用。850也是如此,当在区域设置中选择了正确的国家/地区时,Windows默认使用850。那么为什么不在MS world中使用Unicode(UTF16的别名)?对不起,什么?Word与此有什么关系?哈哈,世界不是Word!我说的是文件外编码unicode,即UTF16。