Powershell 网络共享批处理文件不会更改注册表
我有以下批处理文件:Powershell 网络共享批处理文件不会更改注册表,powershell,batch-file,registry,jscript,hta,Powershell,Batch File,Registry,Jscript,Hta,我有以下批处理文件: powershell -Command "& {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate -Name AutoDownload -Value 2 -Type DWord}" 如果我在本地运行它,它会对注册表进行必要的更改,但是如果我将其上载到共享文件夹并通过共享文件夹执行此批处理文件,它不会更改注册表 我到底错过
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);
}
由于您是从网络共享运行批处理文件,因此这意味着您不在本地计算机中。您还需要管理员权限。所以你必须使用这个:
@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}"
用您要在其中执行此操作的计算机替换本地计算机名。我知道以下方法并不完美,但它是唯一适用于我的案例的解决方案。这是一种黑客方法,用于执行HTA应用程序执行的注册表更改。您应该创建一个批处理文件来下载另一个批处理文件(其中包含注册表更改代码),然后选择该特定文件并使用SendKeys方法模拟单击事件。当我用下面的hack更新我的HTA应用程序时,它工作得很好,毕竟我得到了我的单点注册表更改 以下是启动批处理文件(从HTA应用程序按钮执行)代码,该代码运行另一个批处理文件(应编辑注册表值的批处理文件): 这是唯一允许我通过单击一个HTA应用程序按钮来更改注册表值的解决方案 我希望通过批处理文件(从HTA应用程序执行)更改的注册表值为:
请删除上面的评论,我已经修改了你的问题,以包括该信息,并修复了你的标签,使其更具体到你的任务。另外,您应该知道,通常
HKLM
条目需要提升,因此我希望代码应该作为管理员运行。我也不明白为什么要运行一个HTML应用程序,它使用JScript来运行一个调用Powershell.P.S的批处理文件。我认为文件
协议需要三个反斜杠。转义,这将是'file:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,它调用一个函数,该函数触发批处理文件和其中列出的代码上面的批处理文件。在这种情况下,权限不是问题,问题是如果您用鼠标单击批处理文件(即使它位于网络文件夹上),它将更改注册表项,但是,如果您从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));
powershell -Command "& {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate -Name AutoDownload -Value 2 -Type DWord}"