Start-Process -Wait
を使用するか、.EXEを.EXEファイルとしてうまく動作するOut-Null
にパイプすることで、いくつかの投稿を推薦しましたが、組み込みのPowerShellコマンドレット。次のコード行が実行される前に、ループが完全に完了したことを確認するにはどうすればよいですか?次のコマンドが実行される前にコードブロックを完全に終了する方法
参考までに、ファイル/フォルダをチームドライブにコピーするのにrcloneというツールを使用していますが、現在は空のディレクトリのコピーをサポートしていません。回避策は、すべての空のディレクトリに一時ファイルを作成し、ツールのsyncコマンドを実行し、別のpowershellコマンドを実行してローカルディレクトリから一時ファイルを削除してから、ツールのsyncコマンドを再実行してチームドライブから削除します。以下のコードの参照:
$shares = "Office Operations","Training"
# iterate through each share and output full path name to empty shares
$emptyDirs = foreach ($share in $shares) {
Get-ChildItem -Path "\\servername\e`$\rootshare\$share" -Recurse -Directory | Where-Object {$_.GetFileSystemInfos().Count -eq 0} | select FullName
}
# iterate through each empty directory and create a temp.txt file with a random string
$emptyDirs | % {new-item $_.FullName -ItemType file -name temp.xyz -value "This is a test string"}
# initial rclone sync to copy over directory with temp.txt file
foreach ($share in $shares) {
Start-Process "C:\program files\rclone\rclone.exe" -ArgumentList "sync `"\\servername\e`$\rootshare\$share`" `"$($share + ':')`"" -Wait -NoNewWindow
}
# iterate through each empty folder, cd accordingly and delete all .txt files
$emptyDirs | % {
Set-Location $_.FullName
Remove-Item * -Include *.xyz
}
# second rclone sync to remove temp.txt file while maintaining folder structure
foreach ($share in $shares) {
Start-Process "C:\program files\rclone\rclone.exe" -ArgumentList "sync `"\\servername\e`$\rootshare\$share`" `"$($share + ':')`"" -Wait -NoNewWindow
}
コードは動作しますが、私は手動でそれ以外の場合は、いくつかのtemp.xyzファイルはチーム・ドライブから削除されていない第二の同期コマンドを実行する必要があります。それは、ローカルシェアから削除されているので、うまくいくようです。これがPowerShellまたはアプリケーションの問題であるかどうかは不明です。アプリケーションは珍しい何かをしない限り、