Sauler/PowershellUtils

Attempting to get this working on powershell core...

Closed this issue · 1 comments

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...

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()
}