2016-03-21 10 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文字::。 ラインで1 +たpowershell.exeを開始\移動-WCFolders.ps1 $の元$説明 + ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Process]、ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound、Microsoft.PowerShell.Commands.StartProcessCommand

私は私が達成しようとしているものを達成するためにはるかに良い方法がありそうであることを確信しています。それはrobocopyを開始する必要があるか、外部のスクリプトで物事を呼び出さなければならないことを「きれいに」感じません。最終目標は、ディレクトリを除外しながらフォルダをコピーし、コピーが完了したらフォルダを移動しますが、スクリプトを続行するためにコピーが完了するまで待つ必要はありません。

答えて

0

スタートはスタート・プロセスの別名

でエラーが最後のための引数です。

私の知る限りでは、あなたが最も可能性のPowerShellに渡すための単一の文字列に変えることになるでしょう。

あなたはこのような何かを試してみたいことがあります。

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

それはこのように見える終わる可能性がありますので、あなたは、あなたが正しいエスケープしていることを確認したくなるでしょう:

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

あなたは可能性がありまた、Start-Jobを使用して調査します。

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