batch file - हाइब्रिड बैच और वीबीएस प्रशासक के रूप में ऑटोरुन



batch-file vbscript (1)

मुझे एक हाइब्रिड बैच और वीबीएस में अजीब त्रुटि " निरस्त इकाई संदर्भ " मिल रही है, जो इस कोड के अनुकूलन का उपयोग करते हुए यूएसी "व्यवस्थापक के रूप में चलाएं" संवाद को पॉपअप करती है, और फिर सिस्टम ड्राइव पर किसी फ़ाइल को फ़ाइल को अनजिप करने के साथ आय करता है। हाइब्रिड संरचित है जैसा कि यहां सुझाया गया है , और इसे बदलना अवांछनीय है

सफलता के बिना सीडीएटीए वीबीएस ब्लॉक जोड़ने की कोशिश की बैच को प्रतिस्थापित करने के लिए पुन: बनाना: GetAdminRights इसके भीतर के एक ही अनुभाग के साथ कार्य करने में मदद नहीं करता है। कोई विचार, यहाँ क्या गलत है?

<!-- : Begin batch script
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set vbs="%temp%\_.vbs" & set "dir=C:\Unzip"
set "file=%USERPROFILE%\Downloads\archive.zip\"
call :GetAdminRights
cscript //nologo "%~f0?.wsf" //job:UNZ "%dir%" "%file%"
exit /b

:GetAdminRights
REM  --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system")
REM --> If error flag set, user don't have admin permissions
if '%errorlevel%' NEQ '0' (echo Requesting administrative privileges...
) else (set "adm=1")
if not defined adm (set params = %*:"=""
    cscript //nologo "%~f0?.wsf" //job:ADM %~s0 !params!
) else (pushd "%CD%" & CD /D "%~dp0")
exit /b

----- Begin wsf script --->
<package>
    <job id="ADM"><script language="VBScript">
        <![CDATA[
        Set UAC = CreateObject("Shell.Application")
        UAC.ShellExecute "cmd.exe", "/c ""wscript.Arguments(0)"" wscript.Arguments(1)", "", "runas", 1
        ]]>
    </script></job>
    <job id="UNZ"><script language="VBScript">
        <![CDATA[
        set fso = CreateObject("Scripting.FileSystemObject")
        If NOT fso.FolderExists(wscript.Arguments(0)) Then
        fso.CreateFolder(wscript.Arguments(0))
        End If
        set objShell = CreateObject("Shell.Application")
        set FilesInZip = objShell.NameSpace(wscript.Arguments(1)).items
        objShell.NameSpace(wscript.Arguments(0)).CopyHere(FilesInZip)
        set fso = Nothing
        set objShell = Nothing
        ]]>
    </script></job>
</package>  

::Error
\test.bat?.wsf(44, 12) Windows Script Host: Unterminated entity reference - matching ';' not found

यह निश्चित स्क्रिप्ट अच्छी तरह से काम करता है यह हाइब्रिड स्क्रिप्ट उदाहरण का प्रतिनिधित्व करता है, जो उपयोगकर्ता को सीएमडी सत्र की अवधि के लिए व्यवस्थापकीय अधिकारों को बढ़ा सकता है, और वीबीएस नौकरियों के रूप में जोड़े गए अन्य उपयोगकर्ता कार्य को चलाने की अनुमति देता है। वर्ण <> हाइब्रिड के बैच सेगमेंट में से बचा जाना चाहिए, क्योंकि वे डब्ल्यूएसएफ बैच अनुभागों द्वारा अनदेखी की पहचान करते हैं।

<!-- : Begin batch script
@echo off
setlocal EnableExtensions EnableDelayedExpansion
CD /D "%~dp0"
set "dir=%temp%\Unzip" & set "file=%USERPROFILE%\Downloads\archive.zip"
if not "%1"=="ADR" (call :GetAdminRights
    if defined adm cscript //nologo "%~f0?.wsf" //job:ADM "/c" "%~sf0" "ADR" )
echo/ & >nul 2>&1 net file && (echo "!errorlevel!" Got admin rights & echo/) ^
 || (echo "!errorlevel!" No admin rights & goto :end)

:: add your code here
echo Performing admin tasks & echo/
cscript //nologo "%~f0?.wsf" //job:UNZ "%dir%" "%file%"
if !errorlevel! equ 0 echo All tasks completed.

:end
timeout /t 5 >nul
exit /b

:GetAdminRights
REM Check for permissions
echo/ & >nul 2>&1 net session && (echo "!errorlevel!" Got admin rights) ^
 || (echo "!errorlevel!" No admin rights) & echo/
REM If error flag set, user don't have admin permissions
if '!errorlevel!' NEQ '0' (set "adm=0" & echo Requesting admin rights...)
exit /b

----- Begin wsf script --->
<package>
    <job id="ADM"><script language="VBScript">
        Set UAC = CreateObject("Shell.Application") 
        args = "" 
        For Each strArg in WScript.Arguments
        args = args & strArg & " "  
        Next
        UAC.ShellExecute "cmd.exe", args, "", "runas", 1 
    </script></job>
        <job id="UNZ"><script language="VBScript">
        set fso = CreateObject("Scripting.FileSystemObject")
        If NOT fso.FolderExists(wscript.Arguments(0)) Then
        fso.CreateFolder(wscript.Arguments(0))
        End If
        set objShell = CreateObject("Shell.Application")
        set FilesInZip = objShell.NameSpace(wscript.Arguments(1)).items
        objShell.NameSpace(wscript.Arguments(0)).CopyHere(FilesInZip)
        set fso = Nothing
        set objShell = Nothing
    </script></job>
</package>  




hybrid