我有一个监控图像文件夹的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窗口并在那里运行脚本,它就可以了。但是如果我在CMD提示符下运行它,
powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
它无效。我不确定这是一个许可问题还是别的什么。
顺便说一下,我安装了PowerShell 3.0,如果输入$ host.version,它会在那里显示3。但我的powershell.exe似乎仍然是v1.0。%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
答案 0 :(得分:35)
我终于让我的PowerShell脚本在每次启动时自动运行。您需要创建两个文件:第一个是Powershell脚本(例如script.ps1
),第二个是.cmd文件,它将包含将在命令提示符下运行的命令(例如startup.cmd
)。
第二个文件是计算机启动时需要执行的操作,只是将.ps1复制粘贴到启动文件夹将无法正常工作,因为它实际上并不执行脚本 - 它只打开文件用记事本。您需要执行.cmd,它本身将使用PowerShell执行.ps1。好吧,有足够的唠叨和步骤:
C:\用户\< USER_NAME > \桌面\的 script.ps1 强>
C:\ Users \< user_name > \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup \ startup.cmd
执行此操作将在每次启动时执行cmd文件。 Here is a link of how to create a .cmd file如果您需要帮助。
使用文本编辑器打开.cmd文件,然后输入以下行:
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell C:\Users\<user_name>\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
这将做两件事:
此代码专门针对PowerShell v1.0。如果你正在运行PowerShell v2.0,它可能会有所不同。在任何情况下,请检查this source以获取.cmd代码。
既然您已经在各自的路径中使用了.ps1和.cmd文件,并且每个文件都有脚本,那么您已经完成了设置。
答案 1 :(得分:9)
您可以将其设置为预定任务,并为&#34;启动时设置任务触发&#34;
答案 2 :(得分:6)
我所做的是创建一个我放在shell中的快捷方式:startup。
快捷方式包含以下内容:
目标:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"
(将script \ scripts.ps1替换为您需要的内容)
开始于:C:\scripts
(用包含脚本的文件夹替换脚本)
答案 3 :(得分:3)
将ps1复制到此文件夹中,并在必要时创建它。它将在每次启动时运行(在用户登录之前)。
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
如果您的操作系统版本可用,也可以通过GPEDIT.msc完成(较低级别的操作系统可能没有)。
答案 4 :(得分:1)
我有一个启动文件系统观察程序的脚本,但是一旦脚本窗口关闭,观察者就会死掉。如果我从powershell窗口启动它并将其保持打开状态,它将全天运行,但是当我关闭它时,脚本会停止执行它应该执行的操作。
您需要启动脚本并让它保持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"
答案 5 :(得分:1)
您可以创建一个计划程序任务,即使用户未登录,该计划程序也会在开始时自动运行:
schtasks /create /tn "FileMonitor" /sc onstart /delay 0000:30 /rl highest /ru system /tr "powershell.exe -file C:\Doc\Files\FileMonitor.ps1"
以管理员身份从PowerShell运行一次此命令,它将为您创建计划任务。您可以像这样列出任务:
schtasks /Query /TN "FileMonitor" /V /FO List
或删除
schtasks /Delete /TN "FileMonitor"
答案 6 :(得分:1)
先决条件:
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-ScheduledJob (PSScheduledJob) - PowerShell | Microsoft Docs
Register-ScheduledJob -Trigger $trigger -FilePath $path -Name MyScheduledJob
您可以使用Get-ScheduledJob -Name MyScheduledJob
3。重新启动Windows(restart /r
),并使用以下命令检查结果:
Get-Job -name MyScheduledJob
另请参阅Get-Job (Microsoft.PowerShell.Core) - PowerShell | Microsoft Docs
参考:
答案 7 :(得分:1)
这实际上只是对@mjolinor simple answer [使用任务计划程序]的扩展。
我知道“任务计划程序”是正确的方法,但是花了一些精力才能使其按我想要的方式运行,并认为我会将自己的发现发布给其他人。
问题包括:
注意:您必须具有运行脚本的权限,请参见ExecutionPolicy
然后在Task Scheduler中,最重要/最棘手的部分是Action
应为Start a Program
程序/脚本:
powershell
添加参数(可选):
-windowstyle hidden -command full\path\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
注意:
如果您在互联网上看到-File
,它将起作用,但是除了文件路径IE,-File
之后的所有内容都无法理解,即IE:重定向被视为文件路径的一部分,它失败,则必须将-command
与重定向一起使用,但是可以在-windowstyle hidden
之类的其他命令/参数之前添加前缀,以不显示PowerShell窗口。
我还必须在脚本中将所有Write-Host
调整为Write-Output
。
答案 8 :(得分:0)
,用于指定要在Windows启动时执行的Powershell脚本的相对较短的路径可能是:
shell:启动
通过右键单击创建新的快捷方式,然后在上下文菜单中选择菜单项:New => Shortcut
为脚本创建快捷方式,例如:
C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoProfile-命令“ C:\ Users \ someuser \ Documents \ WindowsPowerShell \ Scripts \ somesscript.ps1”
请注意 -NoProfile 的使用 如果您在$ profile文件中进行了大量初始化,则将其加载到仅运行Powershell脚本的效率很低。 -NoProfile将跳过加载您的配置文件,并且如果不需要在执行Powershell脚本之前运行它,则可以很方便地指定它。
在这里您看到创建了这样的快捷方式(带有带快捷方式字形的Powershell图标的.lnk文件):
答案 9 :(得分:0)
这对我有用。使用以下详细信息创建了计划任务: 触发条件:启动时
动作: 程序/脚本:powershell.exe 参数:-file
答案 10 :(得分:0)
您可以在“启动”选项卡中的“任务管理器”中看到计划启动的脚本和更多内容。这是向计划的启动项目添加新项目的方法。
首先,通过开始按钮=>运行,将资源管理器打开到shell:启动位置。
explorer shell:启动
右键单击该文件夹,然后在上下文菜单中选择一个新的快捷方式。输入以下内容:
C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoProfile -命令“ C:\ myfolder \ somescript.ps1”
这将启动Powershell脚本,而无需启动$ profile脚本以加快执行速度。这将确保启动Powershell脚本。
shell:startup文件夹位于:
$ env:APPDATA \ Microsoft \ Windows
然后进入文件夹:
开始菜单\程序\启动
与往常一样,当路径包含空格时,Microsoft使我们感到有些麻烦,因此在这种情况下,您必须在完整路径周围加上引号,或者只需单击Powershell中的选项卡即可自动完成。
答案 11 :(得分:0)
请确保,只要希望PowerShell在后台自动运行/在后台运行/非交互运行,最好指定参数
-ExecutionPolicy Bypass
到PowerShell.exe
PowerShell.exe -ExecutionPolicy Bypass
答案 12 :(得分:0)
如果不想担心执行策略,可以使用以下内容并将其放入批处理脚本中。在让技术人员在站点上运行脚本时,我经常使用它,因为有一半的时间他们说脚本不起作用,但实际上这是因为执行策略未定义我们的限制。即使执行策略通常会阻止脚本运行,它也会运行脚本。
如果您希望它在启动时运行。然后,您可以将 shell:startup 用于单个用户,或者将 shell:common startup 用于所有用户登录PC。
cmd.exe /c Powershell.exe -ExecutionPolicy ByPass -File "c:\path\to\script.ps1"
很明显,如果您在 脚本(启动/关闭) 中拥有域名并放置了一个域,则制作GPO是最好的方法;在 计算机或用户配置\ Windows设置\脚本(启动/关闭) 下。 如果这样,请建立一个名为 Startup 或**
下的目录。\\ yourdomain.com \ netlogon \
并将其放在GPO中以供参考。这样,您知道DC有权执行它。在DC上浏览脚本时,您会在
下找到它C:\ Windows \ SYSVOL \ domain \ scripts \ Startup \
因为这是 netlogon 的本地路径。
答案 13 :(得分:0)
执行下面的PowerShell命令,以在用户登录时通过任务计划程序运行PowerShell脚本
.ps1
。
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。 如果不需要,请删除。
PS
如有必要,请执行以下PowerShell命令以启用PowerShell脚本执行。
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted -Force;
Bypass
-没有阻止,也没有警告或提示。
Unrestricted
-加载所有配置文件并运行所有脚本。如果您运行从互联网下载的未签名脚本,则会在运行之前提示您获得许可。
答案 14 :(得分:0)
尝试一下。在启动文件夹和iuput中创建快捷方式
PowerShell "&.'PathToFile\script.ps1'"
这是最简单的方法。