Скрипт, работающий на консоли Powershell, но не на Powershell ISE - PullRequest
0 голосов
/ 28 февраля 2020

Это сообщение об ошибке, которое я получаю, когда запускаю код с Powershell ISE:

Исключение вызывает "Подстрока" с аргументом (ами) "1": "StartIndex не может быть меньше нуля.

Имя параметра: startIndex "

В C: \ Users \ 3N16M4 \ Desktop \ Untitled3.ps1: 8 символов: 1

  • $ Last = $ Role.Substring ($ Role.IndexOf ('FE'))
  • + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException
    
            $text ="`n"


            $String= Read-Host -Prompt 'Please Enter Value '


            $Role=Get-ChildItem -Path 'C:\Users\3N16M4\Desktop\New folder\*.txt' -Recurse |Select-string -Pattern $String -SimpleMatch -Context 9,0 |  Out-String -Stream |Select-Object -Index 1
            $Last=$Role.Substring($Role.IndexOf('FE'))

            $text

            Write-host ('The Answer is: {0}' -f $Last)

            $text

            Read-Host -Prompt 'Press Enter to exit'

Однако выполнение этого кода с VScode и консоль PowerShell не дает ошибок и запускает просто отлично, поэтому мне было интересно, что может быть причиной этого.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Опубликовать вывод.

$text ="`n"
$String= Read-Host -Prompt 'Please Enter Value '

$Foundfiles = Get-ChildItem -Path 'C:\temp\*.txt' -Recurse
If ($Foundfiles) {
Write-host "Files have been found. The problem is not here" -ForegroundColor green}
Else { Write-host "Error No files Found" -ForegroundColor Red }


$FilesThatContaintheString = $Foundfiles | Select-string -Pattern $String -SimpleMatch -Context 9,0
If ($FilesThatContaintheString) {Write-host "Found value in a file" -ForegroundColor Green}
Else { write-host  "Did not find the string in any of the files."  -ForegroundColor red}

$convertingToStrings = $FilesThatContaintheString | Out-String -Stream
If ($convertingToStrings) {write-host "Out-string works" -ForegroundColor Green}
Else {Write-host "Out-string is not working" -ForegroundColor red }


$selectTheSecoundOutputedString = $convertingToStrings |Select-Object -Index 1
If ($selectTheSecoundOutputedString) {
Write-host "If you see this then the issue is somewhere else" -ForegroundColor Yellow}
Else {Write-host 'Did not find a second string try $index 0' -ForegroundColor Red}

$Role = $selectTheSecoundOutputedString

Write-host "The value of Role is $role"
Write-host "The Index of FE is $($Role.IndexOf('FE'))"

$Last=$Role.Substring($Role.IndexOf('FE'))
$text
Write-host ('The Answer is: {0}' -f $Last)
$text
Read-Host -Prompt 'Press Enter to exit'
0 голосов
/ 01 марта 2020
$role = "you are the winner of a all expense paid trip to the beautiful beaches of Cancun.  There are few exceptions that a such as this script must be completed before you read all of the details.  The developer that is assisting in the writing of this script will require a new question if you more help.  It was a joy and pleasure to see this issue resolved." ;

Write-host "This String is $(($Role).length) characters long.";

$MaxDisplayWidth = 120;
$role -split '(\w{$MaxDisplayWidth})' | Where-Object {$_};
0 голосов
/ 28 февраля 2020

Во-первых, сделайте правильную проверку ваших переменных, потому что:

$Role.IndexOf('FE')

Вернет -1, когда не сможет найти текст 'FE' в $Role.

Когда он возвращает -1, следующий оператор:

$Role.Substring(-1)

Сбой с вышеуказанной ошибкой.

Это означает, что проблема заключается в том, как $Role заполнены. Выведите $Role, чтобы увидеть, возвращает ли он то, что вы ожидаете. Может быть $String устанавливается по-другому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...