首页 文章

如何在计算机启动时运行PowerShell脚本?

提问于
浏览
32

我有一个监控图像文件夹的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 回答

  • 29

    我终于让我的PowerShell脚本在每次启动时自动运行 . 您需要创建两个文件:第一个是Powershell脚本(例如 script.ps1 ),第二个是.cmd文件,它将包含将在命令提示符下运行的命令(例如 startup.cmd ) .

    第二个文件是计算机启动时需要执行的操作,只需将.ps1复制粘贴到启动文件夹就行不通,因为它实际上并不执行脚本 - 它只用记事本打开文件 . 您需要执行.cmd,它本身将使用PowerShell执行.ps1 . 好的,足够的bab呀学语和步骤:

    • 创建.ps1脚本并将其放在文件夹中 . 为简单起见,我把它放在桌面上 . 路径看起来像这样:

    C:\ Users \ <user_name> \ Desktop \ script.ps1

    • 创建一个.cmd文件并将其放入

    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的执行策略设置为Unrestricted . 这是运行脚本所必需的,否则PowerShell将无法执行此操作 .

    • 使用PowerShell执行在指定路径中找到的.ps1脚本 .

    此代码专门用于PowerShell v1.0 . 如果你正在运行PowerShell v2.0,它可能会有所不同 . 在任何情况下,请检查this source以获取.cmd代码 .

    • 保存.cmd文件

    现在您已经在各自的路径中使用了.ps1和.cmd文件,并且每个文件的脚本都已设置完毕 .

  • 1

    您可以将其设置为计划任务,并为“启动时”设置任务触发器

  • 4

    我所做的是创建一个我放在shell中的快捷方式:startup .

    快捷方式如下:

    目标: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"

    (用你需要的东西替换scripts \ scripts.ps1)

    开始于: C:\scripts

    (用包含脚本的文件夹替换脚本)

  • 9

    将ps1复制到此文件夹,并在必要时创建它 . 它将在每次启动时运行(在用户登录之前) .

    C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
    

    如果你的操作系统版本可用,也可以通过GPEDIT.msc完成(较低级别的操作系统可能没有) .

  • 3

    我有一个启动文件系统观察程序的脚本,但是一旦脚本窗口关闭,观察者就会死掉 . 如果我从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"

  • 0

    enter image description here
    指定在Windows启动时要执行的Powershell脚本的相对较短的路径可能是:

    • 单击Windows按钮(Windows按钮r)

    • 输入:

    shell:启动

    • 通过右键单击创建一个新的 shortcut 并在上下文菜单中选择菜单项:New => Shortcut

    • 创建脚本的快捷方式,例如:

    C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoProfile -Command“C:\ Users \ someuser \ Documents \ WindowsPowerShell \ Scripts \ somesscript.ps1”

    注意使用 -NoProfile 如果你放了一个在你的$ profile文件中大量初始化,加载它只是运行Powershell脚本是低效的 . -NoProfile将跳过加载您的配置文件,如果在执行Powershell脚本之前没有必要运行它,则可以指定 .

    在这里,您可以看到创建了这样的快捷方式(.lnk文件带有带有快捷标志符号的Powershell图标):

  • 0

    这对我有用 . 使用以下详细信息创建计划任务:触发:启动时

    操作:程序/脚本:powershell.exe参数:-file

相关问题