Attempting to get this working on powershell core...
Closed this issue · 1 comments
xdhmoore commented
I've been trying to figure out how to get this working on powershell core. It looks like they don't include the WinRT assembly in powershell anymore. I guess the answer is to use a nuget package ( this one, maybe? ), but I haven't had much luck yet...
xdhmoore commented
Nevermind, I got it working:
function Set-LockscreenWallpaper($path) {
$PROJ_DIR="$(Get-Item (Get-item $PSCommandPath).DirectoryName)"
# Added these two dlls scraped from here, which seem to work:
# Microsoft.Windows.SDK.NET.Ref.10.0.19041.12\lib ?
# https://github.com/Windos/BurntToast/tree/c7c0cfe239f94e0a567159256125548ebb9c08b9/BurntToast/lib/Microsoft.Windows.SDK.NET
# According to the discussion here:
# https://github.com/PowerShell/PowerShell/issues/13042
Add-Type -Path $($PROJ_DIR + "\Microsoft.Windows.SDK.NET.dll")
Add-Type -Path $($PROJ_DIR + "\WinRT.Runtime.dll")
# This is modified to be .net core and use the above two libraries as well
Add-Type -Path $($PROJ_DIR + "\PoshWinRTCore.dll")
$asyncOp = [Windows.Storage.StorageFile]::GetFileFromPathAsync($path)
$typeName = 'PoshWinRTCore.AsyncOperationWrapper[Windows.Storage.StorageFile]'
$wrapper = new-object $typeName -Arg $asyncOp
$file = $wrapper.AwaitResult()
$asyncOp = [Windows.System.UserProfile.LockScreen]::SetImageFileAsync($file)
$typeName = 'PoshWinRTCore.AsyncActionWrapper'
$wrapper = new-object $typeName -Arg $asyncOp
$wrapper.AwaitResult()
}