批量嵌入PowerShell

时间:2015-07-08 14:27:18

标签: windows powershell batch-file command

我想通过批处理文件运行一些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命令而是使用批处理命令等......”的答案。

提前致谢!

2 个答案:

答案 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