如何在不通过UAC提示的情况下设置系统日期/时间

时间:2014-01-06 14:03:03

标签: security powershell uac

出于测试目的,我经常需要在当前日期和过去日期之间来回切换。我写了一个快速的PowerShell脚本,这样我就可以双击桌面快捷方式将系统时间更改为所需的硬编码日期。它工作得很好,但我必须r-click并以管理员身份运行。我想在没有点击的情况下成功运行。

我已尝试在本地安全策略中编辑服务的安全设置,但结果是我没有看到UAC提示,但脚本也没有成功。它仍然说

  

设置日期:客户端不持有所需的权限

有关如何向客户提供此权限的任何想法?我希望脚本在没有提示输入UAC的情况下运行。感谢。

3 个答案:

答案 0 :(得分:3)

如果没有提示,实际上没有一个好方法来改变时间。更改系统时间是一项特权操作,在没有提示的情况下执行此操作非常棘手(如果可能的话)。

  1. 您可以在脚本中嵌入管理员密码,让它以管理员身份创建新流程并从那里更改时间。在测试中嵌入一个允许密码虽然会是一个巨大的红旗。
  2. 可能存在某个安全设置,您可以更改该设置以使非管理员帐户可以更改系统时间。我实际上不知道是否可以这样做。如果您这样做,则需要在运行测试的每台计算机上进行更改。另一个红旗。
  3. 我认为更简单的方法是简单地抽象出代码背后的代码时间。假设您使用的是C#,您可以定义以下内容

    interface ITimeUtil { 
      DateTime SystemTime { get; } 
    }
    

    在实际运行的程序中,您可以通过直接查询系统时间来实现此界面。出于测试目的,您将模拟此接口以返回过去的时间。

答案 1 :(得分:3)

也许您可以操纵令牌并授予自己SeSystemtimePrivilege

http://technet.microsoft.com/en-us/library/cc976700.aspx

网上有一个浮动的脚本,这样做。

https://superuser.com/questions/693620/how-to-restore-the-ownership-of-a-folder-to-trusted-installer-using-silent-com/693627#693627

使用该脚本,您可以运行此命令以启用权限(暂时),然后发出设置日期以便及时向后移动。

Enable-Privilege SeSystemtimePrivilege
Set-Date "November 5, 1955" 
Write-Host "Are You Telling Me You Built A Time Machine Out Of A Delorean"

答案 2 :(得分:2)

一种可能的选择可能是使用从文件位置读取日期时间的计划任务(设置为以最高权限运行),并使用您的脚本写入该文件然后运行该任务。