我有一个PowerShell脚本,用于将网站添加到Internet Explorer中的受信任站点:
set-location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
set-location ZoneMap\Domains
new-item TESTSERVERNAME
set-location TESTSERVERNAME
new-itemproperty . -Name http -Value 2 -Type DWORD
我想从批处理文件执行这些PowerShell命令。当我必须运行单个命令时,这看起来很简单,但是在本例中,我有一系列相关命令。我想避免为从批处理调用的PS脚本创建单独的文件-所有内容都必须在批处理文件中。
问题是:如何从批处理文件执行PowerShell命令(或语句)?
7条答案
按热度按时间k97glaaz1#
下面是批处理文件中的代码(tested,works):
根据以下信息:
http://dmitrysotnikov.wordpress.com/2008/06/27/powershell-script-in-a-bat-file/
6yoyoihd2#
键入cmd.exe
Powershell -Help
并查看示例。jgwigjjp3#
这个解决方案类似于walid 2 mi(感谢您的启发),但是允许Read-Hostcmdlet的标准控制台输入。
优点:
缺点:
batch-ps-script.cmd的注解和可运行示例:
.cmd文件的代码段:
gkl3eglg4#
未测试.cmd
exdqitrt5#
当从批处理文件调用多行PowerShell语句时,除了最后一行之外,每行都以插入符号结尾。行首不必有额外的空格,这是我的约定。
如果您正在通过管道输入Select-Object之类的cmdlet,则需要以分号结束命令,否则它将包含下一行。
qacovj5a6#
在寻找将powershell脚本放入批处理文件的可能性时,我发现了这个线索。walid2mi的想法并没有100%适用于我的脚本。而是通过一个临时文件,包含它所产生的脚本。下面是批处理文件的框架:
evrscar27#
我无法得到任何有用的答案,但加上@哈桑Voyeau的
-Command
和;
,再加上@艾德Palmer的格式,就可以了:这里,
;
告诉被调用的powershell.exe当前命令行到此结束,并且可以进一步指定更多命令行,而^
告诉CMD(为了简单起见;它实际上被称为“Windows Script Host”),下一行可能会有更多的字符串输入。从我们的Angular 来看,CMD通过CR/LF line-endings escape character^
将多个命令行解析为一个命令行,以便powershell.exe看到的是单行命令行-Command set-location ...; set-location ...; ...
。powershell
参数,在-Command
之前指定,因为powershell.exe会将-Command
之后的命令行解释为-Command
的单个代码块参数。使用花括号来显式分隔代码块,如-Command {set-location ...; ...}
,也不允许在后面指定powershell
参数,如-Command {...} -NoExit
。"
来分隔-Command
的参数,因为CMD会将未闭合的"
中的^
解释为文字插入字符。^
作为第一行之后的任何一行的第一个字符也会使CMD将其解释为文字插入字符。使用空格``作为前面的空格,从语义上指定空行。<# .. #>
(PowerShell的行内注解#
表示所有后续字符都是其注解的一部分,不能转义,因为^
会将多个命令行解析为一个命令行。)但是,如果没有"
,如@哈桑Voyeau 's中那样封装<
和>
,CMD会将它们解析为I/O redirection operators,我们可以像^<# COMMENT GOES HERE #^>
一样执行escape by using a prefixing-caret。如果您在空行中插入块注解,^
将成为该行的第一个字符,并将被解释为文字插入字符,因此我们像前面一样通过插入前缀空格来获得:^
for I/O redirection operators,\
for double-quotes,%
for percent)中的一个,所以CMD不会使用反勾号。\
。(Quoting/Escaping 1/2)例如:将导致: