컴퓨터가 시작될 때 PowerShell 스크립트를 실행하는 방법은 무엇입니까?
이미지 폴더를 모니터링하는 PowerShell 스크립트가 있습니다.컴퓨터 부팅 후 이 스크립트를 자동으로 실행하는 방법을 찾아야 합니다.
저는 이미 다음 방법을 시도했지만, 효과가 없었습니다.
msconfig
부팅에 PowerShell 스크립트를 추가했는데 해당 목록에서 PowerShell 스크립트를 찾을 수 없습니다.바로 가기를 만들어 시작 폴더에 놓습니다.운이 없다.
%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
또는
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
PowerShell 스크립트는 다음과 같습니다.
$folder = "C:\\Doc\\Files" $dest = "C:\\Doc\\Files\\images" $filter = "*.jpg" $fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' } $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { Start-Sleep -s 10 Move-Item -Path C:\Doc\Files\*.jpg C:\Doc\Files\images }
요.
taskschd.msc
아직 동작하지 않습니다.여기 제가 찾은 게 있어요. 아마 그게 디버깅에 도움이 될 거예요.
PowerShell 창을 열고 스크립트를 실행하면 작동합니다.하지만 명령 프롬프트에서 실행하면
powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
그것은 작동하지 않을 것이다.허가 문제인지 아닌지는 잘 모르겠습니다.
참고로 PowerShell 3.0이 설치되어 있고 $host 라고 입력하면버전에는 3이 표시됩니다.그러나 powershell.exe는 아직 v1.0인 것 같습니다.
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
기동할 때마다 PowerShell 스크립트를 자동으로 실행할 수 있게 되었습니다.의 파일을해야 합니다.첫 번째 은 Powershell 스크립트 Powershell 스크립트).script.ps1
되는 명령어( " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ( " " " " " " " " " 명령어프롬프트를 startup.cmd
를 참조해 주세요.
두 번째 파일은 컴퓨터 부팅 시 실행해야 하는 파일입니다.단순히 .ps1을 스타트업 폴더에 복사 붙여넣는 것은 동작하지 않습니다.스크립트를 실제로 실행하는 것은 아니기 때문입니다.메모장으로 파일을 엽니다.PowerShell을 사용하여 .ps1을 실행하는 .cmd를 실행해야 합니다.자, 이제 충분히 지껄이고 스텝으로 넘어갑시다.
- .ps1 스크립트를 생성하여 폴더에 저장합니다.나는 심플함을 위해 그것을 내 바탕화면에 놓았다.경로는 다음과 같습니다.
%USER Profile%\데스크톱\script.ps1
- .cmd 파일을 생성하여 에 저장합니다.
%AppData%\Microsoft\Windows \ Start Menu \ Programs \ Startup \ startup . cmd
이렇게 하면 부팅 시 매번 cmd 파일이 실행됩니다.도움이 필요한 경우 .cmd 파일을 작성하는 방법에 대한 링크가 여기에 있습니다.
- 텍스트 에디터를 사용하여 .cmd 파일을 열고 다음 행을 입력합니다.
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell %USERPROFILE%\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
이렇게 하면 다음 두 가지 작업을 수행할 수 있습니다.
- PowerShell의 실행 정책을 제한 없음으로 설정합니다.스크립트를 실행하는 데 필요합니다.그렇지 않으면 PowerShell에서는 실행할 수 없습니다.
- PowerShell을 사용하여 지정된 경로에 있는 .ps1 스크립트를 실행합니다.
이 코드는 PowerShell v1.0 전용입니다.PowerShell v2.0을 실행하고 있다면 조금 다를 수 있습니다.어떤 경우든 이 소스에서 .cmd 코드를 확인합니다.
- .cmd 파일을 저장합니다.
이제 .ps1 및 .cmd 파일이 각각의 경로에 있고 각 파일의 스크립트로 모두 설정되었습니다.
예약된 작업으로 설정하고 "시작 시"에 대한 작업 트리거를 설정할 수 있습니다.
shell:startup에 배치한 바로 가기를 만듭니다.
바로 가기에는 다음이 있습니다.
상::C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"
(필요에 따라 스크립트\cripts.ps1 추가)
★★★★★★★★★★★★★★★★★★★:C:\scripts
(스크립트가 있는 폴더와 함께 스크립트 추가)
사용자가 로그인하지 않은 경우에도 시작 시 자동으로 실행되는 스케줄러 작업을 만들 수 있습니다.
schtasks /create /tn "FileMonitor" /sc onstart /delay 0000:30 /rl highest /ru system /tr "powershell.exe -file C:\Doc\Files\FileMonitor.ps1"
PowerShell에서 Admin으로 이 명령을 한 번 실행하면 일정 작업이 생성됩니다.다음과 같이 작업을 나열할 수 있습니다.
schtasks /Query /TN "FileMonitor" /V /FO List
또는 삭제해 주세요.
schtasks /Delete /TN "FileMonitor"
이는 @mjolinor simple answer [Use Task Scheduler]의 확장에 불과합니다.
저는 "작업 스케줄러"가 올바른 방법이라는 것을 알았지만, 제가 원하는 방식으로 작업을 진행하기 위해서는 약간의 노력이 필요했고, 다른 사람들을 위해 저의 결과를 게시해야겠다고 생각했습니다.
다음과 같은 문제:
- 출력을 로그로 리디렉션하는 중
- PowerShell 창 숨기기
주의:하려면 , 「」를 참조해 .ExecutionPolicy
으로 작업 스케줄러에서 보이는 은 '다르다'입니다.Action
럴 、 、 네 、 it 、 it it it it it it it it 。Start a Program
프로그램/스크립트:
powershell
인수 추가(옵션):
-windowstyle hidden -command full\path\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
주의:
「」가 -File
그도 할 수 .-File
Path,이 리다이렉트는 경로의 일부로 간주되어 실패합니다.-command
할 수 를 들어, 리다이렉트에는, 「하다」라고 하는 명령어 또는 명령어를 할 수 있습니다.-windowstyle hidden
PowerShell 창 power power power power 。
는 모든 것을 .Write-Host
로로 합니다.Write-Output
제 대본에도 있어요.
시작 폴더에 바로 가기를 만들고 입력하십시오.
PowerShell "& 'PathToFile\script.ps1'"
이게 제일 쉬운 방법이에요.
전제 조건:
1. "관리자로서 실행" 옵션을 사용하여 powershell을 시작합니다.
2. 다음을 사용하여 서명되지 않은 스크립트 실행을 활성화합니다.
set-executionpolicy remotesigned
3. powershell 스크립트를 준비하고 경로를 파악합니다.
$path = "C:\Users\myname\myscript.ps1"
순서:
1. 트리거를 설정합니다.「New-JobTrigger (PSScheduledJob) - PowerShell | Microsoft Docs 」도 참조해 주세요.
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
2. 스케줄된 작업을 등록합니다.「Register-Scheduled Job (PSScheduled Job) - PowerShell | Microsoft Docs 」도 참조해 주세요.
Register-ScheduledJob -Trigger $trigger -FilePath $path -Name MyScheduledJob
하실 수 .Get-ScheduledJob -Name MyScheduledJob
3. Windows 부팅)restart /r
합니다. 라고 합니다.
Get-Job -name MyScheduledJob
「취업」(Microsoft)도 참조해 주세요.PowerShell.코어) - PowerShell | Microsoft 문서
참고 자료:
ps1을 이 폴더에 복사하고 필요에 따라 만듭니다.기동할 때마다(사용자 로그온 전) 실행됩니다.
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
또, 사용의 OS 빌드로 이용할 수 있는 경우는, GPEDIT.msc 를 사용해 실행할 수도 있습니다(저레벨의 OS는 사용할 수 없는 경우가 있습니다).
할 때는 파라미터를 -ExecutionPolicy Bypass
PowerShell.exe PowerShell.exe로 합니다.
PowerShell.exe -ExecutionPolicy Bypass
파일 시스템 워처를 기동하는 스크립트도 있습니다만, 스크립트 창이 닫히면 워처는 종료됩니다.가 원래대로 .powershell은 원래대로되지 않습니다.
파워셸
저는 이것을 하기 위해 많은 방법을 시도했지만, 실제로 효과가 있었던 것은 http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed의 것입니다.
param ( $Show )
if ( !$Show )
{
PowerShell -NoExit -File $MyInvocation.MyCommand.Path 1
return
}
걸걸 、 대에에에에든 든든든 。
합니다.
powershell.exe -noexit -command "& \path\to\script.ps1"
Windows 의 기동시에 실행할 Powershell 스크립트를 지정하는 비교적 짧은 경로는, 다음과 같습니다.
- Windows 버튼(Windows 버튼+r)을 클릭합니다.
- 다음을 입력합니다.
셸: 개요
마우스 오른쪽 버튼을 클릭하여 새 바로 가기를 만들고 컨텍스트 메뉴에서 메뉴 항목을 선택합니다.신기능=>바로가기
스크립트에 대한 바로 가기를 만듭니다. 예:
C:\Windows\시스템32\Windows PowerShell\v1.0\powershell.exe - NoProfile - 명령어 "C:\Users\someuser\Documents\Windows PowerShell\Scripts\somesscript.ps1"
No Profile 사용 주의: $profile 파일에 많은 초기화를 넣는 경우 Powershell 스크립트를 실행하기 위해 이 파일을 로드하는 것은 비효율적입니다.NoProfile은 프로파일파일 로드를 건너뛰고 Powershell 스크립트를 실행하기 전에 실행할 필요가 없는 경우 지정하는 것이 현명합니다.
숏컷이 작성되어 있습니다.Powershell 아이콘과 숏컷 글리프가 있는 (.lnk 파일):
이건 나한테 효과가 있었어.다음 세부 정보를 사용하여 스케줄링된 작업을 생성했습니다.트리거 : 기동 시
액션: 프로그램/스크립트: powershell.exe 인수: -file
시작 탭의 작업 관리자에서 스크립트 및 시작 예약 내용을 볼 수 있습니다.다음은 예약된 시작 항목에 새 항목을 추가하는 방법입니다.
먼저 탐색기를 열고 셸:시작 버튼 => 실행을 통해 위치를 표시합니다.
탐색기 셸: 개요
해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 새 바로 가기를 선택합니다.다음과 같이 입력합니다.
C:\Windows\시스템32\Windows PowerShell\v1.0\powershell.exe - NoProfile - 명령어 "C:\myfolder\somescript.ps1"
그러면 $profile 스크립트를 시작하지 않고 Powershell 스크립트가 부팅되므로 실행 속도가 빨라집니다.이렇게 하면 powershell 스크립트가 확실하게 시작됩니다.
shell:startup 폴더는 다음 위치에 있습니다.
$env: APPDATA\Microsoft\창문들
그런 다음 폴더에 넣습니다.
시작 메뉴\프로그램\시작
통상과 같이, Microsoft 에서는 패스에 공백이 포함되어 있는 경우는, 조금 번거롭기 때문에, 풀 패스에 따옴표를 붙이거나, Powershell내의 탭을 클릭하기만 하면 자동 완성됩니다.
실행 정책에 대해 걱정하지 않으려면 다음을 사용하여 배치 스크립트에 넣을 수 있습니다.스크립트가 작동하지 않는다고 하는 시간이 절반이나 되기 때문에 사이트의 기술자에게 스크립트를 실행시킬 때 자주 사용합니다만, 실제로는 실행 정책이 정의되어 있지 않습니다.이렇게 하면 실행 정책이 일반적으로 스크립트 실행을 차단하는 경우에도 스크립트가 실행됩니다.
기동시에 실행할 필요가 있는 경우.그런 다음 단일 사용자의 경우 shell:startup 또는 PC에 로그인하는 모든 사용자의 경우 shell:common startup 중 하나에 배치할 수 있습니다.
cmd.exe /c Powershell.exe -ExecutionPolicy ByPass -File "c:\path\to\script.ps1"
도메인이 있고 스크립트(스타트업/셧다운)에 배치되어 있는 경우(컴퓨터 구성 또는 사용자 구성)에 GPO를 작성하는 것이 가장 좋은 방법입니다.Windows Settings\Scripts(시작/셧다운).이 경우 ** 아래에 Startup 등의 디렉토리를 만듭니다.
\\yourdomain.com\netlogon\
GPO에서 참조할 수 있도록 배치했습니다.그래야 DC가 그걸 집행할 권리가 있다는 걸 알 수 있지DC에서 스크립트를 참조하면 아래에 표시됩니다.
C:\Windows\SYSVOL\domain\scripts\Startup\
이것은 netlogon의 로컬 패스이기 때문입니다.
다음 PowerShell 명령을 실행하여 사용자 로그인 시 작업 스케줄러를 통해 PowerShell 스크립트를 실행합니다.
Register-ScheduledTask -TaskName "SOME TASKNAME" -Trigger (New-ScheduledTaskTrigger -AtLogon) -Action (New-ScheduledTaskAction -Execute "${Env:WinDir}\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-WindowStyle Hidden -Command `"& 'C:\PATH\TO\FILE.ps1'`"") -RunLevel Highest -Force;
-AtLogOn
- 사용자가 로그온할 때 트리거가 작업을 시작함을 나타냅니다.
-AtStartup
- 시스템이 시작될 때 트리거가 작업을 시작함을 나타냅니다.
-WindowStyle Hidden
- 부팅 시 PowerShell 창을 표시하지 않습니다.필요하지 않은 경우 제거합니다.
-RunLevel Highest
- PowerShell을 관리자로 실행합니다.필요하지 않은 경우 제거합니다.
추신.
필요한 경우 아래의 PowerShell 명령을 실행하여 PowerShell 스크립트 실행을 활성화합니다.
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted -Force;
Bypass
- 아무것도 차단되지 않았으며 경고나 프롬프트가 표시되지 않습니다.
Unrestricted
- 모든 구성 파일을 로드하고 모든 스크립트를 실행합니다.인터넷에서 다운로드한 서명되지 않은 스크립트를 실행하면 실행 전에 사용 권한을 묻는 메시지가 표시됩니다.
여기 사람들은 이런 도구가 필요 없다는 걸 알고 있어요.하지만 초보자분들에게 특히 유용할 것 같아요.자동 시작 도구 Windows 로그인 시 앱 또는 스크립트를 자동으로 실행하는 프로세스를 단순화하는 휴대용 프리웨어입니다.자동 부팅을 위한 3가지 옵션을 제공합니다.
- 작업 스케줄러
- 스타트업 폴더
- 레지스트리 실행 키
이 툴의 가장 좋은 점은 Powershell 스크립트(.Ps1)를 지원하는 것입니다.즉, 3가지 방법 모두 시스템 부팅 시 Powershell 스크립트를 자동으로 실행할 수 있습니다.
https://disk.yandex.com.tr/d/dFzyB2Fu4lC-Ww 다운로드
출처 : https://www.portablefreeware.com/forums/viewtopic.php?f=4&t=25761
내가 찾은 게 하나 있어PowerShell 스크립트 내에서 Write-Host를 사용하고 있으며 작업 스케줄러(위의 게시물 참조)를 사용하는 경우 명령줄에서 모든 출력을 얻을 수 없습니다.
powershell.exe -command C:\scripts\script.ps1 >> "C:\scripts\logfile.log"
이 경우 PowerShell 스크립트에서 정상적으로 실행된 명령어 출력만 볼 수 있었습니다.
지금까지의 결론은 PowerShell이 Out-File을 사용하여 다른 명령 또는 이 경우 로그 파일로 출력한다는 것입니다.
따라서 >> 대신 *>를 사용하면 PowerShell 스크립트의 모든 출력을 CLI에서 얻을 수 있으며 스크립트 내에서 계속 쓰기 호스트를 사용할 수 있습니다.
powershell.exe -command C:\scripts\script.ps1 *> "C:\scripts\logfile.log"
https://lazyadmin.nl/powershell/output-to-file/
사용자 로그인에 관계없이 백그라운드에서 스크립트를 실행할 수도 있습니다.
태스크 스케줄러의 태스크 내에서 "Run when user is logon or not"을 설정하고 비밀번호 프롬프트에 호스트 이름\username을 입력한 다음 비밀번호를 입력합니다(이 경우 Admin 권한을 가진 계정).
하였습니다.Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
스크립트 실행 문제를 회피할 수 있습니다.그래도 프로세스별로 실행하는 것이 더 나았을 것입니다.음음음음
언급URL : https://stackoverflow.com/questions/20575257/how-do-i-run-a-powershell-script-when-the-computer-starts
'source' 카테고리의 다른 글
Swift: 스위치 문의 테스트 클래스 유형 (0) | 2023.04.19 |
---|---|
'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
글로벌 변수 작성 방법 (0) | 2023.04.19 |
WPF와 Silverlight의 비교 (0) | 2023.04.19 |
Objective-C에서 딜러를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.19 |