Glam Prestige Journal

Bright entertainment trends with youth appeal.

I have to edit remotely a file called nsclient.ini on hundreds of computers, the file contains some command definitions. For example:

[/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

I need to add a new line just beneath [/settings/external scripts/scripts] This new line should not overwrite the existing lines beneath.

Thanks for your help.

1 Answer

Using native PowerShell cmdlets:

# 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

Using .Net static methods (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)
1