c# - 在 Hyper-V VM Powershell C# 上调用命令
问题描述
我正在尝试通过 C#/Powershell 在 Hyper-V 托管 VM 上调用命令,但以各种方式失败。我可以毫无问题地运行各种其他 PS 命令,此外,我还可以直接在 Powershell cmd 中运行 Invoke-Command。
我的主要目标是在虚拟机上运行/执行远程进程。我目前正在使用 {Get-Childitem C:\Windows} 的脚本块来列出目录,只是为了获得一些输出以进行测试。
在 Powershell 中,如果我运行:
Invoke-Command -VMName Windows10 -ScriptBlock {Get-Childitem C:\\Windows}
在提示输入凭据后它可以工作。
我的 C# 代码失败了,我尝试了很多方法来让它工作但无济于事。
public static void Test()
{
var scBlock = ScriptBlock.Create("{Get-Childitem C:\\Windows}");
// Create a PSCredential
var cred = CreateCredential("test", "test");
using (var ps = PowerShell.Create())
{
var initial = InitialSessionState.CreateDefault();
var runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
ps.Runspace = runspace;
ps.AddCommand("Invoke-Command");
ps.AddParameter("VMName", "Windows10");
ps.AddParameter("ScriptBlock", scBlock);
ps.AddParameter("Credential", cred);
ps.Streams.Progress.DataAdded += (sender, ev) =>
{
var progressRecords = (PSDataCollection<ProgressRecord>)sender;
Console.WriteLine("Progress is {0} percent complete",
progressRecords[ev.Index].PercentComplete);
};
ps.Streams.Warning.DataAdded += (sender, ev) =>
{
var warnings = (PSDataCollection<WarningRecord>)sender;
var message = warnings[ev.Index].Message;
Console.WriteLine($"WARNING - {message}");
};
ps.Streams.Error.DataAdded += (sender, ev) =>
{
var error = (PSDataCollection<ErrorRecord>)sender;
var message = error[ev.Index].Exception?.Message;
Console.WriteLine($"ERROR - {message}");
};
try
{
var results = ps.Connect();
foreach (var tPsObject in results)
{
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
我在控制台中收到以下错误:
ERROR - Configuration system failed to initialize
ERROR - The input VMName Windows10 does not resolve to a single virtual machine.
我只在 C# 中使用 Powershell,因为它似乎是管理 Hyper-V 虚拟机的最简单/最常用的方法。
一个附带问题,有没有办法从非提升的过程中运行上述所有内容。例如,我不想以管理员身份运行我的应用程序。
解决方案
推荐阅读
- ios - 如何在 SwiftUI 中拍摄可缩放视图的快照?
- ruby-on-rails - 为 has_many 关联显示设置的字段数时,如何避免在 Accept_nested_attributes_for 中保存 nil/blank?
- scikit-learn - 为什么 sklearn pipeline.set_params() 不起作用?
- java - 使用 Angular 在 Jhipster 上存储用户图像的位置
- python - 自定义窗口打开时如何禁用 Maya 用户界面?
- r - ggplot2中多面填充条形图中的标签百分比
- html - 如何为第一个元素上下文分配默认值?
- python - 如何复制用户的文本?
- javascript - ContentControl 操作减慢 Word Online
- sql - 可配置报表插件,sql查询