登录Windows时自动运行脚本


27

登录Windows时如何自动运行脚本?

每当我登录计算机时,都希望运行以下命令:

echo %USERNAME% logged on at %DATE% %TIME% >> log.txt

额外的好处是,每当我解锁屏幕保护程序时,也能够运行相同的脚本。


正确的答案是非常高的辛烷值-使用您的单衬管,我在下面提供了一些更谦虚(但有效)的方法; ...-)
Jeff

Answers:


19

您可以创建计划任务,该任务将在计算机解锁后运行:

  1. 开始>管理工具>任务计划程序
  2. 左窗格:选择任务计划程序库
  3. 右窗格:单击“创建任务...”(注意:这是获取正确触发器的唯一方法)
  4. 在“创建任务”对话框中:
    • 常规选项卡-为您的任务提供名称
    • 触发器选项卡-单击新建...,然后选择在工作站上解锁
    • 操作选项卡-单击新建...,然后单击浏览...以找到您的脚本
    • 条件选项卡-取消选中仅在计算机使用交流电源时才启动任务

另外,我调整了脚本中的路径以读取

echo %USERNAME% logged on at %DATE% %TIME% >> %USERPROFILE%\log.txt

22

如果您已有脚本:

将登录脚本分配给用户或组

  • 打开计算机管理。
  • 在控制台树中,单击“用户”。

哪里?系统工具/本地用户和组/用户

  • 双击要为其分配登录脚本的用户。
  • 单击配置文件选项卡。
  • 在“登录脚本”字段中,输入要分配给该用户的登录脚本的路径和名称,然后单击“确定”。

否则,这是Microsoft提供的方便的“ HowTo”

创建登录脚本

您可以使用登录脚本来分配将在用户登录到特定计算机时执行的任务。这些脚本可以执行操作系统命令,设置系统环境变量,以及调用其他脚本或可执行程序。Windows Server 2003家族支持两种脚本环境:命令处理器运行包含批处理语言命令的文件,而Windows脚本宿主(WSH)运行包含Microsoft Visual Basic脚本版本(VBScript)或Jscript命令的文件。您可以使用文本编辑器创建登录脚本。登录脚本通常执行的一些任务包括:

  • 映射网络驱动器。
  • 安装和设置用户的默认打印机。
  • 收集计算机系统信息。
  • 更新病毒签名。
  • 更新软件。
  • 下面的示例登录脚本包含使用Active Directory的VBScript命令
  • 服务接口(ADSI)根据用户的组成员身份执行三个常见任务:

通过调用WSH Network对象的MapNetworkDrive方法和WSH Network对象的UserName属性,它将H:驱动器映射到用户的主目录。它使用ADSI IADsADSystemInfo对象获得当前用户的专有名称,该名称又用于连接到Active Directory中的相应用户对象。建立连接后,将使用用户的memberOf属性来检索用户所属的组的列表。组名称的多值列表通过使用VBScript的Join函数连接到单个字符串中,从而使搜索目标组名称更加容易。

如果当前用户是脚本顶部定义的三个组之一的成员,则该脚本会将用户的G:驱动器映射到组共享驱动器,并将用户的默认打印机设置为组打印机。创建示例登录脚本

  • 打开记事本。
  • 复制并粘贴或键入以下内容:

    Const ENGINEERING_GROUP     = "cn=engineering"
    Const FINANCE_GROUP         = "cn=finance"
    Const HUMAN_RESOURCES_GROUP = "cn=human resources"
    
    Set wshNetwork = CreateObject("WScript.Network")
    wshNetwork.MapNetworkDrive "h:",
    "\\FileServer\Users\" & wshNetwork.UserName
    
    Set ADSysInfo = CreateObject("ADSystemInfo")
    Set CurrentUser = GetObject("LDAP://" &
    ADSysInfo.UserName)
    strGroups = LCase(Join(CurrentUser.MemberOf))
    
    If InStr(strGroups, ENGINEERING_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Engineering\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\EngLaser"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\Plotter"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\EngLaser"
    
    ElseIf InStr(strGroups, FINANCE_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Finance\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\FinLaser"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\FinLaser"
    
    ElseIf InStr(strGroups, HUMAN_RESOURCES_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Human Resources\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\HrLaser"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\HrLaser"
    
    End If
    
  • 在文件菜单上,单击另存为。

  • 在“保存位置”中,单击与域控制器的Netlogon共享文件夹对应的目录(通常是SystemRoot \ SYSVOL \ Sysvol \ DomainName \ Scripts,其中DomainName是域的标准域名)。
  • 在“保存类型”中,单击“所有文件”。
  • 在“文件名”中,键入文件名,后跟.vbs,然后单击“保存”。WSH使用.vbs扩展名来识别包含VBScript命令的文件。

总是很高兴看到有人喜欢这个答案:-D
Ivo Flipse,2009年

我几乎想
翻阅

成为我的来宾@quack ;-)常见问题解答?
Ivo Flipse

14

我能想到的最简单的方法是将其放在启动文件夹中的.bat文件中。

一种更复杂的方法是将批处理文件添加到注册表中的

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

注册表项。


8
如果要在任何用户登录时运行此程序,则需要将其放在“所有用户”启动文件夹中(%allusersprofile%/ Start Menu \ Programs \ Startup),或在LocalMachine注册表的“运行”部分中进行输入:HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run
Treb

我通过这种方式运行.exe,但是有没有办法让它安静地运行?没有打开并保持cmd打开?
bzupnick

2

一个很好的替代方法是使用要在其中运行的命令来创建批处理文件。接下来,您将在计算机上的策略编辑器中指定它在登录过程中运行登录脚本。快速说明:此选项仅在XP Pro上可用,而在家用版本上不可用。

组策略编辑器教程在这里


2

有人知道在屏幕锁定/解锁时是否也可以运行它?

Windows 7和/或Windows Server 2008有一种方法。

使用任务计划程序,创建新的基本任务,作为触发器使用“登录时”。


如果希望触发器为“在工作站上解锁”,则不能使用基本任务
Jeff

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.