适用于C#的PowerShell等效代码

时间:2012-05-15 14:19:52

标签: powershell

我是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()

希望有人可以帮助我!!

提前致谢!

拉​​马尼

1 个答案:

答案 0 :(得分:2)

看起来你刚刚误解了C#中的换行符。换行意味着什么,并且通常长行继续到另一行以便于阅读。你错误地在第3行使用了powershell“this pipeline”变量$_

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

修改:审核了documentation for the Descendants method后,不清楚您的原始C#代码是否也能正常运行。该方法返回IEnumerable<XElement>,不会公开Descendants()方法。

<击>

我建议您在尝试转换为Powershell之前专注于使用C#代码。

这可能会对您有所帮助:Is there an easier way of using extension methods in Powershell v2
这个:http://dougfinke.com/blog/index.php/2007/08/07/using-xmllinq-in-powershell/