我正在尝试从多台计算机上的配置文件中获取值。
这是每台计算机上的文件....我试图将\ gm107a \ Updates \ QC与计算机名称一起放入csv文件中。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="updatelocation" value="\\gm107a\Updates\QC"/>
<add key="filename" value="QualityControl.exe"/>
</appSettings>
</configuration>
我发现这让我开始:https://social.technet.microsoft.com/Forums/scriptcenter/en-US/268e03cb-1248-456f-bc89-ecc31cb0489b/powershell-script-to-read-xml-data-from-multiple-remote-computers然后发现这个getting app.config elements in powershell并尝试将它放在一起....记住我是全新的哈哈。
这是我到目前为止所做的:
function vert {
$hostnamenodes = get-content C:\Scripts\Computers.txt
foreach ($hostname in $hostnamenodes) {
[xml]$xml = Get-Content \\$hostname\C$\Drivers\Version.config
#Add hostrecord to array
$MasterArray = New-Object psobject -Property @{
"ServerName" = $hostname
"updatelocation" = $xml.SelectNodes('//add[@key="updatelocation"]/@value')[0].'#text'
}
write-output $masterarray
} }
vert | select servername,updatelocation | Export-Csv QA.csv -NoTypeInformation
这是我得到的错误:
Unable to index into an object of type System.Xml.XPathNodeList.
At C:\Scripts\get-content.ps1:13 char:88
+ "updatelocation" = $xml.SelectNodes('//add[@key="updatelocation"]/@value')[ <<<< 0].'#text'
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
使用下面的解决方案编辑我的脚本后,我现在收到以下错误:
以下是我遇到的新错误:
Unable to index into an object of type System.Xml.XPathNodeList.
At C:\Scripts\get-content.ps1:9 char:92
+ "updatelocation" = $xml.SelectNodes('//add[@key="updatelocation"]/@value')[ <<<< 0].'#text'}
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
答案 0 :(得分:2)
好的尝试了一个不同的方式,它的工作原理!好极了!感谢您的错误检查帮助!!!
"updatelocation" = $xml.configuration.appSettings.add | Where-Object { $_.key -eq 'updatelocation' } | Select-Object -ExpandProperty value
答案 1 :(得分:0)
您的代码可以正常使用提供的Version.config示例(最后错过了结束&#34;&gt;&#34;从错误看起来您正在点击一个空的Version.config文件或者缺少&#34; updatelocation&#34;密钥的文件。应该做一些错误检查...
function vert {
$hostnamenodes = get-content C:\Scripts\Computers.txt
foreach ($hostname in $hostnamenodes) {
if (test-path \\$hostname\C$\Drivers\Version.config){
[xml]$xml = Get-Content \\$hostname\C$\Drivers\Version.config
if ($xml.SelectNodes('//add[@key="updatelocation"]/@value')) {
$MasterArray = New-Object psobject -Property @{
"ServerName" = $hostname
"updatelocation" = $xml.SelectNodes('//add[@key="updatelocation"]/@value')[0].'#text'}
} else {
write-error "Key `"updatelocation`" does not exist"
}
} else {
write-error "File `"Version.config`" does not exist"
}
write-output $masterarray
}
}
vert | select servername,updatelocation | Export-Csv QA.csv -NoTypeInformation