2

Я должен удаленно редактировать файл с именем nsclient.ini на сотнях компьютеров, файл содержит некоторые определения команд. Например:

[/settings/external scripts/scripts]    
check_event="C:\Program Files\NSClient++\scripts\Eventlog.exe" -e System -t Error
check_event_application="C:\Program Files\NSClient++\scripts\Eventlog.exe" -e Application -t Error
check_activedir=cscript "C:\Program Files\NSClient++\scripts\Check_AD.vbs" //nologo

Мне нужно добавить новую строку прямо под [/settings/external scripts/scripts] Эта новая строка не должна перезаписывать существующие строки ниже.

Спасибо за вашу помощь.

1 ответ1

3

Использование собственных командлетов PowerShell:

# Set file name
$File = '.\nsclient.ini'

# Process lines of text from file and assign result to $NewContent variable
$NewContent = Get-Content -Path $File |
    ForEach-Object {
        # Output the existing line to pipeline in any case
        $_

        # If line matches regex
        if($_ -match ('^' + [regex]::Escape('[/settings/external scripts/scripts]')))
        {
            # Add output additional line
            'Your new line goes here'
        }
    }

# Write content of $NewContent varibale back to file
$NewContent | Out-File -FilePath $File -Encoding Default -Force

Использование статических методов .Net (ReadAllLines\WriteAllLines):

# Set file name
$File = '.\nsclient.ini'

# Process lines of text from file and assign result to $NewContent variable
$NewContent = [System.IO.File]::ReadAllLines($File) |
    ForEach-Object {
        # Output the existing line to pipeline in any case
        $_

        # If line matches regex
        if($_ -match ('^' + [regex]::Escape('[/settings/external scripts/scripts]')))
        {
            # Add output additional line right after it
            'Your new line goes here'
        }
    }

# Write content of $NewContent varibale back to file
[System.IO.File]::WriteAllLines($File, $NewContent)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .