サービスとして実行されている VBScript 経由で zip ファイルを抽出する

サービスとして実行されている VBScript 経由で zip ファイルを抽出する

詳細

  • OS: Windows 7
  • UAC: 無効
  • 内容: zip ファイルを抽出する VBScript を実行していますが、VBScript は Jenkins サービスによって開始されます。VBScript を使用する必要があり、クリーンな Windows インストールに存在しない外部ツールは使用できません。
  • 問題: サービスが NT Authority\SYSTEM またはローカル管理者として実行されている場合、vbscript の解凍に関連するエラー メッセージが画面に表示されます。スクリプトを現在のユーザーとして実行すると、まったく問題は発生しません。エラー メッセージのタイトルは「対話型サービス検出」です。ダイアログ テキストには次のように表示されます。このコンピュータで実行されているプログラムがメッセージを表示しようとしています最初に表示されるダイアログ

「メッセージを表示」をクリックすると、次のようなタイトルの非常に古いダイアログが表示されます。フォルダへのアクセスが拒否されましたテキスト付きこのフォルダをコピーするには管理者権限が必要です2番目に表示されるダイアログ

UAC が無効になっていることを除けば、何らかの形で UAC に関連しているようです。

  • 脚本:


Const noProgressYesAll = &H14

Dim objFSO Set objFSO = CreateObject("scripting.filesystemobject") zipFile = "C:\test.zip" unzipPath = "C:\test\" WScript.Echo "ZIPEXTRACTDIR: " & unzipPath WScript.Echo "ZIPFILE: " & zipFile If objFSO.FileExists(zipFile) Then If objFSO.FolderExists(unzipPath) Then Set objShell = CreateObject( "Shell.Application" ) Set objSource = objShell.NameSpace(zipFile) If objSource is Nothing Then printMsg "Invalid Zip File " & zipFile Else unzipLog = zipFile&".log" printMsg "Logging to " & unzipLog Set objLog = objFSO.OpenTextFile(unzipLog,fsoForWriting,True) Set objTarget = objShell.NameSpace(unzipPath) objTarget.CopyHere objSource.Items, noProgressYesAll For Each item in objSource.Items printMsg "Extracted: " & unzipPath&item.Name objLog.Write unzipPath&item.Name & vbCrLf If objFSO.FileExists(unzipPath&item.Name) Then printMsg "Verified File: " & unzipPath&item.Name Else If objFSO.FolderExists(unzipPath&item.Name) Then printMsg "Verified Folder: " & unzipPath&item.Name End If End If Next objLog.Close End If Else printMsg "Directory does not exist: " & unzipPath End If Else printMsg "Zip file does not exist: " & zipFile End If Set objLog = Nothing Set objSource = Nothing set objShell = Nothing set objTarget = Nothing

関連情報