将整个脚本作为参数传递给powershell.exe

时间:2017-12-04 17:22:55

标签: powershell command-line vbscript arguments

我曾经发现一个脚本可以轻松更改我的壁纸,如果我使用多个壁纸。

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys("^ ")
WshShell.SendKeys("+{F10}")
WshShell.SendKeys("n")
WshShell.SendKeys("{ENTER}")

但是我需要一个调用脚本的单独链接。 现在我想知道我是否可以直接将这些多行代码作为参数传递给powershell.exe。

我确实读到我可以使用;对多行进行对齐并尝试构建单行,但是它没有运行...或者说它确实运行,没有反馈,没有任何变化。如果我将命令行粘贴到正在运行的PowerShell实例中,它就会退出。

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "set WshShell = WScript.CreateObject('WScript.Shell'); WshShell.SendKeys('^ '); WshShell.SendKeys('+{F10}'); WshShell.SendKeys('n'); WshShell.SendKeys('{ENTER}')"

我基本上只是连接它们并用单引号替换双引号以转义特殊字符,那么为什么它不能作为单独的脚本工作?

1 个答案:

答案 0 :(得分:3)

在PowerShell中:

$WSH = New-Object -ComObject 'WScript.Shell'
$WSH.SendKeys('^ ')
$WSH.SendKeys('+{F10}')
$WSH.SendKeys('n')
$WSH.SendKeys('{ENTER}')

将此另存为脚本(Filename.ps1),并从.bat.cmd文件中调用:

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -File "path\filename.ps1"

或者,作为命令文件中的一行代码:

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -Command "$WSH = New-Object -ComObject 'WScript.Shell';$WSH.SendKeys('\^ ');$WSH.SendKeys('+{F10}');$WSH.SendKeys('n');$WSH.SendKeys('{ENTER}')"