1

Powershell (.ps1) スクリプトを使用して、物理アプリケーションと Web サーバーをスキャンし、アプリケーションに関連する構成ファイルを特定します。この構成ファイルには、指定された IP アドレスがハードコーディングされています。

スクリプトを実行してエラーが発生している Windows サーバーの Powershell バージョン -1.0。

「 null 値の式でメソッドを呼び出すことはできません」というメッセージが表示されます

シナリオは次のとおりです。ローカルの物理マシンでスクリプトを実行すると問題なく動作しますが、アプリケーション サーバーで実行すると上記のエラーが発生します。

$itemsFromFolder = Get-ChildItem -path $drive -include *.txt, *web.config, *.htm, *.html, *.asp, *.ascx, *.aspx, *.xml, *.js, *.css, *.sql -recurse -errorAction SilentlyContinue

Write-host -message "initializing object" 
$itemsToScan = New-Object System.Collections.Generic.List[string]
Write-host -message "initializing object $itemsToScan

foreach($item in $itemsFromFolder)
{
    $itemsToScan.Add($item.FullName)
    #Write-host -message "itemstoscan loop $itemsToScan" 
}

System.Collections.Generic.List[string] のオブジェクトをインスタンス化しています。これは変数 $itemstoscan に含まれ、提供している IP パターンをスキャンする項目があります。

質問:

  1. $itemsToScan = New-Object System.Collections.Generic.List[string]これは、異なる構成のマシンで同じスクリプトを実行することを制限しているpowershell 1.0でオブジェクトをインスタンス化する正しい方法ですか?

  2. $itemsToScan.Add($item.FullName)ローカルで正常に動作しているアプリ サーバーでこの式を評価するとエラーが発生します。

4

2 に答える 2

3

Powershell v1 でジェネリック型を作成するための「すぐに使える」サポートはありません (読み取り: v1 で v2 構文を使用しています)。

$itemsToScan = New-Object System.Collections.Generic.List[string]は Powershell v1 で例外をスローし、変数itemToScanは になります$null回避策として、 New-GenericObject の使用に頼ることができます。

于 2012-06-09T20:50:45.470 に答える
1

私が思ったように、あなたはより簡単に望ましい結果を達成することができます:

$itemsFromFolder = Get-Childitem -path $drive -include  *.txt, *web.config, *.htm, *.html, *.asp, *.ascx, *.aspx, *.xml, *.js, *.css, *.sql  -recurse -errorAction SilentlyContinue

$itemsToScan = $itemsfromfolder | Select-Object FullName

PowerShell を使用すると、文字列値をわざわざ抽出するのではなく、実際のオブジェクトを渡すという利点を利用する必要があります。

于 2012-06-13T16:11:04.710 に答える