2011-08-03 205 views
1

我有兩個需要在PowerShell中執行的命令。其他一切都可以在批處理中下載。我可以在PowerShell中編寫整個東西,但我必須確保執行策略設置正確,這可能是我們在這些服務器上的netadmins的安全問題。Powershell需要執行兩行

在我的批處理腳本,我需要:

  1. 打倒IIS應用程序緩存(我可以用APPCMD)
  2. 從服務器上下載一個新的zip文件(使用我wget的版PowerShell的)
  3. 刪除www目錄
  4. 解壓在www目錄
  5. 的zip文件中的所有舊文件調出IIS應用程序緩存。

在第2步,我的兩個PowerShell命令是:

$client = new-object System.Net.WebClient 
$client.DownloadFile("http://path/to/file", "file.name") 

有沒有一種方法可以讓我這兩條線合併成一個單一的PowerShell命令,就像使用分號在Unix上的方式,我可以?我試圖把兩線之間的分號,並得到了以下錯誤:

Missing ')' in method call. 
At line:1 char:62 
+ $client.DownloadFile( <<<< http://path/to/file) 
    + CategoryInfo   : ParserError: (CloseParenToken:TokenId) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall 

然而,所謂的「wget.ps1」實際PowerShell腳本里面,它執行與此:

$ powershell -c wget.ps1 

回答

0

你可以這樣做:

(new-object System.Net.WebClient).DownloadFile("http://path/to/file", "file.name") 
+0

我明白了!我花了一段時間才明白你在做什麼,你一直在創建對象並且一次調用方法,整潔的把戲,我決定把所有的東西寫出來Powershell,並且作爲我的過程的一部分,改變了執行策略,整件事情沒有任何意義:如果默認情況下我不能執行腳本,Powershell這樣強大的語言如何使用批處理,如果我可以簡單地執行DOS命令行來改變策略,爲什麼要打擾? –

+0

令人沮喪和令人沮喪的(sp)是我將如何描述我的執行策略的經驗,esp當包含遠程腳本時,獲得它的工作是很好的,但有很多與PS。 – Matt

+0

請注意$(...)類型的查詢。它類似於(..)在答案中使用的類型。最好的,亞光 – Matt

1

那麼你至少有兩個選擇。首先是在運行腳本時定義執行策略。這只是改變了你蹬掉了一個會話策略:

powershell.exe -File 'C:\Path\To\File.ps1' -ExecutionPolicy RemoteSigned 

或者你也可以通過直接在命令:

powershell.exe -command {$string = 'bobdee';$client.DownloadFile("http://path/to/file", "file.name")} 
+0

把花括號看起來沒有任何作用。我用'{foo =「$ bar」;寫輸出「Bar = $ bar」}'嘗試了它,它只是迴應了命令。我只用了雙引號:'「foo ='bar'; echo $ foo''我試着看看能不能找到一個轉義字符,但是不能。第一種方法,試圖覆蓋執行策略沒有工作 –

0

2013更新:

我不確定'11年的情況如何,但是現在您可以在PowerShell中執行以下操作:

wget "http://path/to/file" -outfile "file.name" 
+0

它結束了,這是PS 1.0,甚至沒有PS 2.0。這是我的問題之一。無論如何,我最終都是在PowerShell中編寫完整的東西。這並不難,如果我熟悉PowerShell,可能會更容易。 –