2025年10月13日、Microsoft は Windows 10 のサポートを正式に終了します。IT管理者やシステム管理者にとって、この期限は単なるカレンダー上の日付以上の意味を持ち、運用上の責任とリスク管理における大きな転換点となります。
Windows 11 へのアップグレードは、セキュリティの強化、パフォーマンスの向上、最新のユーザーエクスペリエンスをもたらしますが、その移行には課題がないわけではありません。Windows 10 デバイスに依然として大きく依存している組織にとって、今後数ヶ月間は極めて重要となるでしょう。
Windows 10 のサポート終了は、ITチームにとって明確な緊急性を生み出します。大規模なオペレーティングシステムアップグレードの計画には、以下の事項が含まれます。
これらのタスクは急速に増大し、IT管理者の作業負荷を増やし、すでに限られたリソースをさらに圧迫する可能性があります。
通常の勤務時間中にアップグレードを行うことは、ほとんど選択肢になりません。従業員のアクティブなセッションを中断すると、生産性の低下、未保存の作業、そして不満につながる可能性があります。結果として、ほとんどのITチームは、深夜、週末、または祝日といった営業時間外にアップグレードをスケジュールせざるを得ず、リソース管理をさらに困難にしています。
アップグレードを怠る組織は、以下のような重大なリスクに直面します。
幸いなことに、自動化は手作業による負担の多くを軽減するのに役立ちます。PowerShell スクリプトを使用することで、IT管理者は複数のマシンにわたる Windows 10 から 11 へのアップグレードを標準化し、スケジュール設定できます。これにより、時間を節約し、エラーを減らすことができます。
以下は、お使いの環境でアップグレードを実行するために使用できる PowerShell スクリプトのプレースホルダーセクションです。
# Define the log file path
$logFilePath = "C:\Windows11UpgradeLog.txt"
# Create a temporary download folder
$tempFolder = "C:\Windows11UpgradeTemp"
if (-Not (Test-Path $tempFolder)) {
New-Item -ItemType Directory -Path $tempFolder | Out-Null
}
# Define file download locations
$installAssistantUrl = "https://go.microsoft.com/fwlink/?linkid=2171764" # Updated link
$isoDownloadUrl = "https://www.microsoft.com/en-us/software-download/windows11"
# Define local file paths
$installAssistantPath = "$tempFolder\Windows11InstallationAssistant.exe"
$isoDownloadPath = "$tempFolder\Windows11ISO.html" # Save the link since ISO download requires interaction
# Function to log messages with a timestamp
function Log-Message {
param (
[string]$message
)
# Append the message with a timestamp to the log file
"$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) - $message" | Out-File -FilePath $logFilePath -Append
}
# Check for 64-bit architecture CPU
try {
$cpu = Get-CimInstance Win32_Processor
if ($cpu.AddressWidth -eq 64) {
Log-Message "CPU architecture is 64-bit: true"
} else {
Log-Message "CPU architecture is 64-bit: false"
}
} catch {
Log-Message "Failed to retrieve CPU architecture information."
}
# Check for TPM 2.0
$TPM_Enabled = $false
try {
$tpm = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
if ($tpm.SpecVersion -like "2.0*") {
Log-Message "TPM 2.0 is enabled: true"
$TPM_Enabled = $true
} else {
Log-Message "TPM 2.0 is enabled: false"
}
} catch {
Log-Message "Failed to retrieve TPM information."
}
# Check for Secure Boot
$SecureBoot_Enabled = $false
try {
$secureBoot = Confirm-SecureBootUEFI
if ($secureBoot) {
Log-Message "Secure Boot is enabled: true"
$SecureBoot_Enabled = $true
} else {
Log-Message "Secure Boot is enabled: false"
}
} catch {
Log-Message "Failed to retrieve Secure Boot status."
}
# If TPM 2.0 or Secure Boot is missing, cancel the upgrade
if (-not $TPM_Enabled -or -not $SecureBoot_Enabled) {
Log-Message "System does not meet Windows 11 requirements (TPM 2.0 or Secure Boot missing). Upgrade cancelled."
Exit
}
# Function to download the Windows 11 Installation Assistant
function Download-InstallationAssistant {
try {
Log-Message "Downloading Windows 11 Installation Assistant..."
Invoke-WebRequest -Uri $installAssistantUrl -OutFile $installAssistantPath
Log-Message "Download completed: $installAssistantPath"
} catch {
Log-Message "Failed to download Windows 11 Installation Assistant."
}
}
# Function to save the Windows 11 ISO download link
function Save-ISO-DownloadLink {
try {
Log-Message "Saving Windows 11 ISO download link..."
"<html><body><a href='$isoDownloadUrl'>Download Windows 11 ISO</a></body></html>" | Out-File -FilePath $isoDownloadPath
Log-Message "ISO download link saved to: $isoDownloadPath"
}
catch {
Log-Message "Failed to save Windows 11 ISO download link."
}
}
# Function to install the Windows 11 Installation Assistant
function Install-InstallationAssistant {
try {
# Define the arguments
$arguments = "/QuietInstall /SkipEULA /Auto Upgrade /ShowProgressInTaskBarIcon"
Log-Message "Starting Windows 11 Installation Assistant with arguments: $arguments"
# Start the installation assistant with the defined arguments
$process = Start-Process -FilePath $installAssistantPath -ArgumentList $arguments -PassThru -NoNewWindow
# Immediately log the process ID after starting the process
Log-Message "Windows 11 Installation Assistant started with ID: $($process.Id)"
# Wait for the process to exit
$process.WaitForExit()
# Check if the process has exited and log the exit code
if ($process.HasExited) {
Log-Message "Windows 11 Installation Assistant process has exited with code: $($process.ExitCode)"
}
} catch {
Log-Message "Failed to start Windows 11 Installation Assistant. Error: $_"
}
}
# Check if the Installation Assistant is already downloaded
if (Test-Path $installAssistantPath) {
Log-Message "Windows 11 Installation Assistant is already downloaded."
} else {
Download-InstallationAssistant
}
# Save the ISO download link
Save-ISO-DownloadLink
# Run the installation assistant
if (Test-Path $installAssistantPath) {
Install-InstallationAssistant
} else {
Log-Message "Installation Assistant not found, skipping installation."
}
Log-Message "Script execution completed."
Windows 10 から Windows 11 への移行は、単なる技術的な必要性だけでなく、組織のセキュリティと効率性を保護するための戦略的な一歩です。今から準備することで、IT管理者はサポート期限が到来する前に、中断を最小限に抑え、スムーズな移行を確実にすることができます。
Monitic RMM を使用してこのスクリプトを一括展開し、Windows 11 への移行を完了できることをご存知でしたか? https://www.monitic.com
Latest Blog
Monitic provides end-to-end tracking, analysis and data protection services for your company.“