0

PowerShell でスクリプトを使用して、複数の NAS ボックスのすべてのフォルダーを再帰的に通過させ、Out-File. ここでGet-FolderEntry見つけたスクリプトを使用します。

ファイル名/パス長に 260 文字を超える複数の NAS ボックスがあるため、マルチスレッドを使用してプロセスを高速化すると考えました。

コード:

. C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1
# list with the servers
$Computers = Get-Content C:\Users\mdevogea\Desktop\servers.txt

# scriptblock calling on get-FolderEntry
$sb = {
    param ($Computer, $fname)
    C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1 -Path $Computer |
        fl | Out-File -Append -Width 1000 -FilePath $fname
}

foreach($Computer in $Computers)
{
    $name = $Computer.Replace("\", "")
    $fname = $("C:\Users\mdevogea\Desktop\" + $name + ".txt")
    #Get-FolderEntry -Path $Computer | fl | Out-File -Append -Width 1000 $fname

    $res = Start-Job $sb -ArgumentList $Computer, $fname
}

# Wait for all jobs
Get-Job
while(Get-Job -State "Running")
{
    Write-Host "Running..."
    Start-Sleep 2
}
# Get all job results
Get-Job | Receive-Job | Out-GridView

ここのところ:

  1. ファイルの正しい名前で空のファイルを取得します。

  2. のコードを含む正しい名前のファイルを取得しますGet-FolderEntry

  3. スクリプトブロックに何を渡すかによって、エラーが発生します。

要するに、それはおそらくばかげていますが、それを見ていません。

4

1 に答える 1

0

試行錯誤の末、最終的に自分で見つけました:

. C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1
# list with the servers
$Computers = Get-Content C:\Users\mdevogea\Desktop\servers.txt

# scriptblock calling on get-FolderEntry
$sb = {
    Param ($Computer, $fname)
    . C:\Users\mdevogea\Downloads\Get-FolderEntry.ps1 
    (Get-FolderEntry -Path $Computer | fl | Out-File -Append -Width 1000 -FilePath $fname)
}

foreach ($Computer in $Computers)
{
    $name = $Computer.Replace("\", "")
    $fname = $("C:\Users\mdevogea\Desktop\" + $name + ".txt")
    $res = Start-Job $sb -ArgumentList $Computer, $fname
}

# Wait for all jobs
Get-Job
while (Get-Job -State "Running")
{
    Write-Host "Running..."
    Start-Sleep 2
}
# Get all job results
Get-Job | Receive-Job | Out-GridView

私を正しい方向に向けてくれたAnsgarに感謝します!

于 2016-12-14T07:54:41.163 に答える