Board logo

标题: [问题求助] 求判断progid对应的com组件是否可用的PowerShell [打印本页]

作者: jyswjjgdwtdtj    时间: 2023-6-9 22:33     标题: 求判断progid对应的com组件是否可用的PowerShell

本帖最后由 jyswjjgdwtdtj 于 2024-7-22 10:55 编辑

比如这是progid.txt:
  1. SppComApi.LicensingStateTools.1
  2. SppComApi.OfflineActivation
  3. SppComApi.OfflineActivation.1
  4. SppComApi.OnlineActivation
  5. SppComApi.OnlineActivation.1
  6. SppComApi.SPPLUAObject
  7. SppComApi.SPPLUAObject.1
  8. SPPUI.SPPUIObjectInteractive
  9. SPPUI.SPPUIObjectInteractive.1
  10. SPPWMI.SppWmiTokenActivationSigner
  11. SPPWMI.SppWmiTokenActivationSigner.1
  12. SQLOLEDB
复制代码
其中大部分
  1. (new-object -comobject "soap")|get-member
复制代码
之后
  1.    TypeName:System.__ComObject
  2. Name                      MemberType Definition
  3. ----                      ---------- ----------
  4. CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
  5. Equals                    Method     bool Equals(System.Object obj)
  6. GetHashCode               Method     int GetHashCode()
  7. GetLifetimeService        Method     System.Object GetLifetimeService()
  8. GetType                   Method     type GetType()
  9. InitializeLifetimeService Method     System.Object InitializeLifetimeService()
  10. ToString                  Method     string ToString()
复制代码
都是这么的平平无奇且没有任何暴露的接口
如何找出所有不是这么平平无奇的?
比如shell.application
  1. (new-object -comobject "shell.application")|get-member
  2. TypeName:System.__ComObject#{286e6f1b-7113-4355-9562-96b7e9d64c54}
  3. Name                 MemberType Definition
  4. ----                 ---------- ----------
  5. AddToRecent          Method     void AddToRecent (Variant, string)
  6. BrowseForFolder      Method     Folder BrowseForFolder (int, string, int, Variant)
  7. CanStartStopService  Method     Variant CanStartStopService (string)
  8. CascadeWindows       Method     void CascadeWindows ()
  9. ControlPanelItem     Method     void ControlPanelItem (string)
  10. EjectPC              Method     void EjectPC ()
  11. Explore              Method     void Explore (Variant)
  12. ExplorerPolicy       Method     Variant ExplorerPolicy (string)
  13. FileRun              Method     void FileRun ()
  14. FindComputer         Method     void FindComputer ()
  15. FindFiles            Method     void FindFiles ()
  16. FindPrinter          Method     void FindPrinter (string, string, string)
  17. GetSetting           Method     bool GetSetting (int)
  18. GetSystemInformation Method     Variant GetSystemInformation (string)
  19. Help                 Method     void Help ()
  20. IsRestricted         Method     int IsRestricted (string, string)
  21. IsServiceRunning     Method     Variant IsServiceRunning (string)
  22. MinimizeAll          Method     void MinimizeAll ()
  23. NameSpace            Method     Folder NameSpace (Variant)
  24. Open                 Method     void Open (Variant)
  25. RefreshMenu          Method     void RefreshMenu ()
  26. SearchCommand        Method     void SearchCommand ()
  27. ServiceStart         Method     Variant ServiceStart (string, Variant)
  28. ServiceStop          Method     Variant ServiceStop (string, Variant)
  29. SetTime              Method     void SetTime ()
  30. ShellExecute         Method     void ShellExecute (string, Variant, Variant, Variant, Variant)
  31. ShowBrowserBar       Method     Variant ShowBrowserBar (string, Variant)
  32. ShutdownWindows      Method     void ShutdownWindows ()
  33. Suspend              Method     void Suspend ()
  34. TileHorizontally     Method     void TileHorizontally ()
  35. TileVertically       Method     void TileVertically ()
  36. ToggleDesktop        Method     void ToggleDesktop ()
  37. TrayProperties       Method     void TrayProperties ()
  38. UndoMinimizeALL      Method     void UndoMinimizeALL ()
  39. Windows              Method     IDispatch Windows ()
  40. WindowsSecurity      Method     void WindowsSecurity ()
  41. WindowSwitcher       Method     void WindowSwitcher ()
  42. Application          Property   IDispatch Application () {get}
  43. Parent               Property   IDispatch Parent () {get}
复制代码
  1. foreach($line in Get-Content "ProgID.txt"){
  2. $null =$job = Start-Job -ScriptBlock {
  3. try{
  4. return new-object -comobject $using:line|get-member
  5. }catch{}}
  6. $null =$job | Wait-Job -Timeout 7000
  7. if($job.State -ne 'Completed'){
  8. $null =$job|stop-job|remove-job
  9. continue
  10. }
  11. $c=$job | Receive-Job
  12. if($c -eq $null){continue}
  13. if(($c.length -eq 7) -and ($c[0].Name -eq "CreateObjRef")){
  14. }else{
  15. write-host $line
  16. }
  17. }
复制代码

作者: idwma    时间: 2023-6-10 16:20

  1. gc progid.txt|%{if(!((new-object -comobject $_)|get-member -Name ToString)){$_}}
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2