0

Powershell スクリプトを実行しようとすると、常に次のエラー メッセージが表示されます。

Array assignment to [csr] failed: Cannot convert value "csr" to type "System.Int32". Error: "Input string was not in a correct format.".
At C:\fcheck\run-new.ps1:38 char:38
+         $Applications[$appname][$os][ <<<< $lob]=@()
    + CategoryInfo          : InvalidOperation: (System.Object[]:Object[]) [], RuntimeException
    + FullyQualifiedErrorId : ArrayAssignmentFailed

Array assignment to [csr] failed: Cannot convert value "csr" to type "System.Int32". Error: "Input string was not in a correct format.".
At C:\fcheck\run-new.ps1:42 char:38
+         $Applications[$appname][$os][ <<<< $lob]+=$location
    + CategoryInfo          : InvalidOperation: (c$\temp:String) [], RuntimeException
    + FullyQualifiedErrorId : ArrayAssignmentFailed

Array assignment to [csr] failed: Cannot convert value "csr" to type "System.Int32". Error: "Input string was not in a correct format.".
At C:\fcheck\run-new.ps1:38 char:38
+         $Applications[$appname][$os][ <<<< $lob]=@()
    + CategoryInfo          : InvalidOperation: (System.Object[]:Object[]) [], RuntimeException
    + FullyQualifiedErrorId : ArrayAssignmentFailed

Array assignment to [csr] failed: Cannot convert value "csr" to type "System.Int32". Error: "Input string was not in a correct format.".
At C:\fcheck\run-new.ps1:42 char:38
+         $Applications[$appname][$os][ <<<< $lob]+=$location
    + CategoryInfo          : InvalidOperation: (c$\temp:String) [], RuntimeException
    + FullyQualifiedErrorId : ArrayAssignmentFailed

次の行から来ているようです

Import-CSV applications.csv | ForEach-Object {
    $appname = $_.appname.ToLower()
    $os = $_.os.ToLower()
    $lob = $_.lob.ToLower()
    $location = $_.location.ToLower()

    if ($Applications.Keys -notcontains $appname) {
        $WindowsOS=@{}
        $WindowsOS["windows xp"]=@()
        $WindowsOS["windows 7"]=@()
        $Applications[$appname]=$WindowsOS
    } 

    if ($Applications[$appname][$os].Keys -notcontains $lob) {
        $Applications[$appname][$os][$lob]=@()
    }

    if ($Applications[$appname][$os][$lob].Keys -notcontains $location) {
        $Applications[$appname][$os][$lob]+=$location
    }
}

どうすれば解決できますか?

4

1 に答える 1

1

$WindowsOS 要素をハッシュ テーブルではなく配列として宣言しました。$lob 変数を新しいキーとして割り当てようとすると、それらを配列として宣言したため、数値が期待されます。代わりにハッシュ テーブルを使用するように宣言を変更すると、すべて設定されているはずです。下記参照。

if ($Applications.Keys -notcontains $appname) {
    $WindowsOS=@{}
    $WindowsOS["windows xp"]=@{}   # <-- Change to hash table notation as shown
    $WindowsOS["windows 7"]=@{}    # <-- Change to hash table notation as shown
    $Applications[$appname]=$WindowsOS
} 
于 2013-10-02T10:49:09.967 に答える