0

次のファイル hostname.csv から辞書を作成しようとしています:

hostname        type
LON131          gaming
LON132          gaming
LON133          research
LON134          research

以下の Powershell スクリプトを使用します。

get-content hostname.csv | ForEach-Object {
    if ($dict.Keys -contains $_.type) {
        $dict[$_.type]+=$_.hostname
    } else {
        $dict.Add($_.type,@($_.hostname))
    }
}

Write-Host $dict;

しかし、次のエラーメッセージが表示され続けます。

Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At fcheck.ps1:7 char:29
+         $dict.Add($_.type,@($_.hostname))
+                             ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At fcheck.ps1:7 char:29
+         $dict.Add($_.type,@($_.hostname))
+                             ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At fcheck.ps1:7 char:29
+         $dict.Add($_.type,@($_.hostname))
+                             ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At fcheck.ps1:7 char:29
+         $dict.Add($_.type,@($_.hostname))
+                             ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

Exception calling "Add" with "2" argument(s): "Key cannot be null.
Parameter name: key"
At fcheck.ps1:7 char:29
+         $dict.Add($_.type,@($_.hostname))
+                             ~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

何が原因で、どうすれば解決できますか?

4

2 に答える 2

1

「キーを null にすることはできません。」-$_.type期待どおりに評価されません。(テキスト行をGet-Content返し、CSV ファイル/列については何も知りません。)

このエラー メッセージは、問題が引数の数とは何の関係もないという点で誤解を招きます。これは、動的メソッド呼び出しに関する詳細を提供する PowerShell にすぎません。

いずれにせよ、上記の問題がなければ、均一性についてAdd書き直すことができます。$dict[$_.type] = @($_.hostname)もちろん、最初に CSV データを正しく読み取る必要があります。

于 2013-09-30T22:12:34.607 に答える
1

次のように置き換えget-content hostname.csvてみてください。

Import-CSV -Delimiter "`t" -Path hostname.csv

編集:

dictを呼び出す前に初期化していない可能性があると思います$dict.keys。以下は私のために働いた:

$dict = @{} 
Import-Csv -Path .\test.csv -Delimiter "`t" | ForEach-Object {
    if ($dict.Keys -contains $_.type) {
        $dict[$_.type]+=$_.hostname
    } else {
        $dict[$_.type] = @($_.hostname)
    }
}

$dict
于 2013-09-30T22:18:32.483 に答える