![](/img/trans.png)
[英]PowerShell : How to run remote command prompt commands as admin from PowerShell?
[英]powershell script exits in “if” clause if run from command prompt
我对两个看似相同的脚本之间的差异感到惊讶。
first.ps1:
"A"
if ($true) { "B" }
"C"
second.ps1:
"A"
if ($true) { "B"
}
"C"
现在打开一个CMD窗口,并运行以下脚本:
powershell - < first.ps1 powershell - < second.ps1
首先生产:
A B C
而第二只产生
A
不知道为什么重定向到输入无效,但是,如果您仅将脚本指定为powershell的输入参数,则它似乎可以工作:
C:\fa2>powershell.exe C:\fa2\tc.ps1
Comparison starts
There was a difference
Comparison over
这必须是一个错误。
在使用cmd.exe进行重定向的情况下,如果if和else块分别全部放在一行上,则该函数将正常正常地完成:
$candidate = '.\foo.txt'
$current= '.\bar.txt'
"Comparison starts"
if ($(diff $(get-content $current) $(get-content $candidate)).length -gt 0){"There was a difference"}
else {"There was not a difference"}
"Comparison over"
但是,如果将任一块划分为多行并采用了该分支,则脚本将中止,并且不会发出警告/输出。
我会在PowerShell反馈网站(connect.microsoft.com)上报告此情况。
编辑:
是的,周杰伦证明了这一点。 根本问题是Powershell不支持'<'运算符。 我整天都在网上搜索一些官方文档,但没有找到。 我只是想起我来检查一些旧笔记,发现在v1中不支持对此内容的引用。 它仅支持“>”。
如果我发现比我的记忆更正式的东西,我会尝试更新。 将原始文本留作补充。
我不认为公认的答案在这里是正确的。
看看Lee Holmes博客: 链接
他是Powershell团队的一名开发人员,并且撰写了Powershell Cookbook,只是为了给他的话一点点信任。
我遇到了一些复杂而古老的Bat脚本,这些脚本依赖于一些时髦的奇特二进制重定向,从而遇到了这种问题。 Powershell将运行Bat文件,但在二进制重定向发生的那一刻,它将停止。 使用[Process]:如博客文章中所述,启动非常有效,并且使我能够像其他任何行为良好的脚本一样解析Bat文件的输出。
在您的情况下,我假定“ diff”是实际的exe而不是函数,并且其输出二进制文件而不是文本。
附带一提,我真的不认为需要像您一样将脚本的输出重定向到Powershell。 似乎适得其反。 您编写了一个powershell脚本,不使用专门提供的参数来处理运行的输入似乎是一种浪费。
我不认为这是一个错误。 尝试在控制台上键入每行,您将看到正在发生的事情。 当您键入并打开方括号而不将其关闭时,PowerShell将进入多行输入模式。 要退出此模式,您需要使用右方括号和后面的空白行。 如果在“ C”之前或之后有空白行,则应该可以使用。
当然,也许这是一个错误,并且与多行输入具有相同的效果。 :)
我无法自己使用此功能,powershell忽略了我发送给它的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.