[英]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.