簡體   English   中英

通過 C# (Hyper-V) 在 PowerShell 中獲取虛擬機名稱

[英]Get Virtual Machine names in PowerShell via C# (Hyper-V)

我正在嘗試使用以下代碼從本地 Hyper-V 服務器獲取虛擬機名稱列表:

string _scr = ("Get-VM | Select -ExpandProperty Name");
var _ps = PowerShell.Create();
_ps.AddScript(_scr);
Collection<PSObject> _cObj = _ps.Invoke();
foreach (PSObject _vm in _cObj)
{
    Console.WriteLine(_vm);
}

Get-VM cmdlet 應該已經以字符串格式返回值,但我沒有得到任何輸出。

我想得到類似於我們在 PowerShell 中得到的以下輸出的結果:

PS C:\> Get-VM | Select -ExpandProperty Name
VM-Name1
VM-Name2
VM-Name3
VM-Name4
PS C:\>

任何人都可以幫我解決這個問題嗎?

太感謝了。

艾達

Get-VM 僅適用於以管理員身份運行的 PowerShell 會話。 當我嘗試以管理員身份運行您的 C# 代碼時,它確實會打印 VM 名稱。

當我在沒有管理員權限的情況下嘗試時,我沒有任何輸出,與您一樣 - 但是如果您檢查_ps.HadErrors it _ps.HadErrors true _ps.HadErrors報告錯誤。 試試這個版本的代碼:

string _scr = ("Get-VM | Select -ExpandProperty Name");
var _ps = PowerShell.Create();
_ps.AddScript(_scr);
Collection<PSObject> _cObj = _ps.Invoke();

if (_ps.HadErrors) {
    Console.WriteLine(_ps.Streams.Error[0].ToString());
}

foreach (PSObject _vm in _cObj)
{
    Console.WriteLine(_vm);
}

我收到“您沒有完成此任務所需的權限。請聯系計算機 {name} 的授權策略管理員”,您可能會收到另一個錯誤消息,讓您知道發生了什么問題。

(另一個考慮因素,如果 Hyper-V 模塊未自動加載,您可能需要Import Hyper-V;在 PowerShell 代碼的開頭)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM