1

これが私がやろうとしていることです:

@ECHO OFF

CALL powershell -ExecutionPolicy RemoteSigned -Command "$sh = new-object -com 'Shell.Application'; $sh.ShellExecute('powershell', '-NoExit -Command "$path = """HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}""";echo $path"', '', 'runas')"

PAUSE

基本的に、ダブルクリックできるバッチ ファイルが必要です。このバッチ ファイルは、別の PowerShell スクリプトを呼び出す PowerShell スクリプトを実行しますが、管理者権限を要求し、そのコマンドを管理者として実行します。

ただし、二重引用符で問題が発生していると思います...多くのことを試しましたが、修正できないようです。powershellエラーメッセージは次のとおりです。

Bad numeric constant: 4D.
At line:1 char:57
+ $path = HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D <<<< 36E972-E325-11C
E-BFC1-08002BE10318};echo $path
    + CategoryInfo          : ParserError: (4D:String) [], ParentContainsError
   RecordException
    + FullyQualifiedErrorId : BadNumericConstant

PS C:\Windows\system32>
4

2 に答える 2

2

シェルオブジェクトを作成するのではなく、組み込みコマンドのStart-Processを使用します。例:

CALL powershell -ExecutionPolicy RemoteSigned -NoProfile -Command "& {Start-Process PowerShell -Verb runas -Arg '-NoExit -Command & {$path=''foo'';$path}'}"

重要なことは何でも、引用は煩わしいものになるでしょう。最終的なスクリプトをファイルに入れ、PowerShell.exeの-Fileパラメーターを使用してスクリプトファイルを実行できますか?

于 2010-11-22T06:05:51.790 に答える
0

私はそれを解決しました、これが私の本当の問題のための長いバッチのワンライナーです、それで人々は本当の例を見ることができます:

CALL powershell -ExecutionPolicy RemoteSigned -Command "$sh = new-object -com 'Shell.Application'; $sh.ShellExecute('powershell', '-NoExit -Command ""$path = ''HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}''; Get-Childitem $path -ErrorAction SilentlyContinue | Where { (Get-ItemProperty $_.PSPath DriverDesc) -Match ''VMnet'' } | Foreach { New-ItemProperty -ErrorAction SilentlyContinue $_.PSPath -Name ''*NdisDeviceType'' -Value ''1'' -PropertyType DWord }; netsh interface set interface name=''VMware Network Adapter VMnet1'' admin=DISABLED; netsh interface set interface name=''VMware Network Adapter VMnet1'' admin=ENABLED; netsh interface set interface name=''VMware Network Adapter VMnet8'' admin=DISABLED; netsh interface set interface name=''VMware Network Adapter VMnet8'' admin=ENABLED""', '', 'runas')"

PS:誰かがそれが何のためにあるのか疑問に思っている場合に備えて、私はVMware Workstationをインストール/更新するたびにこれを実行して、仮想ネットワークアダプターがWindows Vista/7のネットワークおよび共有センターに表示されないようにします。

于 2010-11-21T22:36:04.947 に答える