簡體   English   中英

在腳本中使用Start-process運行功能

[英]Run function with Start-process within script

我正在嘗試初始化一堆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
}

我不明白為什么會收到未知的函數錯誤,但我相信我沒有任何反應,因為變量不是全局變量,我已經聲明了全局變量,但仍然沒有運氣。 也許我想念一些東西。 謝謝。

為了增加Ansgar 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使用啟動過程在腳本塊中執行功能會引起奇怪,並帶有雙引號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM