iT邦幫忙

0

powershell將執行結果輸出到檔案時會出現"Out-File : 由於另一個處理序正在使用檔案,所以無法存取該檔案。"

  • 分享至 

  • xImage

將執行結果輸出到檔案時會出現檔案被佔用導致有些資料沒有寫進去,我如何解決這個問題?
目前執行時會出現"Out-File : 由於另一個處理序正在使用檔案,所以無法存取該檔案。",但出現的筆數不定,漏寫的位置也不定。

請給我建議,感謝。

$Users = (Get-ADUser -Filter * |  Where-Object {($_.SamAccountName -notlike 'system*') -and ($_.SamAccountName -notlike 'HealthMailbox*') -and ($_.SamAccountName -notlike 'SM_*') -and ($_.SamAccountName -notlike '$CUA000*') -and ($_.SamAccountName -notlike 'krbtgt') -and ($_.SamAccountName -notlike 'SQL*')}).SamAccountName
$Result = 'C:\temp\Result_AllUserMemberOf_in_ActiveDirectory.txt'
$AllUsersResult = 'C:\temp\Result_AllUsers_in_ActiveDirectory.txt'


$Users | Out-File $AllUsersResult


'使用者名稱' + ',' + '使用者帳號' + ',' + '使用者Email' + ',' + '使用者所屬群組' | Out-String | Out-File $Result


ForEach ($User in $Users)
    {
        $UserDetail = Get-ADUser -Identity $User -Properties *
        $PrimaryGroup = $UserDetail.PrimaryGroup -split ","
        $PrimaryGroup = ($PrimaryGroup[0]).Replace('CN=','')
        $Groups = Get-ADUser $User -Properties memberOf | Select-Object -ExpandProperty memberOf | Where-Object { ($_ -like 'CN=*') -and ($_ -notlike '*靜態通訊錄*') -and ($_ -notlike '*Exchange*') -and ($_ -notlike '*Builtin*')}


        $UserDetail.Name + ',' + $UserDetail.SamAccountName + ',' + $UserDetail.mail + ',' + $PrimaryGroup + ',' | Out-File $Result -Append -NoNewline | Wait-Job


            ForEach ($Group in $Groups)
                {
                    $GroupArray = $Group -split ","
                    $Names = ($GroupArray[0]).Replace('CN=','')

                ForEach ($Name in $Names)
                    {
                        $Name +"," | Out-File $Result -Append -NoNewline | Wait-Job
                    }                    
                }     


        "" | Out-String | Out-File $Result -Append -NoNewline | Wait-Job
 
    }

目前在DC上或是與DC同網段VM(Win10或Win2019)上執行都不會出現錯誤,推測可能是網段造成的問題。

看更多先前的討論...收起先前的討論...
nwm310 iT邦新手 3 級 ‧ 2024-08-21 13:05:10 檢舉
不要用Wait-Job
setsuna iT邦新手 2 級 ‧ 2024-08-21 16:08:44 檢舉
請問該用什麼?
或是該怎麼改才能避免無法寫入的情形發生
froce iT邦大師 1 級 ‧ 2024-08-22 08:47:14 檢舉
你這不能把資料都在記憶體準備好,然後一次輸出到檔案嗎?
都在迴圈去輸出,然後重複開關寫入同一個檔,當然會掉資料。
setsuna iT邦新手 2 級 ‧ 2024-08-22 10:02:49 檢舉
感謝froce回覆,我試看看。
obarisk iT邦研究生 1 級 ‧ 2024-08-22 10:29:17 檢舉
單執行緒,用迴圈把資料寫到檔案結尾

就算是 windows,這應該也不會出錯吧。
froce iT邦大師 1 級 ‧ 2024-08-22 12:58:30 檢舉
>單執行緒,用迴圈把資料寫到檔案結尾
就算是 windows,這應該也不會出錯吧。

問題是他的狀況就是還沒關檔前就試圖存取啊。
「目前執行時會出現"Out-File : 由於另一個處理序正在使用檔案,所以無法存取該檔案。"」
這不太可能幫他弄個環境去測,規模不一樣,搞不好小規模的的確不會有問題。也只能先通通靈了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答