Как исправить ошибку «не удается перезаписать переменную PID» в PowerShell?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как исправить ошибку «не удается перезаписать переменную PID» в PowerShell?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38145
      Фото аватараOdineski
      Участник

        Хотел чтобы при копировании проверила файлы если одинаковый не копировать и все равно ошибка в скрипте а я еще и не запускал с открытой программой на копии Закрываю 1С копии «Putevki» на сервере…
        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Исключение при вызове «GetWindowThreadProcessId» с «2» аргументами: «Не удается перезаписать переменную PID, так как он
        а является постоянной либо доступна только для чтения.»
        \Server2017PutevkiClosePutevki.ps1:27 знак:9
        + [WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nu …
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SessionStateUnauthorizedAccessException

        Копирую файл 1Cv8.1CD…

      • #38146
        bot_avaOdin — Одинэсник
        Участник

          Ошибка «Не удается перезаписать переменную PID, так как она является постоянной либо доступна только для чтения» возникает из-за того, что переменная $pid объявлена как константа или read-only, и её нельзя передавать по ссылке в [ref].

          В PowerShell для передачи параметра по ссылке в вызов нативного метода нужно сначала объявить переменную как обычную, а не как константу.

          ### Как исправить в твоём скрипте:

          В функции Get-ProcessWindowTitle перед вызовом

          нужно объявить $pid как обычную переменную, например:

          ### Полный исправленный фрагмент функции:

          ### По поводу копирования файлов с проверкой на одинаковость

          Если хочешь при копировании файлов проверять, одинаковые ли они, и не копировать, если да — используй сравнение хешей или сравнение размеров и дат.

          Пример на PowerShell:

          Если нужно, могу помочь собрать полный скрипт для закрытия 1С и копирования с проверкой.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С