在批处理文件中运行 Powershell 代码时出现问题

问题描述 投票:0回答:1

在这个问题中据说使用以下代码应该创建powershell代码的干净执行:

PowerShell ^
   $BIOS= Get-WmiObject -computername \"BAHRIATSG2-PC\" -Namespace;  ^
   root/hp/instrumentedBIOS -Class HP_BIOSSettingInterface;  ^
   $BIOS.SetBIOSSetting('Setup Password','<utf-16/>TheBIOSPassword','<utf-16/>')
pause

提到任何

"
前面都需要有
\
并且每个命令后面都需要跟有
; ^
除了最后一个..

无论如何,这是我正在尝试运行的代码。它是关闭和打开防火墙规则,然后更改运行包含代码的批处理文件的快捷方式的图标:

netsh advfirewall firewall show rule name="OBRule" | findstr "^Enabled:.*Yes$"

if %errorlevel% == 0 (
    netsh advfirewall firewall set rule name="OBRule" new enable=no
    ren S:\Libraries\Desktop\OutboundON.lnk OutboundOFF.lnk

echo OUTBOUND RULE DISABLED!

@echo off

PowerShell ^ 
    $shortcutPath = \"S:\Libraries\Desktop\OutboundOFF.lnk\"; ^
    $iconPath = \"C:\Windows\System32\Customization\Icons\OBOFF.ico\"; ^
    $WsShell = New-Object -ComObject WScript.Shell; ^
    $shortcut = $WsShell.CreateShortcut($shortcutPath); ^
    $shortcut.IconLocation = $iconPath; ^
    $shortcut.Save();

) else (
    netsh advfirewall firewall set rule name="OBRule" new enable=yes
    ren S:\Libraries\Desktop\OutboundOFF.lnk OutboundON.lnk

echo OUTBOUND RULE ENABLED!

@echo off

PowerShell ^ 
    $shortcutPath = \"S:\Libraries\Desktop\OutboundON.lnk\"; ^
    $iconPath = \"C:\Windows\System32\Customization\Icons\OBON.ico\"; ^
    $WsShell = New-Object -ComObject WScript.Shell; ^
    $shortcut = $WsShell.CreateShortcut($shortcutPath); ^
    $shortcut.IconLocation = $iconPath; ^
    $shortcut.Save();

)

pause

这些代码在各自的本机环境中完美运行,但是当我在 .bat 文件中运行这样的脚本(具有所谓正确的 powershell 格式)时,它会闪烁 cmd 提示符几分之一秒,但什么也不做。

我也尝试过这种格式:

Powershell.exe -executionpolicy bypass -noprofile -command "& {

$shortcutPath = "S:\Libraries\Desktop\OutboundOFF.lnk"; ^
$iconPath = "C:\Windows\System32\Customization\Icons\AEOFF.ico";

$WsShell = New-Object -ComObject WScript.Shell;

$shortcut= $WsShell.CreateShortcut($shortcutPath);

$shortcut.IconLocation = $iconPath;

$shortcut.Save();
}"

但这会返回一个“缺少

}
”的问题,除非我将它们全部放在括号内的一个不间断的行字符串中,否则该问题不会消失,而且我认为(太累了,无法再试一次)这会产生一个奇怪的无限循环,其中一百万件事出了问题,它开始打开新窗口,直到我能在下一个窗口打开之前捕捉到最新的窗口。

我在这里缺少什么?

蒂亚!

powershell batch-file hybrid
1个回答
0
投票

看起来您缺少一些缩进、行继续字符 (

^
) 和双引号。 我不是 100% 确定每一行(第一行除外)都需要缩进,但是如果你 do 缩进这些行,最后一个
"}"
也需要缩进,否则你会得到一个关于字符串未终止。


尝试将其作为 .bat 脚本:

Powershell.exe -executionpolicy bypass -noprofile -command "& {"^
 "$shortcutPath = 'S:\Libraries\Desktop\OutboundOFF.lnk';"^
 "$iconPath = 'C:\Windows\System32\Customization\Icons\AEOFF.ico';"^
 "$WsShell = New-Object -ComObject WScript.Shell;"^
 "$shortcut = $WsShell.CreateShortcut($shortcutPath);"^
 "$shortcut.IconLocation = $iconPath;"^
 "$shortcut.Save()"^
 "}"
© www.soinside.com 2019 - 2024. All rights reserved.