Public/Set-LockScreenWallpaper.ps1

function Set-LockScreenWallpaper {
    <#
    .SYNOPSIS
        Устанавливает кратинку для экрана блокировки.
    .DESCRIPTION
        Устанавливает кратинку для экрана блокировки (пользователь не может сменить её после этого).
    .PARAMETER Path
        Путь к изображению.
    .EXAMPLE
        PS C:\> Set-LockScreenWallpaper -Path C:\Tools\_aux\pic\Wallpaper.jpg
    .NOTES
        На данный момент не проверялись допустимые форматы изображения. Работает с JPEG.
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        [System.String]
        $Path
    )

    begin {
        $RegKeyPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP'
        $LockScreenPathParamName = "LockScreenImagePath"
        $LockScreenStatusParamName = "LockScreenImageStatus"
        $LockScreenUrlParamName = "LockScreenImageUrl"
        $StatusValue = 1
    }

    process {
        try {
            if ($IsLinux) {
                throw [System.Configuration.ConfigurationException]::New('This operation system does not supported.')
            }
            if (-not(Test-Path -Path $RegKeyPath)) {
                Write-Verbose -Message "Создаем раздел реестра $($RegKeyPath)."
                New-Item -Path $RegKeyPath -Force | Out-Null
            }

            $SourceFile = Get-Item -Path $Path
            $LockScreenImageFileName = 'LockScreen' + $SourceFile.Extension
            $LockScreenImageFilePath = Join-Path -Path $Env:SystemRoot -ChildPath $LockScreenImageFileName

            Write-Verbose -Message "Копируем файл изображения из $($Path) в $($LockScreenImageFilePath)."
            Copy-Item -Path $Path -Destination $LockScreenImageFilePath -Force
            Write-Verbose -Message 'Создаем параметры в реесте.'
            New-ItemProperty -Path $RegKeyPath -Name $LockScreenStatusParamName -Value $StatusValue -PropertyType DWORD -Force | Out-Null
            New-ItemProperty -Path $RegKeyPath -Name $LockScreenPathParamName -Value $LockScreenImageFilePath -PropertyType STRING -Force | Out-Null
            New-ItemProperty -Path $RegKeyPath -Name $LockScreenUrlParamName -Value $LockScreenImageFilePath -PropertyType STRING -Force | Out-Null
        }
        catch {
            Write-Error -Exception $PSItem.Exception
        }
    }

    end {

    }
}