[英]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.