
PowerShell에서 Windows 10 잠금 화면 작업을 위해 네임스페이스를 사용하는 방법을 찾고 있던 중 다음 답변을 발견했습니다.https://superuser.com/a/1062551/700258그러나 해당 네임스페이스를 PowerShell로 가져오거나 추가하여 사용하는 방법에 대해서는 아무 것도 알려주지 않습니다. 어셈블리에 대한 참조 DLL 파일을 찾으려고 했지만 해당 파일이 내 컴퓨터에 없었습니다. Windows Desktop Extensions API의 일부인 것을 보고 Windows 10 SDK를 다운로드했지만 DLL 파일도 그 안에 없었습니다. PowerShell 스크립트에서 Windows.System.UserProfile 네임스페이스의 이 LockScreen 클래스를 어떻게 사용할 수 있나요?
답변1
먼저 UWP 클래스를 사용하고 싶다고 PowerShell에 알려야 합니다.
[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime] | Out-Null
첫 번째 부분은 클래스 이름이고, 두 번째 부분은 UWP 네임스페이스이며, 세 번째 부분은 UWP 클래스임을 나타냅니다. 유형이 로드된 후 이름으로 유형을 참조할 수 있습니다( [Windows.System.UserProfile.LockScreen]
이 경우 첫 번째 부분만).
다음 비결은 Windows 런타임 메서드가 비동기적이며 .NET Framework 메서드와 다른 비동기 작업 클래스를 사용한다는 것입니다. PowerShell에서 호출하려면 원래 개발했던 약간의 추가 인프라가 필요합니다.또 다른 답변:
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
$netTask.Wait(-1) | Out-Null
$netTask.Result
}
Function AwaitAction($WinRtAction) {
$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and !$_.IsGenericMethod })[0]
$netTask = $asTask.Invoke($null, @($WinRtAction))
$netTask.Wait(-1) | Out-Null
}
Await
IAsyncOperation
를 반환하는 함수 , 즉 값을 생성하는 함수 를 호출하는 데 사용할 수 있습니다 . WinRT 작업 개체와 출력 유형을 사용합니다. 를 반환하는 함수 , 즉 결과를 반환하지 않고 작업만 수행하는 AwaitAction
함수를 호출하는 데 사용할 수 있습니다 . IAsyncAction
WinRT 작업 개체만 사용됩니다.
이 애플리케이션에는 다음이 필요합니다.StorageFile
접근 가능한 유형도 있습니다:
[Windows.Storage.StorageFile,Windows.Storage,ContentType=WindowsRuntime] | Out-Null
이제 몇 가지 함수 호출을 시작할 수 있습니다. 먼저 우리는GetFileFromPathAsync
IStorageFile
원하는 잠금 화면 이미지의 인스턴스를 얻으려면 :
$image = Await ([Windows.Storage.StorageFile]::GetFileFromPathAsync('C:\path\to\image.ext')) ([Windows.Storage.StorageFile])
마지막으로 해당 이미지를SetImageFileAsync
잠금 화면 배경을 설정하려면:
AwaitAction ([Windows.System.UserProfile.LockScreen]::SetImageFileAsync($image))
변경사항은 즉시 적용됩니다.