我需要搜索一个字符串,然后用多个文件中的另一个替换它。声音很简单,但困难的是它是多个网络位置上的多个文件。我尝试使用vscode一次连接到所有位置,然后使用内置的搜索和替换功能。除了我进行大搜索之外,这最重要的工作似乎仍然存在。我现在正在寻找另一种更稳定的方法来做到这一点。有人有任何想法吗?我认为powershell可能是一个很好的竞争者,但不幸的是我不习惯使用PowerShell。 我找到了这个指南,它有点像我想要的,除了我需要一次在多个位置的多个文件上做。 https://mcpmag.com/articles/2018/08/08/replace-text-with-powershell.aspx
我愿意为每个位置运行一个脚本,因为它只能扫描<20个位置。但它需要包含子文件夹。
任何提示都表示赞赏,谢谢! :)
编辑1:文件夹结构因位置而异,因此很难说它的外观。但我可以说没有位置的文件夹结构比15步更深。我正在替换的文本是存储在.config
文件中的证书的指纹。文件长度在100到1000个字符之间,我正在替换的指纹看起来像这个d2e8c58e5b34021671f2121483572f03f54ab9ae
这假设不同的网络位置在受信任的域中或至少是wmi trustedhosts的一部分。还需要在所有涉及的计算机上启用PowerShell远程处理。运行(在提升的PowerShell中)启用-PSRemoting -Force以启用PowerShell远程处理
$command = { Get-ChildItem -Path C:\Test\ -Include *.config -Name -Recurse | ForEach-Object {$configContent = Get-Content -Path $_ -Raw; $configContent.Replace("Old Value", "New Value") | Out-File -FilePath ($_.FullName) -Force } }
Invoke-Command -ComputerName "TestServer1", "TestServer2", "etc..." -ScriptBlock $command
如果您不是域的一部分但具有域/服务器登录,则需要在Invoke-Command函数上使用-Credentials开关。这将基本上找到路径中任何子文件夹中具有.config扩展名的所有文件,获取.config文件的当前内容,替换您的值,最后覆盖现有的配置文件。看看,这将获得该路径中的每个.config文件。如果你有多个它也会抓住它,但如果它没有字符串,它只会重写相同的文件。
如果没有看到文件夹结构和文件的示例,则很难给出完整的答案。但是我可能会建立一系列ForEach
片段。例如:
ForEach ($Server in $Servers)
{
ForEach ($File in $Files)
{
Select-String -Path $File -Pattern "$ExampleString"
}
}