网络共享批处理文件不会更改注册表

时间:2019-12-16 12:30:47

标签: powershell batch-file registry jscript hta

我有以下批处理文件:

powershell -Command "& {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate -Name AutoDownload -Value 2 -Type DWord}"

如果我在本地运行它,确实会对注册表进行必要的更改,但是,如果将其上传到共享文件夹中并通过共享文件夹执行此批处理文件,则不会更改注册表。

我到底在这里想念什么?如果文件位于本地计算机上,则可以正常工作,但是如果我从共享文件夹中启动文件(而不在本地下载),则不会进行任何更改。

通过HTA文件使用以下代码调用批处理文件:

function Win10UninstallUnnecessaryApps(){
    var shell = new ActiveXObject("WScript.Shell");
    var path = '"file:\\\\fs\\FIle Share\\SA Support\\ZverTools\\Win10UninstallUnnecessaryApps.bat"'; 
    shell.run(path,1,false); 
}

2 个答案:

答案 0 :(得分:0)

当您从网络共享运行批处理文件时,这意味着您不在本地计算机中。您还需要管理员权限。所以你必须使用这个:

@echo off
NET SESSION >NUL 2>&1 
IF %ERRORLEVEL% NEQ 0 GOTO elevate
GOTO admintasks
:elevate
pushd %~dp0 
MSHTA.exe "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
:admintasks
powershell -command invoke-command -computername  TheLocalComputerName -scriptblock "& {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate -Name AutoDownload -Value 2 -Type DWord}"

用您要在其中执行此操作的计算机替换TheLocalComputerName

答案 1 :(得分:0)

我知道以下方法并不完美,但这是适用于我的情况的唯一解决方案。这是一种执行HTA应用程序执行的注册表更改的黑客方法。您应该创建一个批处理文件,该文件下载您的另一个批处理文件(内部具有更改注册表的代码),然后选择该特定文件并使用SendKeys方法模仿click事件。我使用以下技巧更新了HTA应用程序后,它运行良好,并且毕竟我的单击注册表更改了。

这里是启动批处理文件(从HTA应用程序按钮执行)的代码,该代码运行另一个批处理文件(应编辑注册表值的代码):

@if (@CodeSection == @Batch) @then

@echo off

set SendKeys=CScript //nologo //E:JScript "%~F0"

xcopy "\\fs\FIle Share\SA Support\ZverTools\Win10UninstallUnnecessaryApps.bat" "%USERPROFILE%" /y

TIMEOUT /T 2 /NOBREAK

set targetfilepath=%USERPROFILE%\Win10UninstallUnnecessaryApps.bat   
explorer.exe /select, "%TARGETFILEPATH%"

TIMEOUT /T 4 /NOBREAK

%SendKeys% "{ENTER}"

goto :EOF

@end

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

这是唯一允许我单击一次HTA应用程序按钮即可更改注册表值的解决方案。

我想通过批处理文件(从HTA应用执行)更改注册表值是:

powershell -Command "& {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate -Name AutoDownload -Value 2 -Type DWord}"