查找具有特定文本文件的所有计算机

时间:2015-09-02 21:36:00

标签: powershell text-parsing

尝试使用此PowerShell脚本检查我域中所有PC上的文件中的特定条目,并将具有指定OLD服务器名称的文件写入文件,然后仅在具有找到值的计算机上运行替换。我可以通过对每台PC执行此操作,因为我知道这只适用于具有匹配数据的那些但是我必须在每台PC上运行停止服务然后启动服务我做出更改而我不想停止/启动域中每台PC上的服务。我已经把所有PC输出到一个文件,但不知道如何将它组合到IF语句中。

$path = "C:\myfile.txt"
$find = "OldServerName"
$replace = "NewServerName"
$adcomputers = "C:\computers.txt"
$changes = "C:\changes.txt"

Get-ADComputer -Filter * | Select -Expand Name | Out-File -FilePath .\computers.txt

#For only computers that need the change
Stop-Service -name myservice
(get-content $path) | foreach-object {$_ -replace $find , $replace} | out-file $path
Start-Service -name myservice

1 个答案:

答案 0 :(得分:0)

您可以先检查计算机上的文件是否有任何与给定单词匹配的行。然后只有在找到一行时才处理该文件,即可以在所有计算机上运行这样的事情:

# Check if the computer needs the change - Find any line with the $find word
$LinesMatched = $null
$LinesMatched = Get-Content $path | Where { $_ -match $find }

# If there is one or more lines in the file that needs to be changed
If($LinesMatched -ne $null) {

    # Stop service and replace words in file.
    Stop-Service -name myservice
    (Get-Content $path) -replace $find , $replace | Out-File $path
    Start-Service -name myservice 
}