Я пытаюсь создать скрипт, который в основном ищет строку, а затем заменяет ее другой строкой. Обе строки будут храниться в виде переменных и создаются при запуске сценария с использованием «Read-Host -Prompt». Моя проблема в нижней части сценария; Я хочу, чтобы скрипт искал строку EXACT, введенную пользователем, '-match', кажется, выполняет поиск по шаблону. Кроме того, в моем операторе if отлично работает Write-Host
, когда пользовательский ввод найден, но когда я пытаюсь добавить код -replace
, под которым он сообщает, что есть значение nullValue.
Вот мой код:
# Copy device.txt, append today's date, move to backup folder
$sourcePath = 'C:\path\to\source\file\file.txt'
$destPath = 'C:\path\to\source\file\Backup\file_' + (Get-Date -Format yyyyMMdd)+'.txt'
Copy-Item -Path $sourcePath -Destination $destPath
Write-Host 'File has been copied to backup folder'
#Ask for user input on old ID vs new ID
$oldDeviceId = Read-Host -Prompt "What is the old device ID you're replacing?"
$newDeviceId = Read-Host -Prompt "What is the new device ID?"
#Check for a match on $oldDeviceId
$sourceFile = (Get-Content 'C:\path\to\source\file\file.txt')
$sfContainsOdi = $sourceFile | ForEach-Object {$_ -match $oldDeviceId}
#If $oldDeviceId is found, replace with $newDeviceId
if ($sfContainsOdi -contains $true) {
Write-Host "Found $oldDeviceId"
$replaceString = $replaceString -replace ($oldDeviceId, $newDeviceId)
} else {
Write-Host "Could not find $oldDeviceId, please make sure you've input the correct device ID"
}
Я не уверен, как добавить -replace
в мое заявление if
.
Edit:
Когда я запустил предложение @Ansgar Wiechers, замены не было. Вот пример содержимого моего файла:
QWER147,/qwer=nmsdf/asdf=A1
ASDF258,/qwer=jkl /asdf=A1
ZXCV369,/qwer=yuio /asdf=A1
Иногда идентификатор в первом столбце необходимо изменить. Например, я пытаюсь изменить / заменить «QWER147» из приведенного выше списка новым идентификатором, например «QWER159».