无法将“System.Object []”类型的“System.Object []”值转换为“System.Char”类型

时间:2017-09-08 09:03:51

标签: powershell

我刚刚开始使用PowerShell,我正在制作一个非常简单的加密功能。我想将每个字符串放入一个字符串中,将其转换为int并添加一个选定的数字,然后将其转换回char。

这很好用:

function encrypt($a){
  $letter=[int][char]$a
  $letter=$letter+1;
  return [char]$letter
}
encrypt("test)

但这不是:

function encrypt($a, $key){
  $letter=[int][char]$a
  $letter=$letter+$key;
  return [char]$letter
}
encrypt("test", 1)

它给了我标题中的错误..我错过了什么?

1 个答案:

答案 0 :(得分:2)

你是以正确的方式传递你的参数:

encrypt "t" 1

作品。

Powershell会将("t", 1)视为单个参数。

由于您尚未将任何参数指定为必需参数,因此powershell将仅使用您提供参数的顺序。因此,第一个参数给出用于填充变量$a。您还可以按任何顺序调用名称参数:

encrypt -key 5 -a a
f

此外,powershell无法解析整个字符串(例如" test")作为字符,它总是需要是一个字符。如果你希望你的函数能够获取整个字符串,你可以这样做:

function encrypt($word,$offset){
    foreach ($letter in $word.toCharArray()) {
        $letter=[int]$letter+$offset;
        $return = $return + [char]$letter
    }
    return $return
}

这应该提供你想要的东西:

encrypt "test" 2
vguv