通过 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 应该 return 字符串格式的值,但我没有得到任何输出。
我想得到类似于我们在 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
它是 true
,则会报告错误。试试这个版本的代码:
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 模块,您可能需要在 PowerShell 代码的开头添加 Import 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 应该 return 字符串格式的值,但我没有得到任何输出。
我想得到类似于我们在 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
它是 true
,则会报告错误。试试这个版本的代码:
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 模块,您可能需要在 PowerShell 代码的开头添加 Import Hyper-V;
)。