[Google Pixel 2 XL Questions & Answers] leeisme:
I stumbled across this post after having several issues trying to get my Pixel 2 XL flashed with a custom ROM (constantly resulting in boot-loops), and the steps worked perfectly.

I've ended up running these steps several times today, but I like keeping all of my stock images in sub-folders by release date. I'm not the greatest Powershell guru, but I've written a script that will search sub-directories in a folder for dates, and select the latest date and automatically flash the radio, bootloader, and image from that directory using your steps.

clear;

# Execution Policy must be adjusted in order to obtain the current executing directory of the script. This is a one-time command that must be run separately.
# Set-ExecutionPolicy RemoteSigned
# To reverse the command set the execution policy to restricted:
# Set-ExecutionPolicy Restricted
# The root directory which contains date sub-folders in the format yyyy-MM-dd representing an extracted OTA zip.
$startingDirectory = split-path -parent $MyInvocation.MyCommand.Definition;
# Alternatively, hard code a starting directory.
# [System.String]$startingDirectory = 'D:\Flashing\Roms\Taimen\Stock\';
[System.String]$targetFolder = (Get-ChildItem $startingDirectory | Select-Object -Property @{Name='Date';Expression = { Get-Date $_.Name -Format 'yyyy-MM-dd' }}, @{Name='FullName';Expression= {$_.FullName}} | Sort Date -Descending | Select -First 1).FullName;
if (-not $targetFolder) {
throw 'No folders are located in directory ''' + $startingDirectory + ''' with the date format yyyy-MM-dd.';
}

[System.String]$bootloader = Get-ChildItem $targetFolder -Name 'bootloader-*.img';
[System.String]$radio = Get-ChildItem $targetFolder -Name 'radio-*.img';
[System.String]$image = Get-ChildItem $targetFolder -Name 'image-*.zip';

# Validate all files have been successfully located.
[System.Collections.Generic.List[System.String]]$messages = [System.Collections.Generic.List[System.String]]::new();
if (-not $bootloader) {
$messages.Add('The bootloader file was not located.');
}

if (-not $radio) {
$messages.Add('The radio file was not located.');
}

if (-not $image) {
$messages.Add('The image file was not located.');
}

if ($messages.Length -gt 0) {
throw 'Unable to locate files in path ''' + $targetFolder + ''':' + [Environment]::NewLine + [System.String]::Join([Environment]::NewLine, $messages);
}

$bootloader = [System.IO.Path]::Combine($targetFolder, $bootloader);
$bootloader;
$radio = [System.IO.Path]::Combine($targetFolder, $radio);
$radio;
$image = [System.IO.Path]::Combine($targetFolder, $image);
$image;

#adb reboot bootloader;

function Reboot-Bootloader {
fastboot reboot-bootloader;
sleep 5;
}

#flashing bootloader to slot A and slot B
'Flashing bootloader to slot A.'
Reboot-Bootloader;
fastboot flash bootloader_a $bootloader;
'Flashing bootloader to slot B.'
Reboot-Bootloader;
fastboot flash bootloader_b $bootloader;

#flashing radio to slot A and slot B
'Flashing radio to slot A.'
Reboot-Bootloader;
fastboot flash radio_a $radio;
'Flashing radio to slot B.'
Reboot-Bootloader;
fastboot flash radio_b $radio;

#set active slot to B, flash system image
'Flashing system image to slot B.'
fastboot --set-active=b;
Reboot-Bootloader;
fastboot --skip-reboot --skip-secondary update $image;

#set active slot to A, flash system image [different command!!!]
'Flashing system image to slot A.'
fastboot --set-active=a;
Reboot-Bootloader;
fastboot --skip-reboot update $image;