Найдите строку в текстовом файле и добавьте текст в конце - PullRequest
0 голосов
/ 04 октября 2018

У меня проблема с модулем Firefox.Чтобы решить эту проблему, мне нужно добавить текст в текстовый файл, который находится в профиле Firefox каждого пользователя.

Я могу скопировать новый текстовый файл в профиль каждого пользователя, используя приведенный ниже скрипт powershell:

    # Check to see if AWP is actually installed

    $chkAWPExists = "C:\Program Files\Middleware Directory\Middleware"
    $aWPExists = Test-Path $chkAWPExists

    # If AWP Exists copy the pkcs11.txt file to all Firefox Profiles found.

    If ($aWPExists -eq $True) {
        Write-Log "AWP Exists. Copying pkcs11.txt to all firefox profiles"
        Get-ChildItem -Path 'C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\pkcs11.txt' |
        ForEach-Object {
            Copy-Item -Path 'pkcs11.txt' -Destination $_.DirectoryName
        }
        }
    else {
        Write-Log "AWP doesn't seem to be installed. Please install Oberthur Authentic web pack before activating this module."
        ExitCode 1
    }

Но моя проблема в том, что каждый текстовый файл, кажется, имеет уникальную информацию для каждого пользователя.Возможно, имеет смысл просто добавить новые текстовые строки в конец текстового файла.

Может кто-нибудь помочь мне разобраться, как добавить текст в профиль каждого пользователя и просмотреть их все?

Это пример двух строк текста, которые мне нужно добавить:

library=etpkcs11.dll 
name=eToken PKCS#11 Module

Буду признателен за любую помощь.

Я также не могу вспомнить, как я собираюсь разрешить новые профиликак только я запускаю скриптНо это битва за другой день.

1 Ответ

0 голосов
/ 04 октября 2018

Это должно работать:

$toAppend = "
library=etpkcs11.dll 
name=eToken PKCS#11 Module
"

# Check to see if AWP is actually installed

$chkAWPExists = "C:\Program Files\Middleware Directory\Middleware"
$aWPExists = Test-Path $chkAWPExists

# If AWP Exists copy the pkcs11.txt file to all Firefox Profiles found.

If ($aWPExists -eq $True) {
    Write-Log "AWP Exists. Copying pkcs11.txt to all firefox profiles"
    ForEach ($file in (Get-ChildItem -Path 'C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\pkcs11.txt'))  {
        $toAppend | Out-File -Append $file -Encoding 'Ascii'
    }
}
else {
    Write-Log "AWP doesn't seem to be installed. Please install Oberthur Authentic web pack before activating this module."
    ExitCode 1
}

Что я изменил, так это следующий раздел кода (цикл foreach):

Get-ChildItem -Path 'C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\pkcs11.txt' |
ForEach-Object {
    Copy-Item -Path 'pkcs11.txt' -Destination $_.DirectoryName
}

в:

ForEach ($file in (Get-ChildItem -Path 'C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\pkcs11.txt'))  {
            $toAppend | Out-File -Append $file -Encoding 'Ascii'

Вместо того, чтобы передавать вызов Get-Childitem в Foreach-Object, он вместо этого вызывает Get-Childitem в цикле foreach, делая $ file путь к определенному файлу.

Фактическое добавление просто передает $ toAppend.переменная (определена вверху) для функции Out-File -Append:

$toAppend | Out-File -Append $file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...