code

PowerShell 스크립트가 윈도우즈 스케줄링된 작업으로 실행되지 않음

starcafe 2023. 8. 6. 10:14
반응형

PowerShell 스크립트가 윈도우즈 스케줄링된 작업으로 실행되지 않음

작동하는 PowerShell 스크립트가 있습니다. 작업 스케줄러를 ."C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"내 PS1 스크립트로 인수를 전달합니다.작업이 실행될 때 다음과 같은 최종 실행 결과가 표시됩니다.0x1.

스크립트가 열리면 로그 파일에 기록하도록 스크립트를 업데이트했지만 이 작업은 수행되지 않습니다.이 작업은 Powershell.exe도 열지 못하는 것과 같습니다.

이것이 정확하게 들립니까?무엇이 문제가 될 수 있습니까? 또는 어떻게 해결해야 합니까?

실행 정책에 문제가 있는 경우 PowerShell의 특정 호출에 대한 실행 정책을 설정할 수도 있습니다.예약된 작업을 통해 PowerShell을 실행할 때 주로 수행하는 작업은 다음과 같습니다.

powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File \\path\to\script.ps1

왜요?

-프로파일 없음

이렇게 하면 사용자의 PowerShell 프로필에 있는 어떤 것에도 의존하지 않고 추가 코드를 실행할 때 발생하는 오버헤드를 방지할 수 있습니다.

-로고 없음

스크립트의 출력을 캡처하는 경우에는 대부분 문제가 되지 않습니다.대부분은 기분이 좋아집니다.

-비인터랙티브

스크립트에서 예기치 않게 사용자에게 메시지가 표시되는 경우 작업이 무기한으로 대기하지 않도록 합니다.이 스위치를 사용하면 스크립트가 대신 종료됩니다. 적어도 매달리는 스크립트 대신 오류 코드가 발생합니다.

-실행 정책 바이패스

사용할 수 있습니다.Unrestricted여기 또는 원하는 실행 정책을 선택합니다.이것이 아마도 당신이 가장 필요로 하는 것일 것입니다.

실행 정책을 다음과 같이 설정하는 이유:

작업이 나중에 변경해야 할 다른 이유가 있을 수 있는 기본값이 아닌 전역 설정에 의존하지 않기 때문입니다.일부 다른 프로세스가 다른 실행 정책에 의존하는 경우 이러한 방식으로 작업과 충돌하지 않습니다.

또한 기본값을 변경할 필요가 없는 것이 좋습니다.기억할 내용/문서화/테스트가 적습니다.

보너스

예약된 작업의 결과에 대한 몇 가지 추가 원인은 John LVan의 답변을 참조하십시오.

" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "0x1:

  • 실행 정책에서 스크립트를 실행할 수 없습니다.이에 대한 자세한 내용은 Briantist의 훌륭한 답변을 참조하십시오.
  • 작업에는 작에다없다가 .Run with highest privileges플래그(작업의 일반 탭에 있는 확인란)가 활성화되었습니다.*
  • 매개 변수가 스크립트에 잘못 전달되고 있습니다.다음과 같은 접근 방식을 사용하는 경우-File ".\MyScript.ps1" -Parameter1 'Demo' 시도: 대신시도:-Command "& .\MyScript.ps1 -Parameter1 'Demo'"

*벤이 댓글에서 지적했듯이,Run with highest privileges권한이 설정할 스립트관예권여따필설없요습니가다정할명령일라부부지에크한같은에요필다음과리이자한예▁like▁some▁doesn▁commands(없다니습명령▁requires▁it▁if▁rights:▁(▁enabled▁the).Set-ExecutionPolicy또는Stop-Process필요할 수 있음).잘 모르겠으면 옵션을 선택하여 문제가 해결되는지 확인하고, 문제가 해결되지 않으면 선택하지 않은 상태로 둡니다.

저는 이것을 전에 해본 적이 있고 비슷한 문제가 있었습니다.대부분 PowerShell 보안 설정입니다.가장 확실한 것은 실행 정책을 다시 확인하는 것입니다(설정했다고 가정).

태스크를 실행할 사용자는 누구입니까?이전에 PowerShell 스크립트를 실행한 적이 있습니까?실행 정책에 관계없이 스크립트를 처음 실행할 때 각 사용자에게 PowerShell 스크립트 실행을 "허용"(Y/N)하라는 메시지가 표시됩니다.그것은 전에 저를 물었던 적이 있습니다.시도:

  • 해당 사용자로 로그인
  • 실행 정책을 확인합니다.
  • PowerShell 프롬프트에서 스크립트 시작
  • 다음 메시지에 응답합니다.

첫 번째 실행 후에는 이 문제에 대해 다시 걱정할 필요가 없으며 작업 스케줄러에서 정상적으로 실행해야 합니다.

도메인 보안에 따라 그룹 실행 정책을 설정해야 할 수도 있습니다.다음은 PowerShell 보안이라는 몇 가지 다른 확인 사항과 함께 이를 수행하는 방법을 자세히 설명하는 기사입니다.

이전 답변들은 큰 가치가 있습니다.인수 추가 필드에 아래 값을 추가했습니다.

-noninteractive -nologo -command "&{path\to\script.ps1}"

앰퍼샌드를 추가하고 경로를 곱슬곱슬하게 묶어야 합니다.앰퍼샌드 전과 곱슬곱슬한 교정기를 닫은 후에 큰따옴표를 붙이는 것을 잊지 마세요.

오류 메시지가 없고 문제가 무엇인지 알 수 없는 경우 PowerShell 스크립트가 예약된 작업에서 시작되지 않는 이유는 다음 단계를 수행하여 답을 얻습니다.

  1. 스케줄링된 작업에 대해 설정된 사용자로 CMD를 실행하여 PowerShell 스크립트를 실행합니다.
  2. PowerShell 스크립트가 있는 폴더로 이동합니다.
  3. PowerShell 스크립트를 실행합니다(스크립트 내부에 $ErrorActionPreference= 'continue'와 같은 오류 알림이 있는 경우 해당 알림을 차단하는 모든 문 제거).

모든 오류 알림을 볼 수 있어야 합니다.

제 대본 중 하나는 다음과 같습니다.

[시스템] 유형을 찾을 수 없습니다.서비스 프로세스.서비스 컨트롤러].이 유형을 포함하는 어셈블리가 로드되었는지 확인합니다.

이 경우 스크립트 시작 부분에 누락된 어셈블리를 로드할 줄을 추가해야 합니다.

Add-Type -AssemblyName "System.ServiceProcess"

다음 오류:

"1" 인수 "컴퓨터에서 서비스 제어 관리자를 열 수 없습니다."를 사용하여 "서비스 가져오기"를 호출하는 중 예외가 발생했습니다.이 작업에는 다른 권한이 필요할 수 있습니다."

선택 : "데이터베이스 이름" 속성이 이미 있으므로 속성을 처리할 수 없습니다.

저는 위의 @briantist의 답변을 사용하여 이 문제를 해결했지만, 정확히 어떤 스위치가 문제를 해결하고 있는지 확인하고 싶었습니다.

그것은 아무 상관이 없습니다.-ExecutionPolicy,-Noninteractive,-NoLogo,-NoProfile또는 기타 시스템 권한, 스크립트를 실행하는 사용자 계정 등.

추가하기만 하면 됨 - 파일이 스크립트 경로 앞에 있음Task Scheduler > Actions > Arguments필드. 이 스위치가 없으면 PowerShell이 시작되고 작업 기록이 표시됩니다.Action Completed스크립트가 실행되지 않았습니다.

언급URL : https://stackoverflow.com/questions/13015245/powershell-script-wont-execute-as-a-windows-scheduled-task

반응형