昇格モードで vbscript を実行する方法を学習しようとしています。昇格して実行しようとしているvbscriptに引数がある場合、これをうまく機能させることができません。
以下に簡単な例を示します。
OSVersion.vbs
' Return a string indicating the operating system
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
'Wscript.echo Wscript.Arguments(0)
For Each objOperatingSystem in colOperatingSystems
Wscript.StdOut.Write objOperatingSystem.Caption
Wscript.StdOut.WriteBlankLines(1)
Wscript.StdOut.Write "Version " & objOperatingSystem.Version
Next
RunElevated.vbs
' Run the script in elevated mode
'
' This will be needed to install programs into Program Files
prgName = Wscript.Arguments.Item(0)
prgArgs = ""
If Wscript.Arguments.Count > 1 Then
For i = 1 To Wscript.Arguments.Count - 1
prgArgs = prgArgs & " " & Wscript.Arguments.Item(i)
Next
End If
Wscript.echo "Running: " & prgName & prgArgs
Set objShell = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = fso.GetParentFolderName (WScript.ScriptFullName)
If fso.FileExists(strPath & "\" & prgName) Then
objShell.ShellExecute "wscript.exe", _
Chr(34) & strPath & "\" & prgName & Chr(34), _
"", "runas", 1
Else
Wscript.echo "Script file not found"
End If
OSVersion.vbs スクリプトは正常に実行されます。
cscript OSVersion.vbs Microsoft (R) Windows Script Host バージョン 5.8 Copyright (C) Microsoft Corporation. 全著作権所有。
Microsoft Windows 7 ホーム プレミアム
バージョン 6.1.7601
問題 #1 この管理者特権で実行しようとすると、stdout に何も表示されない
C:\Users\ChemModeling\Documents\FreeThink\Java\install>cscript RunElevated.vbs OSVersion.vbs Microsoft (R) Windows Script Host バージョン 5.8 Copyright (C) Microsoft Corporation. 全著作権所有。
実行中: OSVersion.vbs
問題 2 RunElevated に渡すスクリプトに引数を含める方法がわかりません。「ここに私のパラメーター」のような構文を使用する必要があると読んだので、これを試しました:
' Run the script in elevated mode
'
' This will be needed to install programs into Program Files
prgName = Wscript.Arguments.Item(0)
prgArgs = ""
If Wscript.Arguments.Count > 1 Then
For i = 1 To Wscript.Arguments.Count - 1
prgArgs = prgArgs & " " & Wscript.Arguments.Item(i)
Next
End If
Wscript.echo "Running: " & prgName & prgArgs
Set objShell = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = fso.GetParentFolderName (WScript.ScriptFullName)
If fso.FileExists(strPath & "\" & prgName) Then
objShell.ShellExecute "wscript.exe", _
Chr(39) & Chr(34) & strPath & "\" & prgName & prgArgs & Chr(34) & Chr(39), _
"", "runas", 1
Else
Wscript.echo "Script file not found"
End If
私が実行した場合:
cscript RunElevated.vbs OSVersion.vbs Test Microsoft (R) Windows Script Host バージョン 5.8 Copyright (C) Microsoft Corporation. 全著作権所有。
実行中: OSVersion.vbs テスト
次に、「ファイル拡張子 ".vbs Test" のエンジンがありません」というエラーが表示されます。
誰が私が変更する必要があるかを提案できますか?
私はこの問題を解決するためにいくらか前進しました-
最初のスクリプトを次のように変更しました。
OSVersion.vbs
' Return a string indicating the operating system
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
'Wscript.echo Wscript.Arguments(0)
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo objOperatingSystem.Caption
Wscript.Echo "Version " & objOperatingSystem.Version
Next
だから私は実際に何かが起こったかどうかを見ることができました.
2 番目のスクリプトを次のように変更しました。
' Run the script in elevated mode
'
' This will be needed to install programs into Program Files
prgName = Wscript.Arguments.Item(0)
prgArgs = ""
If Wscript.Arguments.Count > 1 Then
For i = 1 To Wscript.Arguments.Count - 1
prgArgs = prgArgs & " " & Wscript.Arguments.Item(i)
Next
End If
Wscript.echo "Running: " & prgName & prgArgs
Set objShell = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = fso.GetParentFolderName (WScript.ScriptFullName)
If fso.FileExists(strPath & "\" & prgName) Then
objShell.ShellExecute "wscript.exe", _
Chr(34) & strPath & "\" & prgName & Chr(34) & prgArgs, _
"", "runas", 1
Else
Wscript.echo "Script file not found"
End If
および使用: wscript RunElevated.vbs OSVersion.vbs Test
そして今、スクリプトの実行時にポップアップにエコーしている情報が表示されます。
問題 1 に戻ります。管理者モードで実行する新しいシェルを開始しているので、cscript に切り替えて情報を stdout に書き込もうとしたり、Wscript.StdOut.Write を使用したりすると、新しいシェルに表示されます。そして、私はそれを見ることはありません、または少なくともそれが問題だと私が信じていることです.
この問題に対処する標準的な方法はありますか?