我想通过批处理文件运行一些PowerShell命令。已经问过非常相似的question,但我不想从批处理中运行单独的shell文件。相反,我想嵌入 PowerShell命令到批处理文件。
当我尝试运行时
powershell -command "&{$var = "something"}"
我收到以下错误:
某些内容:术语“某事物”未被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。
在行:1字符:10
& {$ var = something}
CategoryInfo:ObjectNotFound :( something:String)[],CommandNotFoundException
FullyQualifiedErrorId:CommandNotFoundException
但如果我运行类似
的话powershell -command "&{echo "something"}"
然后一切都很好:/
我是在做语法错误还是其他什么?请不要给出“不使用PowerShell命令而是使用批处理命令等......”的答案。
提前致谢!
答案 0 :(得分:0)
将变量的值定义为字符串时,不能使用嵌套引号。您可以使用撇号而不是嵌套引号:
powershell -command "&{$var = 'something'; echo $var}"
...或转义嵌套引号:
powershell -command "&{$var = \"something\"; echo $var}"
另一个例子:
powershell -command "&{$var = 'one'+\" two\"; echo $var}"
答案 1 :(得分:0)
可能有点晚了,但我编写了纯 powershell 脚本并将完整脚本嵌入到 .cmd 文件中以绕过执行策略设置。我有 2 种变体,请选择您喜欢的一种。两者都是您放在 .cmd 文件第一行的单行代码。从第二行开始,您只需在纯 powershell 中编程。无需修改 powershell 脚本中的任何内容。
变体1:
@type "%0" | findstr /v "^@type \"%0\" | findstr /v " | PowerShell.exe -noprofile - & goto :eof
变体2:
@powershell -command "(Get-Content '%0') | select -skip 1 " | powershell -noprofile - & goto :eof