2015-09-02 147 views
0

嘗試獲取此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 
+0

我不明白你要達到什麼目的。當您在任何地方不使用舊名稱或新名稱時,用什麼目的替換文本文件中的服務器名稱?爲什麼你將所有計算機名稱從AD導出到完全不同的文本文件?爲什麼在更換之前需要停止服務(哪個服務?),然後再重新啓動?你想要做什麼「改變」?請退後一步,描述您嘗試解決的實際問題,而不是您認爲的解決方案。 –

回答

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 
} 
相關問題