Powershell。如何更改目录中所有文件夹的web.config xml文件的密钥?
如何对C:\Script中的所有web.config文件进行更改?不仅仅是其中一个,而是目录中的所有。谢谢Powershell。如何更改目录中所有文件夹的web.config xml文件的密钥?,xml,powershell,directory,web-config,appsettings,Xml,Powershell,Directory,Web Config,Appsettings,如何对C:\Script中的所有web.config文件进行更改?不仅仅是其中一个,而是目录中的所有。谢谢 $webConfig = 'C:\Script\web.config' $doc = (gc $webConfig) -as [xml] $doc.SelectSingleNode('//appSettings/add[@key="EMAIL_FROM"]/@value').'#text' = 'email@gmailcom' $doc.S
$webConfig = 'C:\Script\web.config'
$doc = (gc $webConfig) -as [xml]
$doc.SelectSingleNode('//appSettings/add[@key="EMAIL_FROM"]/@value').'#text' = 'email@gmailcom'
$doc.Save($webConfig)
继续我的评论。以下所有信息都是从帮助信息中获得的 在PowerShell中为您的用例使用.Net名称空间通常是这样做的
[xml]$webConfig = Get-Content -Path 'C:\Script\web.config'
。。。但是,嘿,选择,对。最好只使用用于XML的内置PowerShell cmdlet
Get-Command -Name '*xml*'
# Results
<#
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet ConvertTo-Xml 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Export-Clixml 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Import-Clixml 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Select-Xml 3.1.0.0 Microsoft.PowerShell.Utility
#>
# Get specifics for a module, cmdlet, or function
(Get-Command -Name Select-Xml).Parameters
(Get-Command -Name Select-Xml).Parameters.Keys
Get-help -Name Select-Xml -Examples
# Results
<#
$Path = "$Pshome\Types.ps1xml"
$XPath = "/Types/Type/Members/AliasProperty"
Select-Xml -Path $Path -XPath $Xpath | Select-Object -ExpandProperty Node
[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"
$Namespace = @{command = "http://schemas.microsoft.com/maml/dev/command/2004/10"; maml = "http://schemas.microsoft.com/maml/2004/10"; dev =
$Path = "$Pshome\en-us\*dll-Help.xml"
$Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"
$Xml | Format-Table @{Label="Name"; Expression= {($_.node.innerxml).trim()}}, Path -AutoSize
$Xml = @"
Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}
$Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}
$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}
Select-Xml -Path $Home\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" | foreach {$_.Node.Innerxml}
#>
Get-Help -Name Select-Xml -Detailed
Get-help -Name Select-Xml -Full
Get-help -Name Select-Xml -Online
这里是一个关于类似用例的SO问答,我为其提供了公认的答案
https://stackoverflow.com/questions/67008189/powershell-find-and-update-all-instances-of-named-object-property-recursively/67009139#67009139
尽管OP的用例是JSON文件,但同样的方法也可以用于XML,尽管使用PowerShell XML cmdlet更为谨慎
Select-Xml -xpath '//data/value[contains(.,"the the")]' |
ForEach-Object{$_.Node.'#text'}
同样,网络上有很多这样的例子:
至于这个
“C:\Script中的所有web.config文件?不只是其中一个”
…获取文件夹路径/目录树中的所有文件时
获取子项
。。。cmdlet用于,同时通过循环使用迭代。对于任何1:多的事情,每天都要做这件事
这就是@Santiago Squarzon
告诉你的
所以,只需修改您的代码帖子就可以了
Get-ChildItem -Path 'RootPathToConfigFiles' |
ForEach-Object {
$webConfig = $PSItem.FullName
$doc = (Get-Content -Path $webConfig) -as [xml]
$doc.SelectSingleNode('//appSettings/add[@key="EMAIL_FROM"]/@value').'#text' = 'email@gmailcom'
$doc.Save($webConfig)
}
您可以使用
Get ChildItem
获取所有的*.config文件,然后您只需要一个foreach
循环。您能给我一个这个问题的例子吗?其他人能帮上忙吗?非常感谢您所需要的一切都在PS帮助文件中,Santiago Squarzon
回答是正确的,请查看示例,并给出答案。这是一件很平常的事。你在找什么?XML/JSON是PowerShell的核心。该用例有特定的内置cmdlet。其次,XML只是文本,就像普通文本一样,您可以使用Select-String cmdlet和-Replece来全局修改文件。这是一个常见的问题,网上、Youtube上以及这里都有大量的例子;从任何地方获取代码时,请遵循以下规则:1
。如果您不了解任何人的代码在做什么,或者不愿意完全接受其结果,则永远不要运行任何人的代码。无论在哪里或谁;除非你愿意承担运行它的所有后果<代码>2。在运行破坏性代码(新建/添加/创建/更新、移动/删除/删除/更新/修改等)之前,请务必完全检查结果。掌握WhatIf/Confirm/Trace命令/Invoke-ScriptAnalyzer的使用<代码>3。所有的输入都是邪恶的,不管它来自哪里,直到您在使用它之前首先验证它。
Get-ChildItem -Path 'RootPathToConfigFiles' |
ForEach-Object {
$webConfig = $PSItem.FullName
$doc = (Get-Content -Path $webConfig) -as [xml]
$doc.SelectSingleNode('//appSettings/add[@key="EMAIL_FROM"]/@value').'#text' = 'email@gmailcom'
$doc.Save($webConfig)
}