2015-06-02 28 views
1

我想初始化一個TON的PowerShell窗口,以幫助快速完成掃描。每個窗口需要不同的輸入,我有一個數組變量給出了輸入。開始處理功能似乎工作,但如果我用"它給了我未知函數的錯誤,給我當我使用'在腳本中使用啓動進程運行函數

foreach($search in $Partlist){ 
    start-process powershell.exe -argumentlist '-nologo -noprofile -executionpolicy bypass -command .\Get-Data -search $search -department $PNdept -accuracy $accuracy; pause' 
    start-sleep -s 5 
} 

我不明白爲什麼我得到未知函數的錯誤絕對沒有任何反應,但我相信我沒有迴應,因爲變量不是全球性的,我宣佈變量是全球性的,但仍然沒有運氣。也許我錯過了一些東西。謝謝。

+0

什麼是'GET-Data'?腳本或函數?它看起來像是腳本的路徑,在這種情況下,請嘗試使用完整路徑,因爲新進程不會在當前目錄中啓動,除非將WorkingDirectory參數傳遞給Start-Process。 –

+3

而不是用PowerShell窗口混淆桌面,我建議你開始尋找[作業](http://stackoverflow.com/a/22585698/1630171)。 –

+1

編寫完整路徑的問題是需要用引號引起,因爲路徑名中有空格。它也是一個腳本,但是我把它變成了一個函數,因爲它需要輸入。我現在正在找工作。 –

回答

0

爲了增加安斯加爾Wiechars的回答,有以下的區別:

  • 喬布斯將啓動引擎蓋下的新的進程,但是給你很多 框架運行多個實例,排隊和獲取數據 背部。但是,爲每個作業啓動一個新進程在 Windows中很昂貴。
  • 啓動一個新的Powershell窗口將會至少和工作一樣慢,但是由於額外的視覺元素開銷,以及返回調用進程的難度
  • 運行空間可能要執行因爲他們使用現有的進程塊(這是一個 Windows結構,而不是PS),因此它們在同一進程中作爲線程運行,因爲它們運行得更快,因爲 要便宜得多。

一個偉大的文章是在這裏:https://learn-powershell.net/2012/05/13/using-background-runspaces-instead-of-psjobs-for-better-performance/但要知道過猶不及:https://newsqlblog.com/2012/05/22/concurrency-in-powershell-multi-threading-with-runspaces/

要獲得關於全球空間中的點,這是不是全局的,你坐在計算機的桌面會話。這是全球性的,以你工作的PowerShell進程。例如:您創建了以下環境變量:

[System.Environment]::SetEnvironmentVariable("MyVar", 22, "User") 

您生成一個新的PowerShell窗口,並用此檢查:

$env:MyVar 

你刪除它與此:

Remove-Item env:\myvar 

您產卵了另一個新的PowerShell窗口和環境變量仍然存在。進一步的實驗將告訴你,每個新過程都會產生一個新的全球範圍。

所以!爲什麼你會得到「未知功能」?因爲您希望環境的某些方面與呼叫過程相匹配,但它不成立。在這種情況下:

  • 你的命令是不是在新的工藝在
  • 催生了你的變量值未分配的路徑,因爲你通過他們在單引號和新工藝沒有按」噸有他們的範圍

使用的運行空間,或參照本:PowerShell Executing a function within a Script Block using Start-Process does weird things with double quotes

相關問題