我有一个监控图像文件夹的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
7 回答
我终于让我的PowerShell脚本在每次启动时自动运行 . 您需要创建两个文件:第一个是Powershell脚本(例如
script.ps1
),第二个是.cmd文件,它将包含将在命令提示符下运行的命令(例如startup.cmd
) .第二个文件是计算机启动时需要执行的操作,只需将.ps1复制粘贴到启动文件夹就行不通,因为它实际上并不执行脚本 - 它只用记事本打开文件 . 您需要执行.cmd,它本身将使用PowerShell执行.ps1 . 好的,足够的bab呀学语和步骤:
执行此操作将在每次启动时执行cmd文件 . Here is a link of how to create a .cmd file如果您需要帮助 .
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell C:\Users\<user_name>\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
这将做两件事:
将PowerShell的执行策略设置为Unrestricted . 这是运行脚本所必需的,否则PowerShell将无法执行此操作 .
使用PowerShell执行在指定路径中找到的.ps1脚本 .
此代码专门用于PowerShell v1.0 . 如果你正在运行PowerShell v2.0,它可能会有所不同 . 在任何情况下,请检查this source以获取.cmd代码 .
现在您已经在各自的路径中使用了.ps1和.cmd文件,并且每个文件的脚本都已设置完毕 .
您可以将其设置为计划任务,并为“启动时”设置任务触发器
我所做的是创建一个我放在shell中的快捷方式:startup .
快捷方式如下:
目标:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"
(用你需要的东西替换scripts \ scripts.ps1)
开始于:
C:\scripts
(用包含脚本的文件夹替换脚本)
将ps1复制到此文件夹,并在必要时创建它 . 它将在每次启动时运行(在用户登录之前) .
如果你的操作系统版本可用,也可以通过GPEDIT.msc完成(较低级别的操作系统可能没有) .
我有一个启动文件系统观察程序的脚本,但是一旦脚本窗口关闭,观察者就会死掉 . 如果我从powershell窗口启动它并将其保持打开状态,它将全天运行,但是当我关闭它时,脚本会停止执行它应该执行的操作 .
您需要启动脚本并让它保持PowerShell打开 .
我尝试了很多方法来做到这一点,但实际工作的是http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed
将其粘贴到脚本的顶部是使它工作的原因 .
我从命令行启动脚本
powershell.exe -noexit -command "& \path\to\script.ps1"
指定在Windows启动时要执行的Powershell脚本的相对较短的路径可能是:
单击Windows按钮(Windows按钮r)
输入:
通过右键单击创建一个新的 shortcut 并在上下文菜单中选择菜单项:New => Shortcut
创建脚本的快捷方式,例如:
注意使用 -NoProfile 如果你放了一个在你的$ profile文件中大量初始化,加载它只是运行Powershell脚本是低效的 . -NoProfile将跳过加载您的配置文件,如果在执行Powershell脚本之前没有必要运行它,则可以指定 .
在这里,您可以看到创建了这样的快捷方式(.lnk文件带有带有快捷标志符号的Powershell图标):
这对我有用 . 使用以下详细信息创建计划任务:触发:启动时
操作:程序/脚本:powershell.exe参数:-file