Escapaing doppelte Anführungszeichen Problem in gemischter Charge / Powershell-Skript läuft
-
27-09-2019 - |
Frage
Hier ist, was ich versuche zu tun:
@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
Grundsätzlich mag ich eine Batch-Datei haben, dass ich doppelt klicken kann, das einen Powershell-Skript ausgeführt wird, das einen anderen Powershell-Skript ruft aber fragt nach Admin-Rechten und läuft diesen Befehl als Administrator.
Ich habe Probleme aber mit den doppelten Anführungszeichen Ich denke ... ich viele Dinge ausprobiert habe, aber kann nicht scheinen, um es zu beheben, ist hier die Powerfehlermeldung:
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>
Lösung
würde ich den integrierten Befehl verwenden Startprozess, anstatt die Schaffung eines Shell-Objekt z.
CALL powershell -ExecutionPolicy RemoteSigned -NoProfile -Command "& {Start-Process PowerShell -Verb runas -Arg '-NoExit -Command & {$path=''foo'';$path}'}"
Für alles, was von Bedeutung der Angabe wird als störend. Können Sie das endgültige Skript in einer Datei speichern, und führen Sie die Skriptdatei mit dem Parameter -FILE auf PowerShell.exe?
Andere Tipps
ich es gelöst, hier ist die lange Partie Einzeiler für mein eigentliches Problem, so dass die Leute ein echtes Beispiel sehen können:
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:. Falls sich jemand fragt sich, was es für ... Ich laufe dies jedes Mal, wenn ich installieren / update VMware Workstation die virtuelle Netzwerkadapter aus, die auf dem Netzwerk- und Freigabecenter in Windows Vista / 7
verstecken