在这个问题中据说使用以下代码应该创建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();
}"
但这会返回一个“缺少
}
”的问题,除非我将它们全部放在括号内的一个不间断的行字符串中,否则该问题不会消失,而且我认为(太累了,无法再试一次)这会产生一个奇怪的无限循环,其中一百万件事出了问题,它开始打开新窗口,直到我能在下一个窗口打开之前捕捉到最新的窗口。
我在这里缺少什么?
蒂亚!
看起来您缺少一些缩进、行继续字符 (
^
) 和双引号。 我不是 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()"^
"}"