2016-12-06 74 views
0

我在這裏要做的是給和刪除基於csv輸入(計算機,用戶)的本地管理權限。由於我們的用戶計算機往往處於脫機狀態,並且有大量不同的時區出現,我希望腳本重試以提供權限。powershell - 根據錯誤消息刪除行

問題是,如果腳本添加/刪除了1個權限,但另一個權限不在此時(由於計算機無法訪問,訪問被拒絕或類似),腳本將發回「無法在1小時內發送信息重試...「,但它可以成功刪除/添加一個或多個列出的條目。

所以我想要做的就是一次返回錯誤消息0(成功),我想從CSV中刪除當前在csv-line上的工作,所以CSV實際上'工作'的計算機需要被完成。

任何人都可以幫助我嗎?到目前爲止,我還沒能找到類似這個問題的東西。

$Stoploop = $false 
[int]$Retrycount = "0" 

do { 
try { 
     Import-Csv "E:\Folder\Script\Remove-Admin-1.csv" | foreach { 
     $DomainName = "domain.local" 
     $ComputerName = $($_.Computer) 
     $UserName = $($_.User) 
     $AdminGroup = [ADSI]"WinNT://$ComputerName/Administrators,group" 
     $User = [ADSI]"WinNT://$DomainName/$UserName,user" 
     $AdminGroup.Add($User.Path) 
     } 
    Write-Host "Job completed" 
    $Stoploop = $true 
    } 
catch { 
    if ($Retrycount -gt 24){ 
     Write-Host "Could not send Information after 24 retrys." 
     $Stoploop = $true 
    } 
    else { 
     Write-Host "Could not send Information retrying in 1 hours..." 
     Write-Host $(Get-Date) 
     Start-Sleep -Seconds 3600 
     $Retrycount = $Retrycount + 1 
    } 
} 
} 
While ($Stoploop -eq $false) 

回答

0

所以爲了做到這一點,您需要保留一個包含所有失敗嘗試的對象,然後使用該對象覆蓋現有文件。這也意味着你的try/catch需要放在你的foreach中,這樣每臺計算機都可以獨立處理。

$Stoploop = $false 
[int]$Retrycount = "0" 
$fails = @() 

do { 

Import-Csv "E:\Folder\Script\Remove-Admin-1.csv" | foreach { 
    Try{ 
     $DomainName = "domain.local" 
     $ComputerName = $($_.Computer) 
     $UserName = $($_.User) 
     $AdminGroup = [ADSI]"WinNT://$ComputerName/Administrators,group" 
     $User = [ADSI]"WinNT://$DomainName/$UserName,user" 
     $AdminGroup.Add($User.Path) 
    } catch { 
     $fails += $_ 
     if ($Retrycount -gt 24){ 
      Write-Host "Could not send Information after 24 retrys." 
      $fails | export-csv "E:\Folder\Script\Remove-Admin-1.csv" -NoTypeInformation 
      $Stoploop = $true 
     } 
     else { 
      Write-Host "Could not send Information retrying in 1 hours..." 
      Write-Host $(Get-Date) 
      Start-Sleep -Seconds 3600 
      $Retrycount = $Retrycount + 1 
      $fails += $_ 
     } 
    } 
} 
if($fails = 0){ 
    Write-Host "Job completed" 
    $Stoploop = $true 
} elseif ($Retrycount -gt 24){ 
    Write-Host "Could not send Information after 24 retrys." 
    $fails | export-csv "E:\Folder\Script\Remove-Admin-1.csv" -NoTypeInformation -force 
    $Stoploop = $true 
} else { 
    Write-Host "Could not send Information retrying in 1 hours..." 
    Write-Host $(Get-Date) 
    Start-Sleep -Seconds 3600 
    $Retrycount = $Retrycount + 1 
    $fails | export-csv "E:\Folder\Script\Remove-Admin-1.csv" -NoTypeInformation -force 
} 


} 
While ($Stoploop -eq $false) 
+0

嗨邁克, 感謝您的快速回復,很遺憾,它並沒有完全奏效。 爲了填寫csv正確添加的頁眉計算機,用戶並從CSV中刪除該行。 我仍然面臨的問題是它不能填充CSV。它會覆蓋csv,但不會在其中放入內容。 你有什麼建議如何解決這個問題? 謝謝! –