Использование powershell для изменения notes.ini - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть скрипт powershell, который анализирует INI-файл с лотосными нотами и заменяет текст внутри файла.Но в выходном файле отображается только замененный текст.

# Example of PowerShell -replace parameter
## Get-DistinguishedName -- look up a DN from a user's (login) name 
function Get-DistinguishedName { 
Param($UserName)
   $ads = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'')
   $ads.filter = "(&(objectClass=Person)(samAccountName=$UserName))"
   $s = $ads.FindOne()
   return $s.GetDirectoryEntry().DistinguishedName
}

clear-Host
set-executionpolicy remotesigned

$original_file = '.\notes.ini'
$destination_file =  '.\notes2.ini'
$OS = Get-WmiObject -Class win32_OperatingSystem -namespace "root\CIMV2" -ComputerName .
$username = [Environment]::UserName
$userprofile = $env:userprofile
$fullname =  Get-DistinguishedName($username) | %{$data = $_.split(","); $data[0].Substring(3)}
write-Host "Creating $userprofile"

if (($OS.Version -eq "5.1.2600") -or ($OS.Version -eq "5.2.3790")) {
   $lookupTable = @{
       '^SU_FILE_CLEANUP=' = 'SU_FILE_CLEANUP=' + $userprofile + '\Local Settongs\Application Data\smkits' 
       '%username%' = $username 
       '%fullname%' = $fullname 
       '%userprofile%' = $userprofile 
       '^Directory=' = 'Directory=' + $userprofile + '\Local Settongs\Application Data\Lotus\Notes\Data'}
} else {
   $lookupTable = @{
       'SU_FILE_CLEANUP=' = 'SU_FILE_CLEANUP=' + $userprofile + '\AppData\Roaming\smkits' 
       '%username%' = $username
       '%fullname%' = $fullname
       '%userprofile%' = $userprofile
       'Directory=' = 'Directory=' + $userprofile + '\AppData\Local\Lotus\Notes\Data'}
}

Get-Content -Path $original_file | ForEach-Object { 
    $line = $_
    $lookupTable.GetEnumerator() | ForEach-Object {
        if ($line -match $_.Key)
        {
            $line -replace $_.Key, $_.Value
            #break
        }
    }
    write-Host $line
} | Set-Content -Path $destination_file

Чего мне не хватает

1 Ответ

1 голос
/ 24 декабря 2010

В этой строке вы записываете вывод оператора замены в конвейер, который затем будет получен Set-Content

            $line -replace $_.Key, $_.Value

тогда как в этой строке вы записываете выходные данные на хост (то есть консоль powershell), они не попадут в конвейер и не будут получены Set-Content:

    write-Host $line

Чтобы это исправить, просто замените write-host на write-output:

    Write-Output $line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...