私は狂っていると思うが、この奇妙な行動の説明があることを願っている。私はKIXファイルを新しい場所にコピーし、新しいバージョンと古いバージョンのEXEでファイルバージョンをチェックし、複数の場所でKIXファイルを変更するスクリプトを持っています。以下は簡略版です。スクリプトを実行しているときにPowershellの設定内容が機能しない - コンパイラエラーが発生する可能性がありますか?
最初と最後のset-content
は常に動作します。スクリプト全体を実行すると、ファイルのバージョンを確認した後に表示されるset-content
は、すべてのスクリプトの実行に失敗します(すべてのファイルに異なるファイルバージョンのset-content
のインスタンスが複数あり、すべて失敗します)。
ただし、ブレークポイントを設定するか、そのセクションをハイライト表示して実行するだけで動作します。私は、ブロックがここに表示されていないそのブロックでさらに処理するので、セクションがヒットしていることを知っています(複数のcopy-item
など)。
私が失敗すると言うと、コンテンツがファイル内で更新されないということです。エラーはなく、ただ更新されません。
私はすべての行の間に複数の秒のstart-sleep
を入れてみましたが、それは役に立ちません。私はまた、バージョンを宣言し、fileversioninfo
を実行しないで、できるだけシンプルにしようとしましたが、それでも失敗します。私はブレークポイントを置くと動作するので、トラブルシューティングに苦労しています。
#Declare Paths
$Temp = "\\NewLocation\e$\Temp"
$path = "\\share\folder"
$FinalDest = "\\FinalRestingPlace\Folder"
#Copy file to Temp
Copy-item "\\OtherShare\file1.kix" $Temp
#Get-Content
$KIXOLD = (get-content $Temp\file1.kix)
#Increment Version Number
[decimal]$OLDVER = 12.0
$NEWVER = ($oldver + .1)
これは
#Update Version Number in File
$VerLine = select-string -Pattern $oldver -path $temp\file1.kix | select -ExpandProperty LineNumber | select -Index 1
$KIXOLD[$VerLine - 1] = "`$ScriptVer = `"$NEWVER`" ; Current Script Version Number"
$KIXOLD | set-content $temp\file1.kix
これは
if(Test-Path $path)
{
if(Test-Path "$path\File1.exe")
{
#Check Old And new versions
$NewVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$path\file1.exe").FileVersion
$OLDVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$FinalDest\file1.exe").FileVersion
#Find the old version in the text file and replace with new
#This FAILS unless there's a breakpoint or it's run separately
$CONV = $KIXOLD | where {$_ -like "*If `$VAR<`"$OLDVersion*`""}
($kixold).Replace("$CONV", " If `$VAR<`"$NewVersion`"") | set-content $Temp\file1.kix
}
}
これは
#Update notes to contain current version - THIS WORKS
$linenum = select-string -Pattern $oldver -path $Temp\file1.kix | select -ExpandProperty LineNumber | select -Index 0
$NewLine = [int]$linenum +1
$KIXOLD[$linenum] = ";$NewVer - MyName"
$KIXOLD | set-content $temp\file1.kix
作品を失敗した作品は、誰もが似た何かを見て、またはそれが失敗している理由上の任意のアイデアを持っていますか?私はWindows Server 2012 R2とWindows 10の両方のボックスで同じ結果をテストしました。