当密码包含"€"字符时,如何使用用户名和密码运行远程任务?



我正试图使用Jenkins在远程服务器上运行一个任务。我使用这个命令行:

SCHTASKS /RUN /S <remote server> /U <user> /P <password> /TN <task name>

这一直很好,但现在一个新客户的密码中有一个"€"字符,我不知道如何正确地将其传递到我的CMD行。它只是被一个"?"所取代因为标准CMD字体不支持th€符号。在我的CMD控制台中,我可以通过将dafault字体更改为"Lucida控制台"来解决这个问题,但我在Jenkins中无法做到这一点,也无法使批处理脚本使用该字体。

大多数需要通过用户名和密码进行身份验证的服务/服务器不允许使用代码值大于十进制127的字符,因为这很容易导致类似这样的问题。

在Unicode表中,欧元符号的代码值为20AC(十六进制,8364十进制)。

但在西欧和北美国家的代码页Windows-1252中,欧元符号的代码值为80(十六进制,128十进制)。在代码页Windows-1251中,对于西里尔文,欧元符号的代码值为88(十六进制,136十进制)。

因此,必须找出服务现在对密码的期望:

  1. Unicode字符串还是"ANSI"字符串
    (Microsoft定义的Windows代码页不是ANSI标准。)
  2. 在"ANSI"字符串的情况下,分别使用哪个代码页和哪个代码值

通过在命令提示窗口中运行可用于切换代码页的命令chcp,可以找到执行批处理文件时的活动代码页。通过输入chcp /? 查看非常简短的帮助输出

代码页850例如在控制台的德国Windows上默认设置。

现在让我们假设用户已经在使用Windows-1252的GUI窗口中输入了欧元符号,并且密码字符串不是以Unicode编码的,因此存储了十进制值为128的欧元符号。在这种情况下,有必要将批处理文件中的密码字符串中值为128的字节传输到服务/服务器。通过查看代码页850的字符表,可以发现字符Ç在该代码页中具有代码值128。所以试着在你的批处理文件中使用c-cedilla字母。

但最好的解决方案是用户更改密码,避免使用代码值大于十进制127的特殊字符。

最新更新