【UiPath】実行マシンの情報を取得する（スペック）

# はじめに

この投稿は、RPAツール「UiPath」での 実装例 について記事です。

UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 23日目の投稿でもあります。

企画の内容は [**こちら**](https://note.com/shumpei_w/n/n651cbdbec4e8) 。カレンダーのURLは [**こちら**](http://u0u1.net/sUwZ) です。

https://twitter.com/ShumpeiWatanabe/status/1405168150736359427

# 実行マシンの情報を取得するシリーズ

同様の内容で以下の投稿もあります。参考まで

https://qiita.com/miya_gis/items/a32fe3a64acc8b6b8ef5

https://qiita.com/miya_gis/items/fd6ff3b603d7b297d0a0

# マシンのスペックが知りたいとき

ロボットの実行が上手く行かなかったり、スペックが異常に低いマシンがある場合は、CPUやメモリ等のマシンスペックが知りたくなります。

マシンスペックは「msinfo32」や「dxdiag」で取得するのが有名ですが、同様の情報をUiPathで一覧取得したいと思います。

https://www.dell.com/community/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%A8OS/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%83%85%E5%A0%B1-msinfo-%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95/td-p/6076493

https://www.4gamer.net/weekly/pc_manners/002/pc_manners_002.shtml


# .NETで取得する

標準アクティビティで「マシンスペックを取得」アクティビティ みたいなのがあれば良いのですが、現時点では無いみたいです。

なので、以下に VB.NET で取得するコードを用意しました。（持ち出しやすいように、匿名変数型にしています）

``` VB
func =
	Function() As Dictionary(Of String, Object)
		Dim dic As New Dictionary(Of String, Object)
		Dim ComputerInfo As New Microsoft.VisualBasic.Devices.ComputerInfo()
		dic("MachineName") = System.Environment.MachineName
		dic("OSFullName") = ComputerInfo.OSFullName
		dic("OSVersion") = CType(New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").get()(0),System.Management.ManagementObject).Item("Version").ToString
		dic("Is64BitOperatingSystem") = System.Environment.Is64BitOperatingSystem
		dic("ProcessorName") = CType(New ManagementObjectSearcher("SELECT * FROM Win32_Processor").get()(0),System.Management.ManagementObject).Item("Name").ToString
		dic("ProcessorCount") = System.Environment.ProcessorCount
		dic("TotalPhysicalMemory") = Math.Round(ComputerInfo.TotalPhysicalMemory / 1024 /1024 / 1024).ToString + "GB"
		dic("AvailablePhysicalMemory") = Math.Round(ComputerInfo.AvailablePhysicalMemory / 1024 /1024 / 1024).ToString + "GB"
		dic("InstalledUICulture") = ComputerInfo.InstalledUICulture.DisplayName
		dic("TimeZoneInfo") = System.TimeZoneInfo.Local.DisplayName
		dic("ProductVendor") = CType(New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystemProduct").get()(0),System.Management.ManagementObject).Item("Vendor").ToString
		dic("ProductName") = CType(New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystemProduct").get()(0),System.Management.ManagementObject).Item("Name").ToString
		dic("FrameworkDescription") = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription		
		dic("PrimaryScreenHeight") = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
		dic("PrimaryScreenWidth") = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
		Return dic
	End Function
```

簡単には取れないので、いろいろな所から欲しい情報を集めてきています。
これを、こんな感じのフローで実行すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/4f4c7381-bfa8-08be-800a-1951754550cd.png)

以下のように出力されます。
![67aaaab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/494fbdbd-4428-b0ad-e118-b05e9da247d5.png)


確認しやすいように、以下でxamlを公開しています。

https://github.com/miyag/UiPath.ReusableCode/blob/master/GetMachineSpec/GetComputerInformation.xaml

# 終わりに

いかがでしたでしょうか？実装の参考になれば幸いです。

この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。