1

CIFShare をスキャンして、共有内のすべてのファイルとフォルダーのファイル プロパティと ACL プロパティを取得する必要があります。再帰オプションは本当に時間がかかります。これはマルチスレッドで実現できることを知っています。

階層が次のようなものであると仮定します:-

Root
Root\FolderA
Root\FolderA\FolderA1\FolderA2\FolderA3\FolderA3\FolderA4
Root\FolderB\..
..

ルート内のすべてのファイルとフォルダーのファイル プロパティと ACL を取得し、ルート内の各フォルダー (フォルダー A、フォルダー B など) のジョブを開始するスクリプトを管理しました。これはエラーなしで実行されます。すべてのフォルダー (ディレクトリ構造のすべてのレベル) に対してジョブを作成しようとしましたが、その結果、ジョブがハングしたり、powershell が強制終了したりします。PowerShell V2.0 を使用していますが、この環境ではバージョンのアップグレードはできません。私はpowershellが初めてで、非常にばかげた質問であれば親切に許してください。

助けてくれてありがとう。

4

3 に答える 3

1

マシンで PowerShell 3 を使用できますか? その場合、フォルダーの配列リストを受け取るワークフローを作成できます。これを行うためのスニペットはありませんが、興味があれば何か考え出すことができます。

編集(以下に疑似コードを追加):

workflow GetFileInformation
{
    param([System.IO.FileSystemInfo[]] $folders)

    foreach -parallel ($folder in $folders)
    {
        inlinescript 
        {
            $files = GCI -LiteralPath $folder.FullName -File
            # Here you will have an Array of System.IO.FileSystemInfo
            # I do not know what you want to do from here, 
            # but the caller will have no visibility of this object 
            # since it is on a separate thread.
            # but you can write the results to a file or database.
            # Hope this helps some.
        }
    }
}

$dir = GCI C:\ -Directory -Recurse
GetFileInformation $dir
于 2013-11-01T13:39:02.510 に答える
0

これには PowerShell ジョブは使用しません。ファイルと ACL 情報の取得は比較的簡単な作業であり、組み込みの実行可能ファイルが利用可能です。Powershell ジョブ セッションの初期化は、かなりのリソースへの投資であり、些細なタスクのためのリソースへの適切な投資ではありません。

ジョブの代わりに、レガシー dir と cacls\icacls を使用してファイルと ACL 情報を取得し、後で収集と集計のために出力をファイルにパイプします。powershell スクリプトを使用して cmd プロセスを作成および起動し、作成されたプロセスの進行状況を監視して、スレッドの作成を調整します。次に、別のスクリプトに戻って、ファイルから情報を収集および集約します。

私見では

于 2013-11-01T13:24:36.410 に答える
0

すべてのフォルダー (ディレクトリ構造のすべてのレベル) に対してジョブを作成しようとしましたが、その結果、ジョブがハングしたり、powershell が強制終了したりします。

それは、あなたが雇用創出を抑制していないからです。おそらく、何千とは言わないまでも、何百もの並列ジョブを作成しているため、どのサーバーでもメモリが使い果たされます。複数の並列ジョブまたはスレッドを開始することは優れており、システムが負荷を処理できないほど多くのジョブを作成するまでは、全体的な実行時間を改善できます

ジョブの数を妥当な数に抑える方法については、この SO の回答を参照してください。リソースの競合を避けるために、非常に高速なストレージを備えた非常に大規模なサーバーを除いて、ジョブ数を 10 未満に抑えることをお勧めします。

于 2013-11-01T12:48:33.020 に答える