Pregunta

Esto es lo que estoy tratando de hacer:

@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

Básicamente, quiero tener un archivo por lotes que hacer doble clic, que se desarrollará un script de PowerShell que llama a otro script de PowerShell, pero pide privilegios de administrador y se ejecuta ese comando como administrador.

Tengo problemas sin embargo, con las comillas dobles que pienso ... He intentado muchas cosas, pero parece que no puede solucionarlo, aquí está el mensaje de error 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>
¿Fue útil?

Solución

Yo usaría la puesta en Proceso comando integrado en lugar de crear un objeto de la cáscara por ejemplo:.

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

Para obtener algo de importancia la cita va a ser molesto. Se puede poner el guión final en un archivo y ejecutar el archivo de secuencia de comandos con el parámetro -File en PowerShell.exe?

Otros consejos

Lo resuelto, aquí está el largo proceso por lotes de una sola línea para mi problema real, por lo que la gente puede ver un ejemplo real:

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')"

P.S: En caso de que alguien se pregunta para qué sirve ... corro esto cada vez que instalo / actualización de VMware Workstation para ocultar los adaptadores de red virtuales que aparezcan en el Centro de redes y recursos compartidos en Windows Vista / 7

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top