共用方式為


管理和維護連線的電腦代理程式

部署 Azure 連線機器代理程式之後,您可能需要重新設定代理程式、升級代理程式、移除代理程式,或進行其他變更。 這些例行維護工作可以手動完成。 您也可以啟用自動代理程式升級 (預覽版) 或尋找其他可自動執行工作的位置,以減少作業錯誤和費用。

本文說明如何執行與連線機器代理程式和已啟用Arc的伺服器相關的各種作業。

小提示

如需命令行參考資訊,請參閱 azcmagent CLI 檔

安裝特定版本的代理程式

我們通常建議使用 最新版 的 Azure 連線機器代理程式。 不過,如果您因任何原因需要執行舊版代理程式,請解除安裝目前版本,然後安裝目標版本。 如果您的電腦已連線到 Azure Arc,則不需要中斷電腦連線。 產品群組僅正式支援去年發行的連線機器代理程式版本。

請遵循這些指示來安裝特定版本的 Azure 連線機器代理程式。

您可以在每個發行備註的標題下方找到 Windows 代理程式版本的連結。 如果您要尋找超過六個月的代理程式版本,請參閱 版本資訊封存

升級代理程式

Azure Connected Machine 代理程式會定期更新,以解決 Bug 修正、穩定性增強功能,以及新功能。 Azure Advisor 會識別未使用最新版機器代理程序的資源,並建議您升級至最新版本。 當您選取已啟用 Azure Arc 的伺服器時,它會在 [概觀 ] 頁面上顯示 橫幅,或透過 Azure 入口網站存取 Advisor 時通知您。

Windows 和 Linux 的 Azure 連線機器代理程式可以手動或自動升級至最新版本,視您的需求而定。 安裝、升級或卸載 Azure 連線機器代理程式不需要重新啟動伺服器。

自動代理程式升級 (預覽版)

從 Azure Connected Machine 代理程式 1.57 版本開始,你可以設定代理程式自動升級到最新版本。 此功能目前處於公開預覽階段,僅在 Azure 公用雲端中可用。

當你啟用自動升級時,你的代理程式會在最新版本的某一個版本內排程升級。 為維持區域間穩定並減少中斷,升級會分批部署,所有升級均於非尖峰時段啟動。 若升級未成功,客服人員會定期嘗試自動升級直到成功。

要在連接 Azure Arc 時啟用自動升級,請使用 --enable-automatic-upgrade 指令中的 azcmagent connect 旗標。 例如:

azcmagent connect --subscription-id "Production" --resource-group "HybridServers" --location "eastus" --enable-automatic-upgrade

你也可以使用 Azure Policy 來指派「 配置 Azure Arc 啟用伺服器」來啟用自動升級 政策。 此政策允許在整個環境中將代理程式大規模自動升級至伺服器。

要啟用現有 Arc 啟用伺服器的自動升級,請使用 Azure CLI(enableAutomaticUpgradetrue)或 Azure PowerShell 將屬性設定

下列範例示範如何使用 Azure CLI 設定自動代理程式升級。

# Set your target subscription
az account set --subscription "YOUR SUBSCRIPTION"

# Enable automatic upgrades on a single Arc-enabled server
az rest 
--method PATCH 
--url "https://management.azure.com/subscriptions/<SUB_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.HybridCompute/machines/<MACHINE_NAME>?api-version=2024-05-20-preview" 
--headers "Content-Type=application/json" 
--body '{"properties":{"agentUpgrade":{"enableAutomaticUpgrade":true}}}'

下列範例示範如何使用 PowerShell 設定自動代理程式升級。

Set-AzContext -Subscription "YOUR SUBSCRIPTION"

$params = @{
  ResourceGroupName = "YOUR RESOURCE GROUP"
  ResourceProviderName = "Microsoft.HybridCompute"
  ResourceType = "Machines"
  ApiVersion = "2024-05-20-preview"
  Name = "YOUR MACHINE NAME"
  Method = "PATCH"
  Payload = '{"properties":{"agentUpgrade":{ "enableAutomaticUpgrade":true}}}'
}
Invoke-AzRestMethod @params

其他代理程式升級方法

下表說明了支援執行代理程式升級的其他方法:

操作系統 升級方法
窗戶 手動
Microsoft更新
Ubuntu apt
紅帽/甲骨文Linux/亞馬遜Linux yum
SUSE Linux Enterprise Server zypper

您可以從下列來源取得適用於 Windows 電腦的最新版 Azure Connected Machine 代理程式:

Microsoft更新設定

將 Windows 代理程式版本保持在最新狀態的建議方式,是透過 Microsoft Update 自動取得最新版本。 這可讓您使用現有的更新基礎結構(例如 Microsoft Configuration Manager 或 Windows Server Update Services),並使用您的一般 OS 更新排程包含 Azure 連線機器代理程式更新。

Windows Server 預設不會檢查 Microsoft Update 中的更新。 若要接收 Azure 連線機器代理程式的自動更新,您必須在機器上設定 Windows Update 用戶端,以檢查是否有其他Microsoft產品。

針對屬於工作組並連線到因特網以檢查更新的 Windows Server,您可以以系統管理員身分在 PowerShell 中執行下列命令來啟用 Microsoft Update:

$ServiceManager = (New-Object -com "Microsoft.Update.ServiceManager")
$ServiceID = "7971f918-a847-4430-9279-4a52d1efe18d"
$ServiceManager.AddService2($ServiceId,7,"")

針對屬於網域並連線到因特網以檢查更新的 Windows Server,您可以使用組策略大規模設定此設定:

  1. 使用能管理組織組策略物件(GPO)的帳戶登入用於伺服器管理的電腦。
  2. 開啟 組策略管理主控台
  3. 展開樹系、網域和組織單位,以選取新 GPO 的適當範圍。 如果您已經有想要修改的 GPO,請跳至步驟 6。
  4. 以滑鼠右鍵點擊容器,然後選取 在此網域中建立 GPO,並在此處連結...
  5. 提供原則的名稱,例如「啟用Microsoft更新」。
  6. 以滑鼠右鍵按一下原則,然後選取 [編輯]
  7. 流覽至 \[計算機設定 > \] \[系統管理範本 > \] \[Windows 元件 > \] \[Windows Update\]。
  8. 選取 [ 設定自動更新] 設定以編輯它。
  9. 選取 [已啟用] 選項按鈕,以允許原則生效。
  10. 在 [ 選項] 區段底部,核取底部 [安裝其他Microsoft產品的更新 ] 方塊。
  11. 請選擇 [確定]

當選取範圍中的電腦下一次重新整理其原則時,其便會開始檢查 Windows Update 和 Microsoft Update 中的更新。

針對使用 Microsoft Configuration Manager 或 Windows Server Update Services (WSUS) 將更新傳遞給其伺服器的組織,您必須設定 WSUS 來同步處理 Azure 連線機器代理程式套件,並核准它們以在伺服器上安裝。 請遵循 Windows Server Update ServicesConfiguration Manager 的指引,將下列產品和分類新增至您的設定:

  • 產品名稱:Azure 連線機器代理程式(選取所有子選項)
  • 分類:重要更新和更新

同步處理更新之後,您可以選擇性地將 Azure 連線機器代理程式產品新增至您的自動核准規則,讓您的伺服器自動掌握最新的代理程式軟體。

使用安裝精靈手動升級

  1. 使用具有系統管理許可權的帳戶登入計算機。
  2. https://aka.ms/AzureConnectedMachineAgent 下載最新的代理安裝程式
  3. 執行 AzureConnectedMachineAgent.msi 以啟動安裝精靈。

如果安裝精靈發現舊版的代理程式,它會自動升級它。 升級完成時,[安裝精靈] 會自動關閉。

若要從命令列升級

如果您不熟悉 Windows Installer 套件的命令行選項,請檢閱 Msiexec 標準命令行選項Msiexec 命令行選項

  1. 以具有系統管理權限的帳戶登入電腦。

  2. https://aka.ms/AzureConnectedMachineAgent 下載最新的代理安裝程式

  3. 若要以無訊息模式升級代理程式,並在資料夾中建立安裝記錄檔 C:\Support\Logs ,請執行下列命令:

    msiexec.exe /i AzureConnectedMachineAgent.msi /qn /l*v "C:\Support\Logs\azcmagentupgradesetup.log"
    

卸載代理程式

針對您不想再使用已啟用 Azure Arc 的伺服器管理的伺服器,請遵循下列步驟,從伺服器移除任何 VM 擴充功能、中斷代理程式連線,以及從伺服器卸載軟體。 請務必完成上述所有步驟,以從您的系統完全移除所有相關的軟體元件。

移除 VM 延伸模組

如果您已將 Azure VM 擴充功能部署至已啟用 Azure Arc 的伺服器,您必須先卸載所有擴充功能,才能中斷代理程式或卸載軟體。 卸載 Azure 連線機器代理程式不會自動移除擴充功能,而且如果您將伺服器重新連線至 Azure Arc,將無法辨識這些擴充功能。

如需如何列出及移除已啟用 Azure Arc 之伺服器上任何延伸模組的指引,請參閱下列資源:

中斷伺服器與 Azure Arc 的連線

從伺服器移除所有擴充功能之後,下一個步驟是中斷代理程序連線。 這樣做會刪除伺服器的對應 Azure 資源,並清除代理程式的本機狀態。

若要中斷代理程式的連線,請以系統管理員身分在伺服器上執行 azcmagent disconnect 命令。 系統會提示您使用有權刪除訂用帳戶中資源的 Azure 帳戶登入。 如果已在 Azure 中刪除資源,請傳遞額外的旗標以清除本機狀態: azcmagent disconnect --force-local-only

如果您的系統管理員和 Azure 帳戶不同,您可能會遇到登入提示預設為系統管理員帳戶的問題。 若要解決這些問題,請 azcmagent disconnect --use-device-code 執行 命令。 系統會提示您使用有權刪除資源的 Azure 帳戶登入。

謹慎

當將代理程式與在 Azure 本機上執行的 Arc 已啟用 VM 中斷連線時,只使用 azcmagent disconnect --force-local-only 命令。 在沒有使用--force-local-only旗標的情況下使用命令,可能會導致 Azure Local 上的 Arc VM 同時從 Azure 和內部部署中刪除。

卸載代理程式

最後,您可以從伺服器移除連線的計算機代理程式。

下列兩種方法都會移除代理程式,但不會移除計算機上的 C:\Program Files\AzureConnectedMachineAgent 資料夾。

從控制台解除安裝

請遵循下列步驟,從電腦卸載 Windows 代理程式:

  1. 使用具有系統管理員權限的帳戶登入電腦。
  2. [控制面板] 中,選取 [ 程式和功能]。
  3. [程式和功能] 中,選取 [Azure 連線機器代理程式],選取 [ 卸載],然後選取 [ ]。

您也可以直接從代理程式安裝精靈刪除 Windows 代理程式。 執行 AzureConnectedMachineAgent.msi 安裝程式套件來執行此動作。

從命令列解除安裝

您可以依照下列範例,從命令提示字元或使用自動化方法(例如腳本)手動卸載代理程式。 首先,您需要從作業系統擷取產品代碼,這是一個 GUID,為應用程式套件的主要識別碼。 解除安裝是使用 Msiexec.exe 命令列 - msiexec /x {Product Code} 來執行。

  1. 開啟註冊表 編輯器 。

  2. 在登錄機碼 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall下,尋找並複製產品名稱 GUID。

  3. 使用 Msiexec 卸載代理程式,如下列範例所示:

    • 從命令列輸入下列命令:

      msiexec.exe /x {product code GUID} /qn
      
    • 您可以使用 PowerShell 來執行相同的步驟:

      Get-ChildItem -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall | `
      Get-ItemProperty | `
      Where-Object {$_.DisplayName -eq "Azure Connected Machine Agent"} | `
      ForEach-Object {MsiExec.exe /x "$($_.PsChildName)" /qn}
      

更新或移除 Proxy 設定

若要將代理程式設定為透過 Proxy 伺服器與服務通訊,或在部署後移除此組態,請使用此處所述的其中一種方法。 代理程式會使用此案例下的 HTTP 通訊協定來通訊輸出。

您可以使用azcmagent config指令或系統環境變數來配置 Proxy 設定。 如果在代理程式組態和系統環境變數中指定 Proxy 伺服器,代理程式組態會優先,並成為有效的設定。 使用 azcmagent show 來檢視代理程式的有效 Proxy 組態。

備註

已啟用 Azure Arc 的伺服器不支援使用 Log Analytics 閘道作為 Connected Machine 代理程式的 Proxy。

代理程式特定的 Proxy 設定

代理程式特定的 Proxy 組態是設定 Proxy 伺服器設定的慣用方式。 從 Azure Connected Machine 代理程式 1.13 版開始,即可使用此方法。 使用代理程式特定的 Proxy 組態有助於防止 Azure Connected Machine 代理程式的 Proxy 設定干擾您系統上的其他應用程式。

備註

部署至已啟用 Azure Arc 的伺服器的某些延伸模組不會繼承代理程式特定的 Proxy 設定。 如需延伸模組的 Proxy 設定指引,請參閱您部署之每個延伸模組的文件。

若要設定代理程式以透過 Proxy 伺服器進行通訊,請執行下列命令:

azcmagent config set proxy.url "http://ProxyServerFQDN:port"

如果您的網路需要,您可以使用 IP 位址或簡短的主機名稱來取代 FQDN。 如果您的 Proxy 伺服器在連接埠 80 上執行,您可以在結尾省略 ":80"。

若要檢查代理程式設定中是否已設定 Proxy 伺服器 URL,請執行下列命令:

azcmagent config get proxy.url

若要停止代理程式透過 Proxy 伺服器進行通訊,請執行下列命令:

azcmagent config clear proxy.url

您使用 azcmagent config 命令重新設定代理伺服器設定時,不需要重新啟動任何服務。

私人端點的 Proxy 略過

從代理程式 1.15 版開始,您也可以指定 不應該 使用指定 Proxy 伺服器的服務。 這可協助進行分割網路設計和私人端點案例,其中您想要Microsoft Entra ID 和 Azure Resource Manager 流量透過 Proxy 伺服器到公用端點,但您想要 Azure Arc 流量略過 Proxy,並與網路上的私人 IP 地址通訊。

Proxy 略過功能不需要您輸入特定 URL 以略過。 相反地,您會提供任何不應該使用 Proxy 伺服器的服務名稱。 location 參數是指已啟用Arc之伺服器的 Azure 區域。

當設定為 ArcData 時,Proxy 略過值只會略過 SQL Server 的 Azure 延伸模組流量,而不會略過 Arc 代理程式。

Proxy 略過值 受影響的端點
AAD login.windows.net
login.microsoftonline.com
pas.windows.net
ARM management.azure.com
AMA global.handler.control.monitor.azure.com
<virtual-machine-region-name>.handler.control.monitor.azure.com
<log-analytics-workspace-id>.ods.opinsights.azure.com
management.azure.com
<virtual-machine-region-name>.monitoring.azure.com
<data-collection-endpoint>.<virtual-machine-region-name>.ingest.monitor.azure.com
Arc his.arc.azure.com
guestconfiguration.azure.com
ArcData 1 *.<region>.arcdataservices.com

1 從 Azure Connected Machine 代理程式 1.36 版和適用於 SQL Server 1.1.2504.99 版的 Azure 擴充功能開始,即可取得 Proxy 略過值 ArcData 。 舊版在 "Arc" Proxy 略過值中包含 Azure Arc 端點所啟用的 SQL Server。

若要透過 Proxy 伺服器傳送Microsoft Entra ID 和 Azure Resource Manager 流量,但略過 Azure Arc 流量的 Proxy,請執行下列命令:

azcmagent config set proxy.url "http://ProxyServerFQDN:port"
azcmagent config set proxy.bypass "Arc"

若要提供服務清單,請以逗號分隔服務名稱:

azcmagent config set proxy.bypass "ARM,Arc"

若要清除 Proxy 略過內容,請執行下列命令:

azcmagent config clear proxy.bypass

您可以執行 azcmagent show來檢視有效的 Proxy 伺服器和 Proxy 略過設定。

Windows 環境變數

在 Windows 上,Azure Connected Machine 代理程式會先檢查 proxy.url 代理程式組態屬性(從代理程式 1.13 版開始),然後檢查整個 HTTPS_PROXY 系統的環境變數,以判斷要使用的 Proxy 伺服器。 如果兩者都是空的,即使已設定預設的 Windows 全系統 Proxy 設定,也不會使用 Proxy 伺服器。

我們建議使用代理程式特定的 Proxy 組態,而不是系統環境變數。

若要設定 Proxy 伺服器環境變數,請執行下列命令:

# If a proxy server is needed, execute these commands with the proxy URL and port.
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://ProxyServerFQDN:port", "Machine")
$env:HTTPS_PROXY = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY", "Machine")
# For the changes to take effect, the agent services need to be restarted after the proxy environment variable is set.
Restart-Service -Name himds, ExtensionService, GCArcService

若要設定代理程式停止透過 Proxy 伺服器通訊,請執行下列命令:

[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "Machine")
$env:HTTPS_PROXY = [System.Environment]::GetEnvironmentVariable("HTTPS_PROXY", "Machine")
# For the changes to take effect, the agent services need to be restarted after the proxy environment variable removed.
Restart-Service -Name himds, ExtensionService, GCArcService

Linux 環境變數

在Linux上,Azure Connected Machine 代理程式會先檢查 proxy.url 代理程式組態屬性(從代理程式 1.13 版開始),然後 HTTPS_PROXY 為 himds、GC_Ext 和 GCArcService 精靈設定環境變數。 包含的腳本會設定 systemd 的預設 Proxy 設定,讓機器上的 Azure 連線機器代理程式和其他所有服務都使用指定的 Proxy 伺服器。

若要設定代理程式以透過 Proxy 伺服器進行通訊,請執行下列命令:

sudo /opt/azcmagent/bin/azcmagent_proxy add "http://ProxyServerFQDN:port"

若要移除環境變數,請執行下列命令:

sudo /opt/azcmagent/bin/azcmagent_proxy remove

從環境變數移轉至代理程式特定的 Proxy 組態

如果您已經使用環境變數來設定 Azure Connected Machine 代理程式的 Proxy 伺服器,而且您想要根據本機代理程式設定移轉至代理程式特定的 Proxy 組態,請遵循下列步驟:

  1. 將 Azure Connected Machine 代理程序升級 至最新版本。

  2. 執行 azcmagent config set proxy.url "http://ProxyServerFQDN:port",以 Proxy 伺服器資訊來設定代理程式。

  3. 遵循 WindowsLinux 的步驟,移除未使用的環境變數。

重新命名已啟用 Azure Arc 的伺服器資源

當您變更連線至已啟用 Azure Arc 的伺服器之 Linux 或 Windows 電腦的名稱時,不會自動辨識新名稱,因為 Azure 中的資源名稱是不可變的。 如同其他 Azure 資源,若要使用新名稱,您必須刪除 Azure 中的資源,然後重新建立該資源。

針對已啟用 Azure Arc 的伺服器,在重新命名機器之前,您必須移除 VM 擴充功能:

  1. 列出電腦上安裝的 VM 擴充功能,並使用 Azure 入口網站、 Azure CLIAzure PowerShell 來記下其設定。

  2. 使用 Azure 入口網站、 Azure CLIAzure PowerShell 移除電腦上安裝的所有 VM 擴充功能。

  3. 使用 azcmagent 工具搭配 Disconnect 參數,中斷機器與 Azure Arc 的連線,並刪除 Azure 中的機器資源。 您可以在互動式登入 (使用 Microsoft 身分識別存取權杖服務主體) 時手動執行此工具。

    將機器與已啟用 Azure Arc 的伺服器中斷連線並不會移除 Connected Machine 代理程式,而且您不需要在此流程中移除代理程式。

  4. 使用已啟用 Azure Arc 的伺服器重新註冊連線的電腦代理程式。 使用 azcmagent 參數執行 工具,以完成此步驟。 代理程式預設為使用計算機的目前主機名,但您可以將 參數傳遞 --resource-name 至 connect 命令,以選擇自己的資源名稱。

  5. 從已啟用 Azure Arc 的伺服器重新部署原本部署至機器的 VM 延伸模組。 如果您使用 Azure 原則定義部署適用於 VM 的 Azure 監視器 (insights) 代理程式,則會在下一個 評估週期之後重新部署代理程式。

調查已啟用 Azure Arc 的伺服器中斷連線的情況

Connected Machine 代理程式每五分鐘會將定期活動訊號訊息傳送至 Azure。 如果 Arc 啟用伺服器停止傳送心跳信號至 Azure 超過 15 分鐘,這可能表示該伺服器已離線、網路連線遭到封鎖,或代理程式未執行。

制定回應和調查這些事件的計劃,包括設定資源健康情況警示,以在這類事件發生時收到通知。 如需詳細資訊,請參閱 在 Azure 入口網站中建立資源健康狀態警示

移除過時的伺服器資源

如果伺服器在未乾淨移除代理程式的情況下被停用或斷線,該資源通常仍會以「斷線」狀態留在 Azure 入口網站中。 隨著時間推移,這些陳舊的資源會讓你的環境變得雜亂。

以下的 PowerShell 腳本允許您識別並刪除已斷線若干天數的 Azure Arc 啟用伺服器。

先決條件

  • Azure PowerShell:已安裝的 Az 模組。
  • 權限:具備讀者權限的使用者可以透過 Azure 資源圖進行查詢,而具備貢獻者或擁有者(或 Microsoft.HybridCompute/machines/delete)權限的使用者可以刪除資源。

清理腳本

這個腳本使用 Azure 資源圖來查詢Microsoft.HybridCompute/machines狀態且DisconnectedlastStatusChange時間戳記比設定閾值還舊的資源。

將下列程式碼儲存為 Cleanup-StaleArcServers.ps1

<#
.SYNOPSIS
    Identifies and removes stale Azure Arc-enabled servers that have been disconnected for a specified number of days.

.DESCRIPTION
    This script queries Azure Resource Graph to find Azure Arc-enabled servers (Microsoft.HybridCompute/machines)
    that have a status of 'Disconnected' and have not updated their status for more than the specified number of days.
    It supports a -WhatIf parameter to preview the resources that would be deleted.

.PARAMETER DaysDisconnected
    The number of days a server must be disconnected to be considered stale. Default is 60.

.PARAMETER Scope
    Optional. The scope to query (e.g., a specific Subscription ID or Management Group ID). 
    If not specified, queries all subscriptions the current context has access to.

.PARAMETER WhatIf
    If specified, the script will only list the resources specifically targeting for deletion without actually deleting them.

.EXAMPLE
    .\Cleanup-StaleArcServers.ps1 -DaysDisconnected 60 -WhatIf
    Lists Arc servers disconnected for more than 60 days.

.EXAMPLE
    .\Cleanup-StaleArcServers.ps1 -DaysDisconnected 90
    Permanently deletes Arc servers disconnected for more than 90 days.

.NOTES
    Author: Microsoft
    Date: 2026-01-12
    Requires: Az.ResourceGraph, Az.Resources
#>

param (
    [int]$DaysDisconnected = 60,
    
    [string]$Scope,

    [switch]$WhatIf
)

# Check for Azure connection
try {
    $context = Get-AzContext -ErrorAction Stop
    Write-Host "Connected to Azure context: $($context.Name)" -ForegroundColor Cyan
}
catch {
    Write-Error "Not connected to Azure. Please run 'Connect-AzAccount' first."
    exit
}

# Construct the KQL query
# We look for resources of type hybridcompute/machines
# Status must be Disconnected
# lastStatusChange must be older than $DaysDisconnected
$kqlQuery = @"
Resources
| where type == 'microsoft.hybridcompute/machines'
| where properties.status == 'Disconnected'
| where properties.lastStatusChange < ago($($DaysDisconnected)d)
| project id, name, resourceGroup, subscriptionId, location, status = properties.status, lastStatusChange = properties.lastStatusChange
"@

Write-Host "Searching for Arc servers disconnected for more than $DaysDisconnected days..." -ForegroundColor Yellow

# Execute Search
$params = @{
    Query = $kqlQuery
}

if (-not [string]::IsNullOrWhiteSpace($Scope)) {
    $params.Add('Scope', $Scope)
}

try {
    $staleServers = Search-AzGraph @params -ErrorAction Stop
}
catch {
    Write-Error "Failed to query Azure Resource Graph. Ensure resource graph module is installed and you have read permissions.`nError: $_"
    exit
}

if ($staleServers.Count -eq 0) {
    Write-Host "No stale Arc servers found matching the criteria." -ForegroundColor Green
    exit
}

Write-Host "Found $($staleServers.Count) stale servers." -ForegroundColor Yellow

# Process results
foreach ($server in $staleServers) {
    $message = "Deleting '$($server.name)' in RG '$($server.resourceGroup)' (Disconnected since: $($server.lastStatusChange))"
    
    if ($WhatIf) {
        Write-Host "[WhatIf] $message" -ForegroundColor Cyan
    }
    else {
        Write-Host $message -ForegroundColor White
        try {
            Remove-AzResource -ResourceId $server.id -Force -ErrorAction Stop
            Write-Host "Successfully deleted '$($server.name)'." -ForegroundColor Green
        }
        catch {
            Write-Error "Failed to delete '$($server.name)'. Error: $_"
        }
    }
}

if ($WhatIf) {
    Write-Host "`n[WhatIf] Run completed. No resources were deleted. Remove -WhatIf to execute deletion." -ForegroundColor Cyan
}
else {
    Write-Host "`nCleanup completed." -ForegroundColor Green
}

如何使用指令碼

  1. 登入 Azure

    打開你的 PowerShell 終端機並登入。

    Connect-AzAccount
    
  2. 進行假設性分析

    先用 -WhatIf 參數執行腳本。 這樣會列出符合條件的伺服器,但不會刪除它們。 此指令會檢查已斷線 60 天或以上的伺服器。

    .\Cleanup-StaleArcServers.ps1 -DaysDisconnected 60 -WhatIf
    

    檢查輸出,確保只列出預期伺服器。

  3. 進行清理

    當你確定要移除的伺服器清單後,請在不使用指令選項的情況下執行腳本。

    .\Cleanup-StaleArcServers.ps1 -DaysDisconnected 60
    

    若要清理較長時間(例如6個月)斷線的伺服器,請增加天數:

    .\Cleanup-StaleArcServers.ps1 -DaysDisconnected 180