1

行から特定の文字列を取得する Powershell スクリプトを作成したいと思います。この文字列は別の行にある可能性があります。したがって、テキストファイルは次のようになります-最初のファイル-

[Bootstrap]
buildid=400m3(Build:9702)
ProductBuildid=9702
ProductCode={55E61709-D7D4-43C0-B45D-BFAF5C09A02D}
UpgradeCode={7C35B9AB-2CE3-4C18-BE7C-5B97EA089EB3}

2 番目のファイル -

[Bootstrap]
ProductCode={2BB8FBB4-CFF9-434E-AA0A-40F5379C1602}

ProductCode= の後に MSI コードを取得する必要があります

$openofficeSetup = "C:\Program Files (x86)\openoffice*\program\setup.ini"
if (Test-Path $openofficeSetup)
{
$openofficeMSI = Select-String "ProductCode=*" $openofficeSetup
$openofficeMSI = $openofficeMSI -Replace "*ProductCode=", ""
msiexec.exe /x $openofficeMSI /qn

5 行目の -Replace は間違っています。以前にすべてを削除する方法がわかりません。

PS N:\> echo $openofficeMSI
C:\Program Files (x86)\OpenOffice 4\program\setup.ini:4:ProductCode={55E61709-D7D4-43C0-B45D-BFAF5C09A02D}

MSI コード以外をすべて削除するにはどうすればよいですか?

オフトピック: 他の方法では、レジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\ で MSI コードを検索しますが、setup.ini を使用するとより簡単に見えます。

4

1 に答える 1

1

select-string の代わりに [regex]::Match を使用します。

$openofficeSetup = Resolve-Path "C:\Program Files (x86)\openoffice*\program\setup.ini" 
if (Test-Path $openofficeSetup){
  $txt=[IO.File]::ReadAllText($openofficeSetup )
  $openofficeMSI = [regex]::Match($txt,'ProductCode=(.*)').Groups[1].Value
  msiexec.exe /x $openofficeMSI /qn
}
于 2013-10-08T11:34:37.370 に答える