2014-02-16 79 views
1

所以我新到Windows部署,所以我在這裏可以做一些基本的錯誤。我試圖將腳本複製到Windows目錄中的文件夾使用MDT拒絕了對FileSystemObject.CopyFile即使管理員

基本上我想要的是試圖將腳本複製到%windir%\ temp \ deploymentscripts文件夾,但我甚至以管理員身份拒絕權限。我會通過我認爲我做的

First, elevate to admin 
Create %WinDir%\Temp\DeploymentScripts 
Copy DefaultShell.vbs to that directory (this is where I get permission denied 
Mount ntuser.dat to the registry 
Set DefaultShell.vbs to the Run Once for default users 
Unmount ntuser.dat 

運行下面是實際的代碼

Option Explicit 

If WScript.Arguments.length = 0 Then 
Dim wshShell : Set wshShell = CreateObject("Shell.Application") 
wshShell.ShellExecute "wscript.exe", """" & _ 
WScript.ScriptFullName & """" &_ 
" RunAsAdministrator", , "runas", 1 
Else 

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") 
Dim objShell : Set objShell = WScript.CreateObject("WScript.Shell") 
Dim TempDir 
Dim ParentDir 
Dim FullPath 
TempDir = objShell.ExpandEnvironmentStrings("%WinDir%\Temp\DeploymentScripts") 

If Not (objFSO.FolderExists(TempDir)) Then 
objFSO.CreateFolder (TempDir) 
End If 

ParentDir = objFSO.GetParentFolderName(Wscript.ScriptFullName) 
FullPath = ParentDir & "\DefaultShell.vbs" 

objFSO.CopyFile FullPath, TempDir, True 

objShell.run "reg load HKU\ZZZ C:\users\default\ntuser.dat" 
objShell.RegWrite "HKU\ZZZ\Software\Microsoft\Windows\RunOnce\DefaultShell", _ 
"WScript.exe" & " " & FullPath, "REG_SZ" 
objShell.run "reg unload HKU\ZZZ" 

End If 

回答

2

有幾件事情:

  1. tempDir變量未設置正確。添加一個尾部斜線,這應該工作。例如:

    TempDir = objShell.ExpandEnvironmentStrings("%WinDir%\Temp\DeploymentScripts\")

  2. 一個。您指向錯誤的註冊表位置 - 您錯過了CurrentVersion

    b。您參考的方式HKUregwrite指令中可能會導致錯誤。如果它確實會導致錯誤,則僅針對該行,將其更改爲HKEY_USERS insdead HKU

    如:

    objShell.RegWrite "HKEY_USERS\ZZZ\Software\Microsoft\Windows\Currentversion\RunOnce\defaultshell", _ "WScript.exe" & " " & FullPath, "REG_SZ"

  3. 爲了確保你的腳本序列運行,我已經添加了幾個StdOut.ReadAll()指令。如果沒有,那麼即使您尚未完成加載配置單元,腳本仍將繼續處理。我想這只是簡單地告訴腳本等到reg命令完成後再繼續下一條指令。

下面是您的腳本的修訂版本,並且包含這些建議。

Option Explicit 

If WScript.Arguments.length = 0 Then 
    Dim wshShell : Set wshShell = CreateObject("Shell.Application") 
    wshShell.ShellExecute "wscript.exe", """" & _ 
    WScript.ScriptFullName & """" &_ 
    " RunAsAdministrator", , "runas", 1 

Else 

    Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Dim objShell : Set objShell = WScript.CreateObject("WScript.Shell") 
    Dim TempDir, ParentDir, FullPath, Regload, Regresp 
    TempDir = objShell.ExpandEnvironmentStrings("%WinDir%\Temp\DeploymentScripts\") 

    If Not (objFSO.FolderExists(TempDir)) Then 
     objFSO.CreateFolder (TempDir) 
    End If 

    ParentDir = objFSO.GetParentFolderName(Wscript.ScriptFullName) 
    FullPath = ParentDir & "\DefaultShell.vbs" 
    objFSO.CopyFile FullPath, TempDir, True 

    Set regload = objShell.exec ("reg load HKU\ZZZ C:\users\default\ntuser.dat") 
    regresp = regload.StdOut.ReadAll() 

    objShell.RegWrite "HKEY_USERS\ZZZ\Software\Microsoft\Windows\Currentversion\RunOnce\DefaultShell", _ 
    "WScript.exe" & " " & FullPath, "REG_SZ" 

    Set regload = objShell.exec ("reg unload HKU\ZZZ") 
    regresp = regload.StdOut.ReadAll() 

End If 
+0

非常感謝您的幫助。你太棒了!我的東西不過,在測試我的部署後,注意到的是,該行 「objShell.RegWrite 「HKEY_USERS \ ZZZ \軟件\微軟\的Windows \ CurrentVersion \的RunOnce \ DefaultShell」,_ 「WScript.exe的」 & 「」 &FULLPATH,「REG_SZ 「」在FULLPATH應TEMPDIR中的RegWrite命令 - 否則它看起來在第一日誌中部署共享 現在腳本提供了一個錯誤。「Windows腳本宿主的執行失敗(沒有足夠的 的存儲可用於完成這個操作。) 「 –

+0

有趣的是,我跑的腳本沒有問題。你可以在你的問題中添加一個部分並重新發布修改後的腳本,並顯示哪一行產生了該錯誤? – Damien

+0

讓我試着澄清一下。你最初的幫助代碼完美無缺。設置爲在新用戶登錄後運行的defaultshell.vbs腳本就是引發該錯誤的腳本。這個腳本是 Dim objShell:Set objSell = CreateObject(「Wscript.Shell」) objShell.RegWrite「HKEY_CURRENT_USER \ ControlPanel \ Desktop \ Wallpaper」,「」,「REG_SZ」 –

相關問題