有没有办法从PowerShell脚本调用Windows运行时(WinRT)类(或对象)?我知道你可以调用COM对象,WinRT类应该被“暴露”为......但到目前为止我的尝试都失败了......
这是我正在尝试的代码:
$lockscreen = New-Object -comObject Windows.System.UserProfile.LockScreen
这给了我以下错误:
New-Object : Retrieving the COM class factory for component with CLSID {00000000-0000-0000-0000-000000000000} failed
due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
有没有人知道我应该用于WinRT类的正确的“COM类”?
答案 0 :(得分:4)
这是一些似乎有用的hacky:
PS> new-object "Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime"
new-object : Constructor not found. Cannot find an appropriate constructor for type
Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime.
At line:1 char:1
+ new-object "Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,Con ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand
PS> [Windows.System.UserProfile.LockScreen]::OriginalImageFile
AbsolutePath : C:/Windows/Web/Screen/img100.png
AbsoluteUri : file:///C:/Windows/Web/Screen/img100.png
LocalPath : C:\Windows\Web\Screen\img100.png
Authority :
HostNameType : Basic
IsDefaultPort : True
IsFile : True
IsLoopback : True
PathAndQuery : C:/Windows/Web/Screen/img100.png
...
请注意,第一次调用失败,因为LockScreen没有构造函数,但该调用会执行某些操作以获取WinRT投影/元数据,以便您现在可以调用LockScreen类上的静态方法/属性。
免责声明:我没有任何关于此New-Object语法的文档,因此微软完全有可能改变它,因为它本质上是一个“隐藏的”,可能并不完全开发的功能。
答案 1 :(得分:2)
只需引用类型,“加载”程序集......
[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime]
[Windows.System.UserProfile.LockScreen]::OriginalImageFile
如果您不希望在PowerShell结果中返回类型,那么
$null = [Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime]