簡體   English   中英

系統重啟后如何恢復PowerShell腳本?

[英]How to resume PowerShell script after system reboot?

我正在使用下面的powershell腳本刪除SharePoint警報。

foreach ($site in Get-SPSite -Limit All) 
{ 
  "Site Collection $site" 
  foreach ($web in $site.allwebs)
  {
     "  Web $web"
     $c = $web.alerts.count
     "    Deleting $c alerts"
     for ($i=$c-1;$i -ge 0; $i--) { $web.alerts.delete($i) }
  }
}

在開發,測試和UAT環境中,大約有數百萬條警報。 一次刪除所有警報需要花費數小時,而且由於服務器會定期自動重新啟動,因此腳本無法完全執行。

我知道重啟后要恢復PowerShell腳本,我們可以將PowerShell WorkflowCheckpoint-workflow一起使用,但不確定在哪里放置checkpoint和PSPersist

系統重啟后,需要幫助以恢復刪除上述腳本中的警報。

更新:嘗試實現它之后,我意識到SharePoint PowerShell cmdlet不能與PowerShell Workflow結合使用。 不允許

Add-PSSnapin "Microsoft.SharePoint.PowerShell"

被添加到工作流程中

Workflow SPAlerts
{
//Below tweaks didn't work
 InlineScript{Add-PSSnapin "Microsoft.SharePoint.PowerShell"}
 Invoke-Command -ScriptBlock {Add-PSSnapin "Microsoft.SharePoint.PowerShell"}
 Invoke-Expression "......"
}

MSDN文檔指出:

您可以在工作流中的任何位置放置檢查點,包括在每個命令或表達式之前和之后,或在工作流中的每個活動之后。 Windows PowerShell工作流允許您這樣做。

...在工作流的每個重要部分完成之后添加檢查點; 如果工作流程中斷,您不想重復的部分。

...當工作流程定義完成時,使用測試過程來完善您的檢查點。 添加和刪​​除(注釋掉)檢查點以實現合理的運行時間和合理的恢復時間。

查看您的代碼,如果刪除給定網站的警報平均花費合理的時間,我將在"Site Collection $site"之后放置檢查點。 如果只有幾個站點,每個站點包含大量警報,那么我會將其放在下一個foreach的開始處。

我絕對不會將其放置在刪除警報的worker foreach中。

我還建議您查看工作流的foreach -Parallel功能,以使刪除操作並行進行。 這樣,即使服務器經常重啟,即使是最后一個站點/網站也應該輪到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM