$ string.Substring Индекс / длина исключения

Я получаю это исключение при использовании подстроки:

Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within the string. Parameter name: length" At line:14 char:5 + $parameter = $string.Substring($string.Length-1, $string ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentOutOfRangeException 

Я понимаю его смысл, но я не уверен, почему мне дают данные, и длина правильная.

Я делаю следующее:

 $string = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\hid\Parameters\0" $parameter = $string.Substring($string.Length-1, $string.Length) 

Даже попытка жесткого кода бросает одно и то же исключение:

 $parameter = $string.Substring(68, 69) 

Есть что-то, что мне не хватает?

Ваш первый аргумент состоит в том, что начальная позиция в строке, а вторая – длина подстроки, начиная с этой позиции. Выражение для двух символов в позициях 68 и 69:

 $parameter = $string.Substring(68,2) 

Сообщение об ошибке пытается сказать вам следующее: начало подстроки и длина подстроки (второй параметр) должны быть меньше или равно длине строки. Второй параметр не является конечной позицией подстроки.

Пример:

 'foobar'.Substring(4, 5) 

Это попытается извлечь подстроку длиной 5, начиная с 5-го символа (индексы начинаются с 0, таким образом, это индекс 4 для 5-го символа):

 foobar ^^^^^ <- substring of length 5 

что символы 3-5 подстроки будут находиться за пределами исходной строки.

Вы должны ограничить длину выражения подстроки длиной до минус начальной позиции подстроки:

 $str = 'foobar' $start = 4 $len = 5 $str.Substring($start, [Math]::Min(($str.Length - $start), $len)) 

Или, если вы хотите только хвост строки, начинающейся с заданной позиции, вы полностью опустите длину:

 $str = 'foobar' $str.Substring(4) 

Если последний символ строки – это все, что вам нужно, вы можете добиться этого, просто обработав строку как массив символов и используя соответствующую индексную нотацию:

 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\hid\Parameters\0'[-1] 
  • Сценарий PowerShell для проверки приложения, которое блокирует файл?
  • PowerShell говорит, что «выполнение скриптов отключено в этой системе».
  • Многострочное регулярное выражение для соответствия конфигурационному блоку
  • Изменить параметры скорости / дуплекса NIC в сценарии?
  • Как включить выполнение сценариев PowerShell?
  • Экспорт-CSV экспортирует длину, но не имя
  • Пользовательский RoboCopy Progress Bar в PowerShell
  • Как различия версий влияют на команды PowerShell на удаленных компьютерах?
  • Каковы эквиваленты PowerShell для Bash's && и || операторы?
  • Как создать объект, который выводит список (не таблица)
  • Есть ли командная shell Windows, которая будет отображать символы Unicode?
  • Давайте будем гением компьютера.