私はちょっと答えが見つからないような厄介な問題があります。私はプログラムをアンインストールするためのPowerShellスクリプトと、特定の順序で削除したいプログラムでスクリプトを実行するためのバッチファイルを使用しています。私はウェブ上のスクリプトを発見し、それは私のテストマシン上で完全に動作します。この問題は、別のマシンでスクリプトを実行すると始まります。 これは私が取得エラーです:powershellの入力文字列が正しい形式ではありません
Error formatting a string: Input string was not in a correct format..
At C:\Users\currentuser\Desktop\uninstallScript.ps1:60 char:1
+ &msiexec `/qn `/x `{$stringer`}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ({{0}}}:String) [],
RuntimeException
+ FullyQualifiedErrorId : FormatError
そしてここでは、PowerShellスクリプトです:
###########################################
######## Written by DC 2012-02-13#########
###########################################
<#
.SYNOPSIS
Uninstalls software by only passing the Software Title.
Should work with all msiexec string uninstallers.
For uninstall commands that end in uninstall.exe or helper.exe a "/S" is
used as a switch.
.PARAMETER DisplayName
The complete or partial name of the software being uninstalled. Must appear
as shown in add/remove programs (case insenstive).
.EXAMPLE
Uninstall-Program Java
Will search the registry and uninstall all instances of Java from a machine.
#>
[cmdletBinding()]
Param
(
[String]$DisplayName = $(throw "DisplayName is Required")
)
Set-Variable -Name ThirtyMachine -Value
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" -Option Constant
Set-Variable -Name SixtyMachine -Value
"HKLM:\SOFTWARE\WOW6432NODE\Microsoft\Windows\CurrentVersion\Uninstall" -
Option Constant
Set-Variable -Name ThirtyUser -Value
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" -Option Constant
Set-Variable -Name SixtyUser -Value
"HKCU:\SOFTWARE\WOW6432NODE\Microsoft\Windows\CurrentVersion\Uninstall" -
Option Constant
$regs = $ThirtyMachine,$SixtyMachine,$ThirtyUser,$SixtyUser
foreach ($reg in $regs)
{
if(Test-Path $reg)
{
$SubKeys = Get-ItemProperty "$reg\*"
}
else
{
$SubKeys = $null
}
foreach($key in $SubKeys)
{
if($key.DisplayName -match "$DisplayName")
{
Write-Host "Found Software " $key.DisplayName
if($key.UninstallString -match "^msiexec")
{
$startGUID = $key.UninstallString.IndexOf("{") + 1
$endGuid = $key.UninstallString.IndexOf("}") - $startGUID
$stringer = $key.UninstallString.Substring($startGUID,$endGuid)
Write-Host "Uninstaller Known, now uninstalling"
&msiexec `/qn `/x `{$stringer`}
}
if($key.UninstallString.Replace('"',"") -match 'uninstall.exe\Z' -or
$key.UninstallString.replace('"',"") -match 'helper.exe\Z')
{
$stringer = $key.UninstallString.Replace('"',"")
if(Test-Path $stringer)
{
Write-Host "Possible Uninstaller found. Trying" $key.UninstallString "/S"
&$stringer /S
}
}
}
}
}
私は、変数$stringer
が正しい値を含んでいることを確認するためのPowerShell ISEでコードをデバッグ。だから、これは2台のマシンで動作するPowerShellのバージョンと関係があると私は信じています。スクリプトが動作するテストマシンはバージョン2ですが、エラーが発生したマシンはバージョン4です。パワーサルを習得し始めたので、私はこのマシンで頭を悩ましています。うまくいけば解決するのは簡単です。私は提供された助けを感謝します。
あなたが適切にどのようにここでそれを呼び出すための方法ですか? –
エラーは何がうまくいかないかを明示します。これらの文字の前に墓地のアクセントを入れる理由はありません。 '&msiexec'/qn ''/x '"{$ stringer}" '必要があれば。 – TheIncorrigible1
@ TheIncorrigible1これはトリックを行ったようです。 – daro91