求可运行指定PowerShell脚本的正确CMD执行命令
解决在CMD中运行PowerShell快捷方式创建脚本的问题
我来帮你搞定这个问题~要在CMD里顺利运行那段创建IE快捷方式的PowerShell脚本,关键得处理好两种命令环境的语法冲突,尤其是引号和命令分隔的问题。
直接可用的CMD命令(简单版)
把PowerShell脚本的多条命令用分号;连接,同时把脚本里的双引号换成单引号(避免和CMD外层的双引号冲突),最终的CMD命令如下:
powershell.exe -Command "$wshshell = New-Object -ComObject WScript.Shell; $lnk = $wshshell.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk'); $lnk.TargetPath = 'C:\Program Files\Internet Explorer\iexplore.exe'; $lnk.Save()"
为什么之前的尝试不行?
你之前的命令没给PowerShell命令加上完整的引号包裹,而且没有用分号分隔多条PowerShell语句——CMD会把整个内容当成一串参数传给PowerShell,直接导致语法错误。
进阶方案:用Base64编码避免所有冲突(适合复杂脚本)
如果脚本里有更多特殊字符或者引号嵌套,推荐用EncodedCommand参数,先把PowerShell脚本转换成Base64编码:
- 先在PowerShell里执行以下命令得到编码:
$script = @" `$wshshell = New-Object -ComObject WScript.Shell `$lnk = `$wshshell.CreateShortcut("C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk") `$lnk.TargetPath = "C:\Program Files\Internet Explorer\iexplore.exe" `$lnk.Save() "@ [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($script))
- 把得到的编码复制到CMD命令里:
powershell.exe -EncodedCommand JAB3AHMAaABzAGgAZQBsAGwAIAA9ACAATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AQwBvAG0ATwBiAGplAGMAdAAgAFcAUwBjAHIAaQBwAHQAUwBoAGUAbABsAA0ACgAkAGwAbgBrACAAPQAgACQAdwBzAGgAcwBoAGUAbABsAC4AQwByAGUAYQB0AGUAcwBoAG8AdABjAHUAdAAoIkM6XFBvcmdyb21hdGVEYXRhXE1pY3Jvc29mdFxXaW5kb3dzXFNhdHQgTWVudVxQcm9ncmFtc1xBY2Nlc3Nvcmllc1xJbnRlcm5ldCBFeHBsb3Jlci5sbmsiKQANAAoAJABsAG5rAC4AVABhAGcAZQBSAGEAdABwACAAPQAgIkM6XFBvcmdzIEZpbGVzXEludGVybmV0IEV4cGxvcmVyXGlleHBsb3JlLmV4ZSIADQAKACQAbABuAGsALgBTAGEAdgBlACgAKQA=
注意事项
因为要修改C:\ProgramData目录下的内容,请确保以管理员身份运行CMD,否则会出现权限不足的报错。
内容的提问来源于stack exchange,提问作者IIIdefconIII
相关产品推荐
相关产品推荐

