LotusNotesサーバーのビューに対してPowershellスクリプトを実行しています。現在、次の方法で出力を生成します。
UserID|Name|Internet Address
user1|John Smith|john.smith@mycompany.com
user2|Joe Smith|joe.smith@mycompany.com
user3|Bill Smith|bill.smith@mycompany.com
注:タイトル行は現在出力の一部ではなく、情報提供のみを目的として表示されています。
現在、出力はテキストファイルに送られますが、XMLに変更する必要があります。データは、次のPowershellスクリプトを使用して抽出されます。
$session = New-Object -ComObject lotus.notessession
$session.initialize()
$session.notesversion
if (Test-Path -Path "c:\myfile.txt") {
Remove-Item -Path "c:\myfile.txt"
}
$db = $session.GetDatabase("lotusServer","names.nsf")
$db.title
$view = $db.GetView('People')
Write-Host "View read : " $view.Name
# Show number of documents
$nbrDocs = $view.AllEntries.Count
Write-Host "Num of Docs : " $nbrDocs
# Get First Document in the View
$doc = $view.GetFirstDocument()
#Read fields for current document
$delim = "|"
$i = 0
while ($doc -ne $null) {
$internetAddress = [string] $doc.GetItemValue("InternetAddress")
$companyname = [string] $doc.GetItemValue("CompanyName")
$fullname = [string] $doc.GetItemValue("FullName")
if ( $companyname -eq "My Company") {
$i = $i + 1
# format the full name field
$fullname = $fullname.Substring(3)
$s = $fullname
$c1 = $s.LastIndexOf(" ")
$c2 = $s.IndexOf("/")
$name = $s.Substring(0,$c2)
$userID = $s.Substring($c1+1)
$zOut = $userID + $delim + $name + $delim + $internetAddress
Write-Host $zOut
Write-Output $zOut| out-file "c:\myfile.txt" -append -width 2000
} #end if
$doc = $view.GetNextDocument($doc)
} #end while
出力を次のようなXML形式にしたいと思います。
<?xml version="1.0" ?>
<Company>
<UserID>user1
<Name>John Smith</Name>
<InternetAddress>john.smith@mycompany.com</InternetAddress>
</UserID>
</Company>
データに重複があってはならず、(ある時点で)出力に複数の会社が含まれる可能性がありますが、全体的な構造は上記のサンプルと大幅に異なることはありません(NameとInternetAddressはUserIDの子です)。
ただし、現在データを解析している方法($ doc -ne $ null)では、一度に1行しか表示されません。XMLへのエクスポート/書き込みの方法を示す例は、一度に実行し、一度に1行は実行しないことを示しています。出力XMLは、他の場所で使用される前に検証されます。このスクリプトの出力をXMLファイルに書き込むことはできますか?その場合、どのように記述しますか?
任意の考え/提案をいただければ幸いです。
ありがとう!