我创建了一个脚本来遍历我们的用户目录并修改和XML文档以更改应用程序中的设置。通常当我使用foreach
它会使我的变量=集合中的一个项目。相反,这个脚本将所有从$XMLPaths
到我的$Path
变量。使用Powershell使用Foreach修改多个XML文档
$XMLPaths = Get-ChildItem \\DFSRoot\DFSShare\view\Profiles\*\AppData\Roaming\Trillian\ -Recurse -Force |
Where-Object {$_.Name -contains 'Events.xml'} |
Select FullName |
FT -HideTableHeaders |
Out-String
foreach ($Path in $XMLPaths) {
$xml = [xml](Get-Content $Path)
$node = $xml.events.prefs.setting | Where {$_.Name -eq 'Sounds'}
$node.value = '1'
$XML.Save($Path)
$Path
$node
}
这是我使用的XML文档。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE events
PUBLIC "--//IETF//DTD RFCxxxx XEVENTS 1.0//EN" "xevents.dtd">
<!-- WARNING: This is a generated file by Trillian. Do not update while -->
<!-- Trillian is running otherwise updates will be erased -->
<events>
<version>1.0</version>
<Prefs>
<setting name="idle" value="1"/>
<setting name="sounds" value="1"/>
<setting name="sounds_away" value="1"/>
<setting name="sounds_suppress" value="1"/>
<setting name="automatic_outbound" value="1"/>
<setting name="hide_disabled" value="1"/>
<setting name="video_capture" value="1"/>
<setting name="buzz_sound" value="1"/>
<setting name="game_status" value="0"/>
<setting name="awaymessage_song" value="0"/>
<setting name="awaymessage_autosave" value="1"/>
<setting name="awaymessage_update2" value="1"/>
<setting name="away_autoresponse" value="0"/>
</Prefs>
<AwayList>
<AwayGroup name="Root">
<AwayMessage label="Set%20all%20Do%20Not%20Disturb" text="" awayState="1" awayMenu="1" autoRespond="0" system="1">
<Status medium="ASTRA" type="Do%20Not%20Disturb"/>
</AwayMessage>
<AwayMessage label="Set%20all%20Offline" text="" awayState="1" awayMenu="0" autoRespond="1" system="1">
<Status medium="ASTRA" type="Offline"/>
</AwayMessage>
<AwayMessage label="Set%20all%20Away" text="Away%20since%20%25time%25%20%28%25timeZoneOffset%25%29" awayState="1" awayMenu="1" autoRespond="1" system="1">
<Status medium="ASTRA" type="Away"/>
</AwayMessage>
<AwayMessage label="Set%20all%20Invisible" text="" awayState="1" awayMenu="1" autoRespond="0" system="1">
<Status medium="ASTRA" type="Invisible"/>
</AwayMessage>
<AwayMessage label="Set%20all%20Back" text="" awayState="0" awayMenu="1" autoRespond="0" system="1">
<Status medium="ASTRA" type="Online"/>
</AwayMessage>
<AwayMessage label="Set%20all%20Idle" text="Idle%20since%20%25time%25%20%28%25timeZoneOffset%25%29" awayState="1" awayMenu="0" autoRespond="1" system="1">
<Status medium="ASTRA" type="Away"/>
</AwayMessage>
</AwayGroup>
</AwayList>
</events>
变量$Path
这应该只有在它一个目录在一个时间,而不是有这样的吧。
\\DFSROOT\DFSSHare\view\Profiles\User1\AppData\Roaming\Trillian\users\User1\Events.xml \\DFSROOT\DFSSHare\view\Profiles\User2\AppData\Roaming\Trillian\users\User2\Events.xml \\DFSROOT\DFSSHare\view\Profiles\User3\AppData\Roaming\Trillian\users\User3\Events.xml \\DFSROOT\DFSSHare\view\Profiles\User4\AppData\Roaming\Trillian\users\User4\Events.xml \\DFSROOT\DFSSHare\view\Profiles\User5\AppData\Roaming\Trillian\users\User5\Events.xml
不要使用'Format-Table'作为流水线中的中间步骤。 – PetSerAl
也不要使用'Out-String',除非你真的打算把结果作为一个字符串。 –