与Powershell脚本相关的错误

时间:2012-06-09 11:55:37

标签: powershell configuration

我使用Powershell(.ps1)脚本扫描物理应用程序和Web服务器,以识别与我们的应用程序相关的配置文件,这些文件中包含硬编码的IP地址。

我正在执行脚本并收到错误的Windows服务器的Powershell版本-1.0。

我正在"您无法在空值表达式上调用方法"

方案是:在我的本地物理机上运行脚本运行正常,但是,在我的应用服务器上运行它会给我上述错误。

$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)我在App服务器上评估此表达式时遇到错误,该服务器在我的本地运行正常。

2 个答案:

答案 0 :(得分:3)

在Powershell v1中没有“开箱即用”的支持来创建泛型类型(读取:你在v1中使用的是v2语法)。

$itemsToScan = New-Object System.Collections.Generic.List[string]会在Powershell v1中抛出异常,变量itemToScan将为$null。作为一种解决方法,您可以使用New-GenericObject

答案 1 :(得分: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,您不应再费心提取字符串值,而是利用传递实际对象的优势。