2017-06-28 6 views
0

私は狂っていると思うが、この奇妙な行動の説明があることを願っている。私は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の両方のボックスで同じ結果をテストしました。

答えて

0

私はこの質問をもう一度聞いて答えました。誰にでも見えるもの:

。オブジェクトに適用された置き換え方法は、そのオブジェクトを変更しません。使用

$CONV = $KIXOLD | where {$_ -like "*If `$VAR<`"1.2.3`""} 
$KIXOLD = $kixold.Replace("$CONV", "   If `$VAR<`"1.2.4`"") 
$KIXOLD | Set-Content $Temp 

または

$CONV = $KIXOLD | where {$_ -like "*If `$VAR<`"1.2.3`""} 
($kixold.Replace("$CONV", "   If `$VAR<`"1.2.4`"")) | Set-Content $Temp 
$KIXOLD = (Get-Content $Temp) 
関連する問題