使用Powershell Get-Content和Set-Content编辑文本文件时遇到麻烦

艾坦·雷特(Eytan Rait)

目标:更新服务器上分布的许多文件中一行的文本输入摘要:作为数据中心之间应用程序迁移的一部分,最终用户桌面上的.rdp文件需要更新以指向其远程桌面服务器的新IP地址。所有.rdp文件都位于Windows服务器上SMB共享的重定向文件夹中,该文件夹具有我的管理访问权限。

Powershell经验:最少。仍然试图绕过变量,输出和管道工作的方式。

最初是试图制作一行powershell代码来完成此任务,但被卡住了,不得不使用下面的两行代码制作脚本文件。-第1行:在文件夹结构中搜索所有.rdp文件,并将带有文件名的完整路径存储在变量中。由于用户往往会意外更改文件名,因此将检查每个文件,从而消除了绝对的可预测性。-第2行:我想遍历所有文件,用新地址仅替换两个特定IP地址的实例。然后将更改写入原始文件。

$Path = ls 'C:\Scripts\Replace-RDP\TESTFILES\' -Include *.rdp -Recurse -Force -ErrorAction SilentlyContinue | foreach fullname
$Path | (Get-Content -Path $Path) -Replace 'IPserver1','newIPserver1' -Replace 'IPserver2','newIPserver2' | Set-Content $Path -Force

用Powershell找到了大多数解决方案,但结果有问题。输出到屏幕上的第二行代码会正确更改内存中的内容。但是,写入文件的内容会导致将新服务器IP地址写入所有rdp文件,即使源rdp文件的目标IP地址与-Replace条件不匹配也是如此。

.rdp中相关行上的文本是:
完整地址:s:192.168.1.123更改为:完整地址:s:172.16.1.23

感谢您在到达终点方面的所有帮助。花了数小时从各种站点和代码段中学习。

事物管理

您需要跟踪正在读取的每个文件,以便可以将更改保存到该文件。Foreach-Object使此过程变得容易。Foreach-Object脚本块内部,当前对象$_FullName每个文件值。

$CurrentIP1 = '192\.168\.1\.123'
$CurrentIP2 = '192\.168\.1\.124'
$NewIP1 = '172.16.1.23'
$NewIP2 = '172.16.1.24'

$files = (Get-ChildItem 'C:\Scripts\Replace-RDP\TESTFILES\' -Filter *.rdp -Recurse -Force -File -ErrorAction SilentlyContinue).FullName
$files | Foreach-Object {
    if (($contents = Get-Content $_) -match "$CurrentIP1|$CurrentIP2") {
        $contents -replace $CurrentIP1,$NewIP1 -replace $CurrentIP2,$NewIP2 |
            Set-Content $_
    }
}

请注意,使用-FileGet-ChildItem(别名ls)仅输出文件。由于-replace使用正则表达式进行匹配,因此必须反斜杠转义文字.字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在使用Powershell在文本文件中找到特定行之后,如何停止Get-Content -wait?按需退出管道

使用Get-Content从文本文件中获取过滤的内容

使用get-process和get-content的Powershell脚本

C ++使用fstream对象读取和写入文本文件时遇到问题

为什么在PowerShell的Get-Content,Regex和Set-Content之后都没有换行符?

要在Intent之后读取的Android打开文本文件。ACTION_GET_CONTENT

通过 Intent.ACTION_GET_CONTENT 选择后读取文本文件

Powershell 比较 Get-ChildItem 和 Get-Content 对象

使用zcat和sed或awk编辑压缩的.gz文本文件

通过ssh和脚本使用sudo编辑文本文件

使用基本操作的PowerShell Get-Content如此缓慢

使用PowerShell进行麻烦的编辑和保存以及XML文件

查找和编辑文本文件

使用get-content编辑web.config并在powershell中进行替换

使用 PowerShell,在文本文件中搜索多个匹配项和分组结果

使用Powershell和Regex从文本文件中提取行块

使用Powershell在文本文件中查找和更新键值

使用PowerShell从文本文件中提取用户名和电子邮件

PowerShell的get-child项和get-content深入了几个文件夹

Get-ADUser未使用导入文本文件

Powershell脚本使用启动过程和管道输出文件到文本文件,不工作,产生空白文本文件

使用 whenCreated powershell 命令过滤 Get-ADUser 时遇到一些麻烦

在PowerShell上使用Get-Content时将变量用作-path

编辑文本文件并使用编辑保存文本文件

从文本文件中计算和求和整数时遇到问题

使用 Powershell 腳本讀取文本文件、創建者文件夾和復製文件

使用Matlab打印大列向量的文本文件时遇到的问题

在 C++ 中使用 Visual Studio 读取文本文件时遇到问题

Python:在文本文件中编辑字符串时遇到麻烦