簡體   English   中英

使用PowerShell啟動文件夾副本並繼續執行腳本

[英]Start a folder copy and continue script using PowerShell

我深入探討了用於管理用戶帳戶的PowerShell腳本的問題。 當用戶在位置之間移動時,我們將其ADUser移動到新的OU,並在服務器之間移動其數據。

在研究如何復制其主文件夾時,確定沒有簡單的方法可以使用PowerShell復制文件並排除某些目錄。 結果,我們正在調用robocopy.exe並使用/ XD。 這也使我們可以開始復制,但是讓腳本繼續到下一個用戶。

我們正在嘗試通過根據用戶類型移動或刪除較舊的文件夾來增強腳本。 我創建了一個我想調用的PS1文件,以便腳本可以立即繼續向下一個用戶發送,而不必等待副本完成。 PS1文件如下所示:

Param(
  [string]$source,
  [string]$destination,
  [string]$oldStaff
)

robocopy $source $destination
move $source $oldStaff

當我嘗試通過以下方式從腳本中調用此方法時:

start powershell.exe .\Move-WCFolders.ps1 $source $destination $oldStaff

我收到以下錯誤消息:

啟動過程:找不到位置參數,該位置參數在發布到Stack Overflow%>之前接受參數“ <%已刪除的服務器名稱”。 在第1行:char:1 +啟動powershell.exe。\\ Move-WCFolders.ps1 $ source $ Description + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:InvalidArgument:(:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

我敢肯定,有一種更好的方法可以實現我想要達到的目標。 不需要啟動robocopy或必須調用外部腳本中的內容並不“干凈”。 最終目標是在排除目錄的同時復制文件夾,復制完成后移動文件夾,而不必等待復制完成即可繼續執行腳本。

嘗試使用Start-Job 它比您想像的要容易,並且您可以捕獲結果以備后用:

$job = Start-Job -FilePath '.\Move-WCFolder.ps1' -ArgumentList $source, $destination, $oldStaff

# do more processing here
# . . .

# wait for the job to finish and output the results
$job | Receive-Job

start是啟動過程的別名

錯誤是因為參數末尾。

AFAIK,您很可能希望將它們轉換為單個字符串以傳遞給powershell。

您可能要嘗試這樣的事情:

start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "$source $destination $oldStaff"

您將要確保自己具有轉義權,因此最終可能看起來像這樣:

start powershell.exe -File .\Move-WCFolders.ps1 -ArgumentList "`"$source`" `"$destination`" `"$oldStaff`""

您也可以使用“開始作業”進行調查。

暫無
暫無

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

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