2014-01-06 72 views
2

出於測試目的,我經常需要在當前日期和過去日期之間來回切換。我寫了一個快速的powershell腳本,以便我可以雙擊桌面快捷方式將系統時間更改爲所需的硬編碼日期。它工作得很好,但我必須點擊並以管理員身份運行。我想成功運行而不需要點擊鼠標。如何在不提示UAC的情況下設置系統日期/時間

我試過在本地安全策略中編輯服務的安全設置,但結果是我沒有看到UAC提示,但腳本也沒有成功。它還說,

設置-日期:需特權不是由客戶端

如何給這個特權給客戶的任何想法舉行?我希望腳本在不提示UAC的情況下運行。謝謝。

回答

3

真的沒有一個好的方法來實際改變時間沒有提示。更改系統時間是一項特權操作,如果沒有提示,這樣做會很棘手(如果可能的話)。

  1. 你可以在腳本中嵌入的管理員密碼,有它創建一個新的過程管理,並從那裏更改時間。在測試中嵌入錄取密碼雖然會是一個巨大的紅旗。
  2. 可能存在一個安全設置,您可以更改該設置以使非管理員帳戶可以更改系統時間。我其實不知道這是否可以完成。如果你這樣做了,那麼需要在運行測試的每臺計算機上進行更改。另一個紅旗。

我認爲一個更平滑的方法是簡單地在接口後面抽象出代碼中的時間觀念。比方說,你是用C#中,您可以定義以下

interface ITimeUtil { 
    DateTime SystemTime { get; } 
} 

在你通過查詢系統直接的時間爲今天你實現這個接口的實際運行中的程序。爲了測試的目的,你可以嘲笑這個接口在過去返回時間。

2

一種可能的選擇可能是使用從文件位置讀取日期時間的計劃任務(設置爲以最高權限運行),然後使用腳本寫入該文件,然後運行任務。

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" 
+0

正確,您需要授予用戶'SeSystemTimePrivilege'以避免UAC提示。最簡單的方法是從Windows Server 2003資源工具包中安裝'gpedit.msc'或'secpol.msc'(*安全設置>本地策略>用戶權限分配>更改系統時間*)或'ntrights'實用程序(請參閱[這裏](http://stackoverflow.com/a/15850831/1630171))。 –

相關問題