0

我是 PowerShell 的新手,并且一直在努力将以下 C# 代码转换为 Powershell。

var vmDoc = XDocument.Load(vmStream);
var vmElement = vmDoc.Descendants(ns + "entry")
        .Descendants(ns + "content");
var vmId = vmElement.Descendants().Descendants(nsData + "VirtualMachineID").FirstOrDefault();

我试过下面的代码,但它从来没有奏效

$vmElement = vmDoc.Descendants(ns + "entry")
    $_.Descendants($ns + "content")
$vmId = $vmElement.Descendants().Descendants($nsData + "VirtualMachineID").FirstOrDefault()

希望有人可以帮助我!!

提前致谢!

拉玛尼

4

1 回答 1

2

看起来您只是误解了 C# 中的换行符。换行符没有任何意义,为了便于阅读,通常将长行延续到另一行。您$_在第 3 行错误地使用了 powershell“此管道”变量。

$vmElement = vmDoc.Descendants(ns + "entry").Descendants($ns + "content")
$vmId = $vmElement.Descendants().Descendants($nsData + "VirtualMachineID").FirstOrDefault()

编辑:查看了该方法的文档后Descendants,尚不清楚您的原始 C# 代码是否也可以工作。该方法返回一个IEnumerable<XElement>不会公开方法的Descendants()方法。

我建议您在尝试转换为 Powershell 之前专注于获取有效的 C# 代码。

这可能会对您有所帮助:在 Powershell v2 中使用扩展方法是否有更简单的方法
而这个:http ://dougfinke.com/blog/index.php/2007/08/07/using-xmllinq-in-powershell/

于 2012-05-15T14:27:10.610 回答