2016-03-21 90 views
0

我對用於管理用戶帳戶的PowerShell腳本存在幾個問題。當用戶在不同地點之間移動時,我們將他們的ADUser移動到一個新的OU中,並在服務器之間移動他們的數據。使用PowerShell啓動文件夾副本並繼續執行腳本

在研究如何複製其主文件夾時,確定沒有簡單的方法使用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 

我收到以下錯誤信息:

開始 - 過程:無法找到位置參數,它接受 參數 '<%在發佈到堆棧溢出%>之前刪除了服務器名稱。在 行:1 char:1 + start powershell.exe。\ Move-WCFolders.ps1 $ source $說明 + ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(:) [Start -Process],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

我敢肯定,很可能有一個更好的方式來實現我所想要的目的。它不需要啓動robocopy或者不得不在外部腳本中調用事物,因此不覺得'乾淨'。最終目標是在排除目錄時複製文件夾,在完成複製時移動文件夾,但不必等待複製完成以繼續腳本。

回答

0

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`"" 

你可以也調查使用開始工作。

1

嘗試使用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