2012-01-19 178 views
0

我有一个目录作为命令行参数传递给power shell脚本。我需要递归搜索csprj扩展名的文件,并检查HintPath节点是否出现在Project/ItemGroup/Reference节点下。如果HintPath节点存在,请与价值False和退出,错误代码0命名Private另一个节点的存在可能有多个参考节点的ItemGroup如果存在另一个xml节点,检查是否存在xml节点

是否有可能创建一个电源外壳脚本来做到这一点?下面

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     ToolsVersion="3.5"> 
    <ItemGroup> 
    <Reference Include="IronPython, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\shared\IronPython-1.1\IronPython.dll</HintPath> 
    </Reference> 
    <Reference Include="log4net, Version= ..."> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\binaries\log4net.dll</HintPath> 
     <Private>False</Private> 
    </Reference> 
    </ItemGroup> 
</Project> 

回答

1
gci . -filter *.csproj -recurse | foreach-object { 
    $filename = $_.fullname 
    [xml]$sample = gc $_.fullname 
    $sample.Project.ItemGroup.Reference | 
    select @{N="filename";E={$filename}}, hintpath, private 
} 

示例XML文件中给出应该给你这样的概述:

filename         HintPath        private 
--------         --------        ------- 
C:\users\mytest\desktop\sample1.csproj ..\shared\IronPython-1.1\IronPython.dll   
C:\users\mytest\desktop\sample1.csproj ..\binaries\log4net.dll     False 
C:\users\mytest\desktop\sample2.csproj ..\shared\IronPython-1.1\IronPython.dll   
C:\users\mytest\desktop\sample2.csproj ..\binaries\log4net.dll     False 
相关问题